Comparaison deux colonnes données en désordre

Comparaison deux colonnes données en désordre Comparaison 2 colonnes excel+alignement (Résolu) » Forum - Programmation Comparer 2 colonnes EXCEL et colorer case. (Résolu) » Forum - Excel Mise en forme conditionnelle et comparaison de colonne [Résolu] (Résolu) » Forum - Excel Comparaison deux colonnes » Forum - Programmation VBA Test comparaison 2 colonnes excel » Forum - VB / VBA

Bonjour,

Je souhaiterais créer un programme qui compare les données de deux colonnes (A et D) et qui m'indique si les données (texte) sont les mêmes dans les deux colonnes. Cependant, elles ne sont pas dans le même ordre (donc sur les mêmes lignes) dans les deux colonnes.
Par exemple, le programme devrait comparer le nombre de fois où il retrouve les mots PARIS et RENNES dans chaque colonne et afficher un message d'erreur si le nombre est différent.
Cependant, ayant beaucoup de noms différents, je ne souhaiterais pas devoir les écrire dans le programme.

Je n'ai pas trouvé de renseignements sur le forum. Est-ce que cela est envisageable ?
Merci d'avance

Forum

Comparaison deux colonnes données en désordre Comparaison 2 colonnes excel+alignement (Résolu) » Forum - Programmation Comparer 2 colonnes EXCEL et colorer case. (Résolu) » Forum - Excel Mise en forme conditionnelle et comparaison de colonne [Résolu] (Résolu) » Forum - Excel Comparaison deux colonnes » Forum - Programmation VBA Test comparaison 2 colonnes excel » Forum - VB / VBA

Web: www.shapebootstrap.net

6 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour Lili, bonjour le forum,

Peut-ête comme ça :
Sub Macro1() Dim O As Worksheet 'déclare la variable O (Onglet) Dim PLA As Range 'déclare la variable PLA (PLage de la colonne A) Dim PLD As Range 'déclare la variable PLD (PLage de la colonne D) Dim TCA As Variant 'déclare la variable TCA (Tableau de la Colonne A) Dim TCD As Variant 'déclare la variable TCD (Tableau de la Colonne D) Dim I As Integer 'déclare la variable I (Incrément) Dim VT As Byte 'déclare la variable VT (Valeur Trouvée) Dim NA As Integer 'déclare la variable NA (Nombre en colonne A) Dim J As Integer 'déclare la variable J (incrément) Dim K As Integer 'déclare la variable K (incrément) Dim L As Integer 'déclare la variable L (incrément) Dim ND As Integer 'déclare la variable ND (Nombre en colonne D) Dim TD() As Variant 'déclare la variable TD (Tableau Doublons)  '********************** 'Colonne A -> Colonne D '**********************  Set O = Worksheets("Feuil1") 'défnit l'onglet O Set PLA = O.Range("A1:A" & O.Cells(Application.Rows.Count, "A").End(xlUp).Row) 'définit la plage PLA Set PLD = O.Range("D1:D" & O.Cells(Application.Rows.Count, "D").End(xlUp).Row) 'définit la plage PLD TCA = PLA 'définit le tableau de la colonne A TCA TCD = PLD 'définit le tableau de la colonne A TCA  For I = 1 To UBound(TCA, 1) 'boucle 1 : sur toutes les lignes I du tableau TCA     VT = 0 'initialise la valeur trouvée VT     NA = Application.WorksheetFunction.CountIf(PLA, TCA(I, 1)) 'définit le nombre d'occurrence de la valeur TCA de la boucle dans la colonne A : NA     For J = I To UBound(TCD, 1) 'boucle 2 : sur toutes les lignes J du tableau TCD         If TCA(I, 1) = TCD(J, 1) Then 'condition 1 : si la valeur de la boucle 1 et de la boucle 2 est identique             VT = 1 'redifinit la valeur trouvée VT             ND = Application.WorksheetFunction.CountIf(PLD, TCD(J, 1)) 'définit le nombre d'occurrence de la valeur TCD de la boucle dans la colonne D : ND             If ND <> NA Then 'condition 2 : si les deux nombre sont différents                 If K > 0 Then 'condition 3 : si K est supérieur à 0 (=> si le tableau des doublons TD n'est pas vide)                     For L = 0 To UBound(TD) 'boucle 3 : sur tous les éléments du tableau des doublons TD                         If TCA(I, 1) = TD(L) Then GoTo suite 'si la valeur de TCA de la boucle 1 est égale à un élément du tableau des doublons TD, va à l'éqiquette "suite"                     Next L 'prochain élément de la boucle 3                 End If 'fin de la condition 3                 MsgBox NA & " fois la valeur " & TCA(I, 1) & " en colonne A" & Chr(13) & _                    ND & " fois la valeur " & TCA(I, 1) & " en colonne D" 'message                 ReDim Preserve TD(K) 'redimensionne le tableau des doublon TD                 TD(K) = TCA(I, 1) 'récupère la valeur de TCA de la boucle 1 dans le tableau des doublons TCD                 K = K + 1 'incrémente K                 Exit For 'for de la boucle 2             End If 'fin de la condition 2         End If 'fin de la condition 1 suite: 'étiquette     Next J 'prochaine ligne J de la boucle 2     If VT = 0 Then 'condition 4 : s'il n'existe aucune occurrence de TCA de la boucle 1 dans la colonne D (=> si VT=0)         If K > 0 Then 'condition 5 : si K est supérieur à 0 (=> si le tableau des doublons TD n'est pas vide)             For L = 0 To UBound(TD) 'boucle 4 : sur tous les éléments du tableau des doublons TD                 If TCA(I, 1) = TD(L) Then GoTo fin 'si la valeur de TCA de la boucle 1 est égale à un élément du tableau des doublons TD, va à l'éqiquette "fin"             Next L 'prochain élément de la boucle 5         End If 'fin de la condition 5         MsgBox "La colonne D ne contient pas la valeur " & TCA(I, 1) & " !" 'message         ReDim Preserve TD(K) 'redimensionne le tableau des doublon TD         TD(K) = TCA(I, 1) 'récupère la valeur de TCA de la boucle 1 dans le tableau des doublons TCD         K = K + 1 'incrémente K     End If 'fin de la condition 4 fin: 'étiquette Next I 'prochaine ligne de la boucle 1  '********************** 'Colonne D -> Colonne A (commentaires idem) '**********************  For I = 1 To UBound(TCD, 1)     VT = 0     ND = Application.WorksheetFunction.CountIf(PLD, TCD(I, 1))     For J = I To UBound(TCA, 1)         If TCD(I, 1) = TCA(J, 1) Then             VT = 1             NA = Application.WorksheetFunction.CountIf(PLA, TCA(J, 1))             If ND <> NA Then                 If K > 0 Then                     For L = 0 To UBound(TD)                         If TCD(I, 1) = TD(L) Then GoTo suite2                     Next L                 End If                 MsgBox ND & " fois la valeur " & TCD(I, 1) & " en colonne D" & Chr(13) & _                    NA & " fois la valeur " & TCD(I, 1) & " en colonne A"                 ReDim Preserve TD(K)                 TD(K) = TCD(I, 1)                 K = K + 1                 Exit For             End If         End If suite2:     Next J     If VT = 0 Then         If K > 0 Then             For L = 0 To UBound(TD)                 If TCD(I, 1) = TD(L) Then GoTo fin2             Next L         End If         MsgBox "La colonne A ne contient pas la valeur " & TCD(I, 1) & " !"         ReDim Preserve TD(K)         TD(K) = TCD(I, 1)         K = K + 1     End If fin2: Next I End Sub 

Merci ThauTheme 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 24451 internautes ce mois-ci

Reply
réponses:
  • lili4915

    Bonjour ThauTheme,

    Cette formule fonctionne parfaitement sur mes tableaux simples (lorsque chaque ville est en lien avec une seule autre) et me sera très utile, merci beaucoup !!

    Cependant, je me suis rendue compte qu’elle ne fonctionnait pas sur mes tableaux les plus complexes (lorsque chaque ville est en lien avec plusieurs autres). C’est de ma faute, l’exemple que j’ai donné n’était pas le plus adéquat. Pour mes tableaux les plus développés j’aurais besoin d’une formule qui analyse les réciprocités entre chaque couple de villes. Qu’elle fasse par exemple le rapprochement entre le nombre de
    « colonne A : PARIS / colonne D : RENNES » et
    « colonne A : RENNES / colonne D : PARIS ».

    J’imagine qu’à ce niveau, cela devient compliqué à mettre en place…

  • Patrice33740

    Re,
    et bonjour ThauTheme,

    Je ne comprends pas ton problème :
    1) « L'objectif est de savoir si il y a une réciprocité entre les données » c'est à dire ???
    2) « une formule qui analyse les réciprocités entre chaque couple de villes » c'est quoi un couple de villes ?
    Sous quelle forme veux-tu le résultat ???
    Je suppose que pour des milliers de lignes, afficher un message n'est pas satisfaisant.

  • lili4915

    Une réciprocité entre chaque couple de villes comme l'exemple que j'ai montré tout à l'heure :
    « colonne A : PARIS / colonne D : RENNES » et
    « colonne A : RENNES / colonne D : PARIS ».

    Les messages devraient m'afficher par exemple "35x la valeur entre Paris et Rennes et 35x la valeur entre Rennes et Paris". Ainsi, si le chiffre n'est pas le même cela signifie qu'il y a une erreur dans mon tableau entre ce couple de villes.

    En réalité il s'agit d'opérations entre sociétés et non de villes, j'ai donné cet exemple par soucis d'anonymat.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

« Est-ce que cela est envisageable ? » : Très probablement !

Il faudrait préciser le problème :
- Les textes cherchés sont-ils des mots contenus dans le texte des cellules ?
- Vu que tu ne veux pas les préciser dans le code, quels critères permettent de retenir ou d’éliminer les mots ?
- Quelle est exactement le résultat recherché ?
- ...

Reply
réponses:
  • lili4915

    Voici un exemple très court.
    L'objectif est de savoir si il y a une réciprocité entre les données de chaque colonne.
    Dans ce cas il y a un problème avec Rennes et Strasbourg.
    La formule me permettrait de vérifier des tableaux avec un nombre de lignes conséquent.

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed