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
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
A voir également:
- Comparaison deux colonnes données en désordre
- Comment faire deux colonnes indépendantes dans word - Guide
- Inverser deux colonnes excel - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Fusionner deux colonnes excel - Guide
- Deux ecran pc - Guide
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
14 juin 2018 à 11:15
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
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
14 juin 2018 à 10:20
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é ?
- ...
« 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é ?
- ...
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
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.
![](https://img-19.ccm2.net/hMl_AzN1ag6-IUJxFOC6QoA7W98=/92e0c206803442d8b79694f4c14395fc/ccm-ugc/Capture.PNG)
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.
14 juin 2018 à 11:42
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…
14 juin 2018 à 12:25
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.
14 juin 2018 à 14:26
« 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.