Comparaison deux colonnes données en désordre
lili4915
Messages postés
13
Statut
Membre
-
lili4915 Messages postés 13 Statut Membre -
lili4915 Messages postés 13 Statut Membre -
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
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:
- Comparaison deux colonnes données en désordre
- Fuite données maif - Guide
- Comment faire deux colonnes sur word - Guide
- Inverser deux colonnes excel - Guide
- Comparaison million milliard - Accueil - Technologies
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
2 réponses
Bonjour Lili, bonjour le forum,
Peut-ête comme ça :
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
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é ?
- ...
« 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é ?
- ...
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…
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.
« 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.