Comparaison de chaines de caractères Excel avec boucles en VBA - Pb code

PJ7

XLDnaute Nouveau
Bonjour,

Je souhaite récupérer, en VBA (excel 97, windows XP) les données de la colonne "C" de "Feuil2" d'un classeur, dans la colonne "C" de "Feuil1" du même classeur, lorsque la chaine de caractères composée des données de la colonne "A" et "B" de "Feuil1" est égale à la chaine de caractères composée des données des colonnes "A" et "B" de "Feuil2". Je précise qu'il n'y a pas toujours de données dans la colonne "C" de "Feuil2". Le code que j'ai élaboré ne fonctionne pas (Cf. macro + données en pièce jointe). Je ne suis pas un spécialiste des boucles. Merci de votre indulgence.

Par avance merci:)
 

Pièces jointes

  • Comparaison chaines identiques.xls
    37.5 KB · Affichages: 75

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Comparaison de chaines de caractères Excel avec boucles en VBA - Pb code

Bonjour PJ7et bienvenu :)

Ne pouvant pas tester le code sur Excel 97, j'ai modifié votre code au minimum. Essayez le code suivant:
VB:
Sub comparaison_identique()
Dim compteur1 As Long, compteur2 As Long
Dim chaine1 As String, chaine2 As String

For compteur1 = 5 To 16
  chaine1 = Sheets("Feuil1").Range("A" & compteur1)
  chaine2 = Sheets("Feuil1").Range("B" & compteur1)
  'on peut, si on le désire, effacer ou non les anciens contenus de la colonne C
  ' passer la ligne suivante en commentaire ou non suivant le cas.
  Sheets("Feuil1").Range("C" & compteur1) = ""
  For compteur2 = 2 To 11
    If chaine1 = Sheets("Feuil2").Range("A" & compteur2) And chaine2 = Sheets("Feuil2").Range("B" & compteur2) Then
      Sheets("Feuil1").Range("C" & compteur1) = Sheets("Feuil2").Range("C" & compteur2)
      Exit For
    End If
  Next compteur2
Next compteur1

End Sub

nb: Attention à la comparaison par concaténation. Supposons qu'en Feuil1 se trouve une ligne avec "ABCDE" en colonne A et avec "FGH" en colonne B. Le concatenation donne "ABCDEFGH".
Si en Feuil2 vous avez une ligne avec "ABC" en A et avec "CDEFGH" en B alors la concaténation donne également :"ABCDEFGH".

La comparaison des deux donne un résulat VRAI alors que les quatre cellules sont différentes. Suivant ce qu'on veut comparer, le résultat renvoyé peut donc être erroné.
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : Comparaison de chaines de caractères Excel avec boucles en VBA - Pb code

bonjour Pj7,mapomme
une autre proposition
tu peux mettre option compare texte(en début de code,avant 1ère procédure)
ou ucase(chaine1)=ucase(chaine2)

Code:
Sub comparaison_identique()

    Dim compteur1 As Long, compteur2 As Long
    Dim chaine1 As String, chaine2 As String

    For compteur1 = 2 To 11
        With Sheets("Feuil2")
            If .Range("C" & compteur1) <> "" Then chaine1 = .Range("A" & compteur1) & "-" & .Range("B" & compteur1)
        End With
        
        If chaine1 <> "" Then
            For compteur2 = 5 To 16
                With Sheets("Feuil1")
                    chaine2 = .Range("A" & compteur2) & "-" & .Range("B" & compteur2)
                    If chaine1 = chaine2 Then
                        .Range("C" & compteur2) = Sheets("Feuil2").Range("C" & compteur1)
                    End If
                End With
            Next compteur2
        End If
        
        chaine1 = ""
    Next compteur1

End Sub
 

Discussions similaires