XL 2016 Faire apparaitre des données uniques

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
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

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 ?
 
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. 🙂
 
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
 
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

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

En PJ c'est rectifié.
J'utilise deux arrays car les colonnes résultats ne sont pas consécutives.
Voilà un document plus représentatif de ce que je recherche. les données que je cherche à analyser se trouvent dans la deuxième feuille, et n'ont pas le même nombre de ligne
 

Pièces jointes

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour