Comparaison deux colonnes données en désordre

Fermé
lili4915 Messages postés 13 Date d'inscription lundi 11 juin 2018 Statut Membre Dernière intervention 14 juin 2018 - 14 juin 2018 à 09:42
lili4915 Messages postés 13 Date d'inscription lundi 11 juin 2018 Statut Membre Dernière intervention 14 juin 2018 - 14 juin 2018 à 14:26
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
A voir également:

2 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
14 juin 2018 à 11:15
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

1
lili4915 Messages postés 13 Date d'inscription lundi 11 juin 2018 Statut Membre Dernière intervention 14 juin 2018
14 juin 2018 à 11:42
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…
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775 > lili4915 Messages postés 13 Date d'inscription lundi 11 juin 2018 Statut Membre Dernière intervention 14 juin 2018
14 juin 2018 à 12:25
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.
0
lili4915 Messages postés 13 Date d'inscription lundi 11 juin 2018 Statut Membre Dernière intervention 14 juin 2018
14 juin 2018 à 14:26
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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
14 juin 2018 à 10:20
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é ?
- ...
0
lili4915 Messages postés 13 Date d'inscription lundi 11 juin 2018 Statut Membre Dernière intervention 14 juin 2018
14 juin 2018 à 10:39
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.
0