Partage
  • Partager sur Facebook
  • Partager sur Twitter

[access] ajouter les elements à une chaine

Sujet résolu
    31 août 2010 à 13:45:52

    Bonjour,

    J’aimerai comparer deux de deux tables différentes je me suis rendu compte que certains élément du champs de la table 1 sont contenus dans le champs de la table2 mais sous une autre forme. Par exemple dans le champs de la table1
    0040A00001
    0040A00012
    0040A29892A


    Et dans le champs de la table2 j’ai la même chose mais écrite sous cette forme
    0040A00001
    0040A12
    0040A29892A
    Avant de faire la comparaison j’aimerai parcourir ma table 2 et y ajouter les éléments manquants (ici les zéros).
    Quelqu’un a t-il une idée ?

    merci
    • Partager sur Facebook
    • Partager sur Twitter
      31 août 2010 à 14:32:12

      bonjour,
      avec les fonctions chaines de caractères (str, len, trim, right, left...) et &.
      L'algo est simple:
      calculez la longueur de la chaine,
      si elle "petite" la décomposer en 2 (partie gauche - apparemment elle est toujours de 5 caractères, il faut vérifier -, partie droite),
      puis concaténer gauche, autant de zéros que nécessaire et droite.
      Le tout dans UPDATE simple et rapide. Plus rapide qu'avec du VBA.
      En conclusion j'espère qu'ils n'ont pas oublié les cours d'algo dans votre école d'ingénieurs :)
      • Partager sur Facebook
      • Partager sur Twitter
        31 août 2010 à 14:37:08

        tu peux me donner un exemple de ce que tu dis.
        voici ce que moi j'ai fait ca marche mais comment faire un update avec ma base de données

        Sub essai()
        Dim valeur As String 
        valeur = "0040A12"
        Call remplacer(valeur)
        
        
        End Sub
        Function remplacer(stringARemplacer As String)
        
        Dim longueurChaine As Long
        Dim longueurChaineDroit As Long
        Dim chiffre As Long
        Dim chiffre4, chiffre3, chiffre2, chiffre1, chiffre0, resultatGauche, resultatDroit, resultat As String
        
        longueurChaine = Len(stringARemplacer)
        chiffre = longueurChaine - 5
        chiffre4 = "0000"
        chiffre3 = "000"
        chiffre2 = "00"
        chiffre1 = "0"
        
        If longueurChaine < 10 Then
        
        resultatGauche = Left(stringARemplacer, 5)
        'MsgBox resultatGauche
        resultatDroit = Right(stringARemplacer, chiffre)
         longueurChaineDroit = Len(resultatDroit)
        If longueurChaineDroit > 3 And longueurChaineDroit <= 4 Then
        resultatDroit = chiffre1 & resultatDroit
        resultat = resultatGauche & resultatDroit
            MsgBox resultat
             
         ElseIf longueurChaineDroit > 2 And longueurChaineDroit <= 3 Then
            
            resultatDroit = chiffre2 & resultatDroit
           resultat = resultatGauche & resultatDroit
            MsgBox resultat
        
            
            ElseIf longueurChaineDroit > 1 And longueurChaineDroit <= 2 Then
            
            resultatDroit = chiffre3 & resultatDroit
            resultat = resultatGauche & resultatDroit
            MsgBox resultat
        
             
              
            ElseIf longueurChaineDroit < 2 Then
            
            resultatDroit = chiffre4 & resultatDroit
            resultat = resultatGauche & resultatDroit
            MsgBox resultat
        
             
            
           End If
            
        ' MsgBox stringARemplacer
         End If
        
         
        End Function
        • Partager sur Facebook
        • Partager sur Twitter
          1 septembre 2010 à 4:18:40

          bonjour,
          dans du code il faut se connecter à la base de données et exécuter l'ordre UPDATE nomDeTable SET nomDeColonne = 'valeur'.
          Pour améliorer un peu ton code, tu pourrais avoir une variable ZEROS = "0000" et non pas 4 variables et extraire autant de 0 que nécessaire avec LEFT. Il serait beaucoup plus court (20 lignes en moins à la louche) et beaucoup moins de IF.
          ça donnerait qq chose du genre (j'abrège) :
          n = 10 - LongDroit - LongGauche
          resultat = gauche & left(ZEROS,n) & droite
          Bon courage.


          • Partager sur Facebook
          • Partager sur Twitter
            1 septembre 2010 à 10:37:26

            j'aimerai que ma fonction me retourne une valeur alors je change la definition comme ceci: Function remplacer(stringARemplacer As String) As String
            et mon sub ressemble à ca

            Sub essai()
            Dim valeur,elet As String
            valeur = "0040A12"
            elt =remplacer(valeur)

            MsgBox elt
            End Sub
            MsgBox elt ne renvoie rien du tout. J'aimerai recuperer elt pour faire l'update.
            merci

            • Partager sur Facebook
            • Partager sur Twitter
              1 septembre 2010 à 14:12:13

              bonjour,
              en fonction de la version de VB il faut dans la fonction :
              soit : nomDEFonction = valeur
              soit : return valeur
              Courage :-) c'est presque fini apparemment.
              • Partager sur Facebook
              • Partager sur Twitter
                2 septembre 2010 à 0:59:18

                voici à quoi ressemble ma fonction actuellement. Malheureusement ca ne marche pas pour tous les cas.
                cas 1: string = 0040A12 resultat= 0040A00012 on doit avoir 5 chiffres après 0040A si cette longueur n'est pas atteinte alors le code rajoute 3 zéros entre 0040A et 12 donc ca marche

                cas 2:string = 0040A12B resultat= 0040A00012B comme dans le premier cas on doit avoir 5 chiffres entre 0040A et B le code rajoute 3 zéros entre 0040A et 12 donc ici aussi ca marche

                cas 3:string = 0381C031BW resultat= 0381C0031BW comme dans les deux autres cas on doit avoir 5 chiffres entre 0381C et BW le code devait rajouter 2 zéros entre 0381C et 031 mais il ne rajoute qu'un seul dommage ca ne marche pas

                Merci de vouloir bien m'aider

                Option Compare Database
                Sub essai()
                Dim valeur, elt As String
                
                valeur = "0040A12BW"
                elt = remplacer((valeur))
                MsgBox elt
                
                
                End Sub
                Function remplacer(ByRef stringARemplacer As String) As String
                
                Dim longueurChaine, longueurString, i, n, longueurStrRestant, longueurChaineDroit, nbr As Long
                
                Dim zeros, strGauche, strDroit, resultat, stringRestant, separateur, str, acceptees As String
                
                longueurChaine = Len(stringARemplacer) 'Retourne la longueur totale de la chaine
                nbr = longueurChaine - 5 ' ceci nous donne la longueur de strDroit qu'on doit encore traiter
                zeros = "0000" 'on doit ajouter apres le string maximum 4 zeros
                
                strGauche = Left(stringARemplacer, 5) ' Retourne strGauche
                
                strDroit = Right(stringARemplacer, nbr) ' Retourne strDroit
                longueurChaineDroit = Len(strDroit) 'Retourne la longueur strDroit
                
                str = "" 'cette variable va contenir le separateur et tout ce qui est à sa droite
                acceptees = "0123456789" 'tout ce qui ne strouve dans cette chaine est considere comme un separateur
                 For i = 1 To Len(strDroit)
                   If InStr(acceptees, Mid(strDroit, i, 1)) = 0 Then
                   str = Mid(strDroit, i, 5)
                   End If
                 Next
                
                
                 longueurString = Len(str) 'Retourne la longueur de str
                 separateur = Right(strDroit, longueurString) 'Retourne le separateur
                
                longueurStrRestant = longueurChaineDroit - longueurString 'calcule la longueur restante du strDroit ce qui va permettre de calculer le string restant
                
                stringRestant = Left(strDroit, longueurStrRestant) 'retourne le stringRestant
                n = 5 - longueurStrRestant ' ceci permet de savoir combien de zeros on rajoutera à strGauche
                resultat = strGauche & Left(zeros, n) & stringRestant & separateur ' le string recherché
                  
                     
                 remplacer = resultat
                
                End Function
                • Partager sur Facebook
                • Partager sur Twitter
                  2 septembre 2010 à 1:14:17

                  il faut bien regarder tous les cas de codification. Dans les exemples que vous me présentés la différence est que le final est soit B soir BW. Si ce cas est le cas général il faut tester la-dessus.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 septembre 2010 à 1:34:14

                    le final n'est pas B ou BW il y en a plusieurs mais j'ai remarqué que ca ne marche pas pour les cas ou le final est suivi de 2 consonnes. Sans vous mentir à ce niveau là j'ai perdu mon latin. J'ai passé toute la journée d'hier à décortiquer mon code sans succès.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 septembre 2010 à 12:41:43

                      bonjour,
                      apparemment le code de base est composé de 10 caractères plus éventuellement ce que l'on pourrait appeler une extension de 1 ou 2 caractères :
                      0040A00001 (10)
                      0040A12 (<10)
                      0040A29892A (>10) dont avec une extension.
                      0040A12345BW (>10) dont avec une extension.
                      Tu ne dois traiter apparemment que les codes dont la longueur est < 10.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 septembre 2010 à 16:04:59

                        c'est exactement ca. mais je n'ai pas toujours trouvé de solution à ca.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 septembre 2010 à 8:31:08

                          Au secours!!! quelqu'un pourrait me dire pourquoi ce cas 0040A12345BW ne marche pas ? quand mon extension est suivie de 2 consonne ca ne marche plus. sinon tout le reste marche bien.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          [access] ajouter les elements à une chaine

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown