XL 2016 Faire apparaitre des données uniques

Nath641

XLDnaute Nouveau
Bonjour à tous,

je vous sollicite aujourd'hui pour m'aider à trouver un code pour faire apparaitre des valeurs qui ne sont pas en double. Avec une macro je parviens à copier coller des données issus d'extraction d'un logiciel que je fais apparaitre ensuite les données dans une autre feuille de mon document synthèse.

En fait je cherche à comparer deux docs excel qui devrait être identique mais qui ne le sont pas. Pour faire simple j'ai mis dans le document en PJ un exemple simplifié de ce que je recherche.

Je souhaite donc récupérer dans un premier temps les données uniques (en blanc) dans la feuille "base de données" Et les coller les unes à la suite des autres dans le tableau de la feuille "synthèse".

On m'a parlé de la méthode find mais je ne la maitrise pas, auriez vous des idées ?

Merci beaucoup pour votre aide
 

Pièces jointes

  • testfind.xlsx
    9.2 KB · Affichages: 11
Solution
D'où la nécessité d'avoi des PJ vraiment représentatives. ;)
En PJ c'est rectifié, il faut passer par deux boucles avec des DL différentes.
NB. Nombre ou texte ne semble pas poser de problème. J'ai vérifié la première colonne point à point, c'est correct.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Nath, et bienvenue sur XLD, bonjour Djidji,
Une approche en VBA avec :
Code:
Sub Différence()
    Dim Tablo, i%, IndX%, IndY%, Plage1, Plage2, F
    [A3:B1000].ClearContents
    Set F = Sheets("feuille base de données")
    DL = F.Range("A65500").End(xlUp).Row
    ReDim Tablo(DL, 1)
    Set Plage1 = F.Range("A2:A" & DL): Set Plage2 = F.Range("B2:B" & DL)
    IndX = 0: IndY = 0
    For i = 2 To DL
        If Application.CountIf(Plage2, F.Cells(i, "A")) = 0 Then
            Tablo(IndX, 0) = F.Cells(i, "A")
            IndX = IndX + 1
        End If
        If Application.CountIf(Plage1, F.Cells(i, "B")) = 0 Then
            Tablo(IndY, 1) = F.Cells(i, "B")
            IndY = IndY + 1
        End If
    Next i
    [A3].Resize(UBound(Tablo, 1), 1 + UBound(Tablo, 2)) = Tablo
End Sub
 

Pièces jointes

  • testfind.xlsm
    18.1 KB · Affichages: 5

Nath641

XLDnaute Nouveau
Bonjour Nath, et bienvenue sur XLD, bonjour Djidji,
Une approche en VBA avec :
Code:
Sub Différence()
    Dim Tablo, i%, IndX%, IndY%, Plage1, Plage2, F
    [A3:B1000].ClearContents
    Set F = Sheets("feuille base de données")
    DL = F.Range("A65500").End(xlUp).Row
    ReDim Tablo(DL, 1)
    Set Plage1 = F.Range("A2:A" & DL): Set Plage2 = F.Range("B2:B" & DL)
    IndX = 0: IndY = 0
    For i = 2 To DL
        If Application.CountIf(Plage2, F.Cells(i, "A")) = 0 Then
            Tablo(IndX, 0) = F.Cells(i, "A")
            IndX = IndX + 1
        End If
        If Application.CountIf(Plage1, F.Cells(i, "B")) = 0 Then
            Tablo(IndY, 1) = F.Cells(i, "B")
            IndY = IndY + 1
        End If
    Next i
    [A3].Resize(UBound(Tablo, 1), 1 + UBound(Tablo, 2)) = Tablo
End Sub
merci beaucoup ! je vous remercie pour ce code qui fonctionne super, j'essaye de privilégier l'approche VBA, autre question si je souhaite changer les colonnes où coller les valeur, quels paramètre est ce que je dois changer ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
VB:
[A3:B1000].ClearContents
Efface les deux colonnes de résultats, donc changer pour les nouvelles colonnes, par ex :
Code:
[X3:Y1000].ClearContents
et
Code:
[A3].Resize(UBound(Tablo, 1), 1 + UBound(Tablo, 2)) = Tablo
Range le tablo résultat, il faut spécifier la première cellule à gauche. Par ex :
Code:
[X3].Resize(UBound(Tablo, 1), 1 + UBound(Tablo, 2)) = Tablo
Changer éventuellement le nom de la feuille contenant les données :
Code:
Set F = Sheets("feuille base de données")
Par ex :
Code:
Set F = Sheets("BDD")
J'ai considéré que la base de données est toujours en colonne A:B, sinon il faut cahnger les noms de colonnes.
... où vous fournissez un fichier plus "représentatif", et je remets à jour. :)
 

