Comparer 2 colonnes chiffres et lettres min majuscules
Bonjour
Voilà je me prends le cerveau depuis plusieurs jours en désespoir total sur un problème surement simplissime mais pas pour moi hélàs. J'ai eu beau chercher ici en lisant plusieurs sujet du même genre avec des posts très instructif mais ça n'a pas fonctionné.
Tout d'abord je suis sous excel 2007 (français) et windows 7.
Mon souci est que j'ai une base de donnés de plusieurs milliers de lignes sur une feuille excel (feuil1) .
Colonne A, dans chaque cellule figure une série de plusieurs chiffres et lettres qui peuvent être en majuscules et miniscules du genre (55MPo789NJi97)
Colonne B, dans chaque cellule figure également une série de plusieurs chiffres et lettres
Selon la feuille les colonne A et B ne sont pas toute forcément de la même longeur, certaines fois la A et plus longue que la B et inversement mais chaque feuille que je dois trier comporte toutes plusieurs milliers de lignes, d'où le taff pharaonique si je ne parviens pas à automatiser cela car je dois repérer et faire apparaître tous les doublons pouvant figurer COLONNE B.
J'ai déjà tenté diverses lignes de commandes trouvé sur le forum mais rien n'a fonctionné quant à présent. Pour commencer j'ai déplacé la colonne B pour la mettre en Colonne C pour ainsi conserver les cellules de la colonne B vide de tout élément. J'ai inséré diverses lignes de commandes comme dit plus haut dont en voici certaine:
=RECHERCHEV(A:A;C:C;FAUX)
=RECHERCHEV(A1!$C1:$C8200;FAUX)
=NB.SI(A1;D:D)
=RECHERCHEV(A:A;C$1:C$5420;1;FAUX)
Aucune de ces dernières n'ont abouti, j'ai systématiquement dans la colonne B un message d'erreur du type #VALEUR! ou #N/A
D'où vient le souci et comment serait t il possible d'y remédier? par quelle ligne de formule à insérer ? Autre détail se serait génial sur un plan visuel si derrière chaque cellule de la colonne C (donc dans la colonne B) pouvait figurer un 1 lorsque que c'est un doublon .
Je vous remercie par avance d'avoir pris le temps de me lire et un grand merci à ceux qui contribueront à solutionner mon souci.
Et comme une image parle mieux qu'un long pavé je joint un screen
Pourtant je sélectionne bien chaque partie à analyser des 2 colonnes et un 1 devrait figurer en colonne B LIGNE 12
Salut,
Quel est ton objectif :
effacer les doublons présent dans la colonne B;
ou
de ne garder, dans la colonne B, les valeurs qui n'apparaissent pas dans la colonne A ?
Aussi, pourrait-tu joindre un fichier à ta demande Stp ?
Si tu travail sur énormément de lignes et différentes feuille la solution VBA sera la plus adéquate.
Cdlt,
Salut,
NB.SI fonctionne quand tu mets les arguments dans le bon sens :p :
Formule à recopier en B4 et à étirer :
=NB.SI($C$4:$C$13;A4)ça te renvoie le nombre de doublons...
Bon courage,
Je viens de tenter ce code Girodo mais ça ne semble pas fonctionner ça m'indique 0 alors que je devrais en avoir 1 sur cet exemple non?
Le 1 devrait figurer ligne 12 normalement.
@VH_AE je souhaite simplement qu'il m'indique par 1 la cellule de colonne C correspondant à un doublon de la colonne A. Dans cet exemple le doublon est face à face entre la colonne A et C mais il pourrait très bien être dans une autre ligne
et quand je valide voici le résu 0 /// Alors que devrais apparaitre 1 pour me le signale en ligne 12 comme ci dessous
qu'est ce qui ne va pas ou que je fais mal ?
Re,
Tu n'a pas rentré la formule que ta donné Girodo.
Tu ne peut pas mettre une plage de cellule comme critère. Il faut que tu positionne ta formule devant A4 et que tu la copie vers le bas.
Ainsi, cela va tester l'existence des occurrences en A4, A5, A6 et ainsi de suite. Tu aura un résultat devant chaque ligne, si un 1 s'affiche s'est qu'il existe un doublon de cette valeur.
Cdlt,
Désolé je suis un boulet mais ca ne fonctionne toujours pas il me retourne 0 devant chaque cellule alors que j'au au moins un doublon identifié avec la colonne 1 ---- du coup en colonne B il devrait afficher 1 en ligne 15 comme signalé
est ce que =RECHERCHEV ne serait pas plus adapté ?
Pourtant sur ce coup il me semble avoir bien entré la formule de girodo
nb.si($c$4:$c$19;a4) doit être en b4, comme ça quand on tire la formule vers le bas ;a4 devient ;a5 puis ;a6 etc...
njhub 13 Sep 2017 08:51
Bonjour ericlulu,
=RECHERCHEV(A:A;C:C;FAUX)
=RECHERCHEV(A1!$C1:$C8200;FAUX)
=NB.SI(A1;D:D)
=RECHERCHEV(A:A;C$1:C$5420;1;FAUX)
tout d'abord recherchev à besoin d'au moins deux colonnes
la première pour le critère,
la seconde pour le résultat,
donc tout ce qui est "RECHERCHEV(A:A;" engendre une erreur.
il faut le paramètre à chercher =RECHERCHEV(A8; par ex.
dans la première colonne de la zone de recherche =RECHERCHEV(A8;A1!$C1:$F8200;
puis indiquer dans quelle colonne se trouve le résultat qu'on veut afficher, au cas présent si les résultats sont en F, mettre 4 =RECHERCHEV(A8;A1!$C1:$F8200;4;
ensuite indiquer si la colonne est triée, 0 non, 1 oui =RECHERCHEV(A8;A1!$C1:$F8200;4;1)
NB.SI(), indiquez la zone, puis le critère =NB.SI(D:D;A1)
Bonjour,
Bon sans fichier ça va être complexe à mettre en oeuvre, mais tu peux tester le code qui suit. A coller dans un module standard, et a utiliser!
Option Explicit
Sub Doublons()
Dim tabdata As Variant
Dim tabdata2 As Variant
Dim tabdoublon() As Long
Dim i As Long, j As Long
Dim lgSh1 As Long
Dim lgSh2 As Long
'On recupere la taille des colonnes à comparer => Changer le nom de feuille et les lettres de colonnes pour adapter
lgSh1 = ThisWorkbook.Sheets("Feuil1").Range("C65536").End(xlUp).Row
lgSh2 = ThisWorkbook.Sheets("Feuil1").Range("A65536").End(xlUp).Row
'On redimensionne le tableau de sortie
ReDim tabdoublon(lgSh1, 0) As Long
'On recupere les data => Changer le nom de feuille et les lettres de colonnes pour adapter
tabdata = ThisWorkbook.Sheets("Feuil1").Range("C1:C" & lgSh1).Value
tabdata2 = ThisWorkbook.Sheets("Feuil1").Range("A1:A" & lgSh2).Value
'on compare pour chaque ligne non vide
For i = 1 To lgSh1
If tabdata(i, 1) <> "" Then
For j = 1 To lgSh2
If tabdata(i, 1) = tabdata2(j, 1) Then tabdoublon(i, 0) = 1: Exit For
Next j
End If
Next i
'On colore les cellules contenant un doublon
Application.ScreenUpdating = False
For i = 1 To lgSh1
If tabdoublon(i, 0) = 1 Then
'Ici idem, on peux changer le nom de la feuille et la lettre de la colone pour adapter.
'On peux aussi changer le code couleur de remplissage (ici rouge! ;) )
ThisWorkbook.Sheets("Feuil1").Range("C" & i).Interior.Color = RGB(255, 0, 0)
End If
Next i
Application.ScreenUpdating = False
End SubPS: C'est une adaptation de code que j'ai fait plus tôt dans la journée, il va colorer les doublons en rouge. SI tu préfère mettre un "1" dans la colonne "B", reviens vers moi, je ré-adapterai ça!
Dit moi si ça fonctionne pour toi!
Yann
Waouhhhh superbe génial je ne sais que dire.... plus de 2 jours que je galérais comme un dingue VRAIMENT un immense merci tu n'imagines même pas le temps que tu vas me faire gagner Pour ce qui est de l’adaptation ligne colonne et autre petit détails du code selon mes tableaux je devrais y parvenir enfin normalement sinon je reviendrais ici
Encore un grand merci, est ce que je pourrais demander un petit plus depuis ce code si tu sais adapater en récapitulatif comme dans screen en haut de la colonne le chiffre correspondant à l'occurence
Tiens, je t'ai fais la modification, dans le doute, comme je sais pas trop où, à terme, sera situé la cellule dans laquelle tu veux afficher le récapitulatif, je te le fait apparaître dans un message box!
Option Explicit
Sub Doublons()
Dim tabdata As Variant
Dim tabdata2 As Variant
Dim tabdoublon() As Long
Dim i As Long, j As Long
Dim nbDoublons as long
Dim lgSh1 As Long
Dim lgSh2 As Long
'On initialise le nombre de doublons
nbDoublons = 0
'On recupere la taille des colonnes à comparer => Changer le nom de feuille et les lettres de colonnes pour adapter
lgSh1 = ThisWorkbook.Sheets("Feuil1").Range("C65536").End(xlUp).Row
lgSh2 = ThisWorkbook.Sheets("Feuil1").Range("A65536").End(xlUp).Row
'On redimensionne le tableau de sortie
ReDim tabdoublon(lgSh1, 0) As Long
'On recupere les data => Changer le nom de feuille et les lettres de colonnes pour adapter
tabdata = ThisWorkbook.Sheets("Feuil1").Range("C1:C" & lgSh1).Value
tabdata2 = ThisWorkbook.Sheets("Feuil1").Range("A1:A" & lgSh2).Value
'on compare pour chaque ligne non vide, si il y a un doublon, on augmente le nombre de doublon
For i = 1 To lgSh1
If tabdata(i, 1) <> "" Then
For j = 1 To lgSh2
If tabdata(i, 1) = tabdata2(j, 1) Then tabdoublon(i, 0) = 1: nbDoublons = nbDoublons +1 :Exit For
Next j
End If
Next i
'On colore les cellules contenant un doublon
Application.ScreenUpdating = False
For i = 1 To lgSh1
If tabdoublon(i, 0) = 1 Then
'Ici idem, on peux changer le nom de la feuille et la lettre de la colone pour adapter.
'On peux aussi changer le code couleur de remplissage (ici rouge! ;) )
ThisWorkbook.Sheets("Feuil1").Range("C" & i).Interior.Color = RGB(255, 0, 0)
End If
Next i
Application.ScreenUpdating = False
'On fait apparaitre le messageBox avec un message personalisé en fonction du nombre de doublon! ;)
If nbDoublons > 1 then
Msgbox "Scan terminé, " & nbDoublons & " doublons trouvés.",vbinformation, "Terminé"
ElseIf nbDoublons = 1 then
Msgbox "Scan terminé, " & nbDoublons & " doublon trouvé.",vbinformation, "Terminé"
Else
Msgbox "Scan terminé, aucun doublon trouvé.",vbinformation, "Terminé"
End If
End SubDit moi si c'est bon pour toi!
Yann
Autre détails L-Yann dans le code je pourrais également mettre
lgSh2 = ThisWorkbook.Sheets("Feuil1").Range("A1048576").End(xlUp).Rowau lieu de
lgSh2 = ThisWorkbook.Sheets("Feuil1").Range("A65536").End(xlUp).Rowvu que j'ai une page total regroupant où j'ai compilé les data de plusieurs feuilles et la feuille en question va jusqu'à la ligne 1 048 576
Ouais, normalement tu peux sans souci!
Tu seras peut être limité en terme de mémoire du PC par contre.. Excel te renverra un message d'erreur dans ce cas là. Tu me diras, et je te ferai une procédure moins gourmande!
Superbe L-Yann tout est parfait et le msg box topissime . Vraiment un grand merci pour ton aide et ta compétence.
Je vais rougir!
Content d'avoir pu t'aider! Bonne journée!
N'oublie pas de mettre ton sujet en résolu!
Yann