Nath641

XLDnaute Nouveau
Re,
VB:
[A3:B1000].ClearContents
Efface les deux colonnes de résultats, donc changer pour les nouvelles colonnes, par ex :
Code:
[X3:Y1000].ClearContents
et
Code:
[A3].Resize(UBound(Tablo, 1), 1 + UBound(Tablo, 2)) = Tablo
Range le tablo résultat, il faut spécifier la première cellule à gauche. Par ex :
Code:
[X3].Resize(UBound(Tablo, 1), 1 + UBound(Tablo, 2)) = Tablo
Changer éventuellement le nom de la feuille contenant les données :
Code:
Set F = Sheets("feuille base de données")
Par ex :
Code:
Set F = Sheets("BDD")
J'ai considéré que la base de données est toujours en colonne A:B, sinon il faut cahnger les noms de colonnes.
... où vous fournissez un fichier plus "représentatif", et je remets à jour. :)
tout fonctionne super merci beaucoup, mais oui en fait je voudrais coller les données en B et en F plutôt qu'en A et B, j'ai réussi à ajuster le reste comme je voulais !
Si j'ai bien compris c'est donc cette partie qu'il faut modifié?
[X3].Resize(UBound(Tablo, 1), 1 + UBound(Tablo, 2)) = Tablo
 

Nath641

XLDnaute Nouveau
Re,
VB:
[A3:B1000].ClearContents
Efface les deux colonnes de résultats, donc changer pour les nouvelles colonnes, par ex :
Code:
[X3:Y1000].ClearContents
et
Code:
[A3].Resize(UBound(Tablo, 1), 1 + UBound(Tablo, 2)) = Tablo
Range le tablo résultat, il faut spécifier la première cellule à gauche. Par ex :
Code:
[X3].Resize(UBound(Tablo, 1), 1 + UBound(Tablo, 2)) = Tablo
Changer éventuellement le nom de la feuille contenant les données :
Code:
Set F = Sheets("feuille base de données")
Par ex :
Code:
Set F = Sheets("BDD")
J'ai considéré que la base de données est toujours en colonne A:B, sinon il faut cahnger les noms de colonnes.
... où vous fournissez un fichier plus "représentatif", et je remets à jour. :)
voilà quelque chose de plus représentatif de ce que je recherche si ça peut vous aider
 

Pièces jointes

  • testfind.xlsx
    9.2 KB · Affichages: 2

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Comme le (la) demandeur (euse) est satisfait(e), je me suis amusé à le faire de deux façons différentes sous power query à partir des deux fichiers "doc1.xlsx" "doc2.xlsx".

la première requête (qui a ma préférence et se nomme "bon appetit) travaille à partir de List.Difference et la seconde (nommée "A Table !") à partir de jointures de tables (2 types de jointures opposés)

Comme les colonnes n'ont pas les mêmes noms, c'était plus rigolo.

Les trois fichiers doivent être dans le même répertoire et le chemin vers ce dernier en cellule A1 du fichier synthèse.

Cordialement
 

Pièces jointes

  • Doc_2.xlsx
    15.8 KB · Affichages: 1
  • Doc_1.xlsx
    15.7 KB · Affichages: 2
  • Synthèse.xlsx
    28.8 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
D'où la nécessité d'avoi des PJ vraiment représentatives. ;)
En PJ c'est rectifié, il faut passer par deux boucles avec des DL différentes.
NB. Nombre ou texte ne semble pas poser de problème. J'ai vérifié la première colonne point à point, c'est correct.
 

Pièces jointes

  • Synthèse stats 2tests.xlsm
    31.6 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 310
Membres
102 859
dernier inscrit
Diallokass