Microsoft 365 Doublons si valeur unique ou nulle

ExcLnoob

XLDnaute Occasionnel
Bonsoir le Forum,
J'aurai besoin de votre aide svp...

Je dois reporter des données d'une colonne d'un onglet à une autre colonne dans un autre onglet selon 1 condition et après, copier ces données dans une autre colonne en supprimant les doublons.
J'ai trouvé des bouts de code qui me permettent de le faire mais je dois renouveler cette opération toutes les semaines et parfois il n'y aura pas de doublon dans la colonne source et par conséquent dans la colonne où seront reportées les données et où la recherche de doublons devra se faire et il n'y aura parfois qu'une seule valeur.
C'est là que je bloque..
Comment écrire que si valeur unique dans la colonne où je dois chercher les doublons alors copier cette même valeur unique dans la colonne cible et que si valeur nulle (aucune donnée) alors on inscris rien dans la colonne cible.

Je ne sais pas si j'exprime bien ma demande. Je mets un fichier test pour plus de clarté.

Merci pour votre aide.
 

Pièces jointes

  • Classeur2.xlsm
    18.5 KB · Affichages: 16
Solution
Oui effectivement, le chemin a changé mais pas la demande...
J'ai toujours eu besoin de faire l'exercice sur plusieurs noms mais comme je bloquais sur le filtre je ne l'ai pas indiqué dès le départ.
Au temps pour moi...
Ta solution du dictionnaire a considérablement boosté le traitement des doublons et résout mon problème quand les valeurs sont unique. Merci pour ça.
Ne me reste plus qu'a faire cela pour 4 personnes en même temps sur des colonnes différentes...
Je vais creuser de mon côté.
Merci.
Bonjour,

@ExcLnoob : Juste pour rappel, il faut respecter la charte du forum. Les formules de politesses sont de rigueur.
Un Bonjour, Un Bonsoir ne coûte rien.

Quant à ton problème, ne faudrait-il pas envisager l'éventualité...

cp4

XLDnaute Barbatruc
A mon avis c'est pour cela que le select case pouvais être pertinent non ?
Dans le cas de Jacques on copie en colonne I
Dans le cas de Paul on copie en colonne J
Etc..
Ou alors j'ai tout faux. Qu'en penses-tu ?
Bonsoir,

@ExcLnoob : Entre ta demande au 1er post et ce dernier. Il me semble que tu navigues à vue.
Il fallait prendre un peu de temps pour bien rédiger ta demande.
Dès le départ tu as ouvert une discussion en étant persuadé que le filtre avancé et select case étaient les bons outils pour arriver à tes fins.
Pour ce soir, je ferme boutique.
Bonne soirée.
 

ExcLnoob

XLDnaute Occasionnel
Bonsoir,

@ExcLnoob : Entre ta demande au 1er post et ce dernier. Il me semble que tu navigues à vue.
Il fallait prendre un peu de temps pour bien rédiger ta demande.
Dès le départ tu as ouvert une discussion en étant persuadé que le filtre avancé et select case étaient les bons outils pour arriver à tes fins.
Pour ce soir, je ferme boutique.
Bonne soirée.
Oui effectivement, le chemin a changé mais pas la demande...
J'ai toujours eu besoin de faire l'exercice sur plusieurs noms mais comme je bloquais sur le filtre je ne l'ai pas indiqué dès le départ.
Au temps pour moi...
Ta solution du dictionnaire a considérablement boosté le traitement des doublons et résout mon problème quand les valeurs sont unique. Merci pour ça.
Ne me reste plus qu'a faire cela pour 4 personnes en même temps sur des colonnes différentes...
Je vais creuser de mon côté.
Merci.
 

cp4

XLDnaute Barbatruc
Oui effectivement, le chemin a changé mais pas la demande...
J'ai toujours eu besoin de faire l'exercice sur plusieurs noms mais comme je bloquais sur le filtre je ne l'ai pas indiqué dès le départ.
Au temps pour moi...
Ta solution du dictionnaire a considérablement boosté le traitement des doublons et résout mon problème quand les valeurs sont unique. Merci pour ça.
Ne me reste plus qu'a faire cela pour 4 personnes en même temps sur des colonnes différentes...
Je vais creuser de mon côté.
Merci.
Bonjour,

@ExcLnoob : Juste pour rappel, il faut respecter la charte du forum. Les formules de politesses sont de rigueur.
Un Bonjour, Un Bonsoir ne coûte rien.

Quant à ton problème, ne faudrait-il pas envisager l'éventualité d'avoir plus de 4 noms?

Bonne journée.

edit: code à tester sur ton fichier de travail et éventuellement adapter
VB:
Option Explicit

Sub PrésentationColonnes()
   Dim d As Object, c, i As Long, Tb
   Set d = CreateObject("Scripting.Dictionary")
   With Sheets("recap")
      For Each c In Range("B2:B" & .[A65000].End(xlUp).Row)
         d(c.Value) = d(c.Value) & c.Offset(0, -1) & "|"
      Next c
   End With
   With Feuil2
      .Range("I1").CurrentRegion.ClearContents
      If d.Count > 0 Then
         .Range("I1").Resize(, d.Count) = d.keys
         i = 0
         For Each c In d.items
            Tb = Split(c, "|")
            .Range("I2").Offset(, i).Resize(UBound(Tb)) = Application.Transpose(Tb)
            i = i + 1
         Next c
      End If
   End With
   MsgBox "Traitement terminé!", vbInformation + vbOKOnly, "Process"
End Sub
 
Dernière édition:

ExcLnoob

XLDnaute Occasionnel
Bonjour,

@ExcLnoob : Juste pour rappel, il faut respecter la charte du forum. Les formules de politesses sont de rigueur.
Un Bonjour, Un Bonsoir ne coûte rien.

Quant à ton problème, ne faudrait-il pas envisager l'éventualité d'avoir plus de 4 noms?

Bonne journée.

edit: code à tester sur ton fichier de travail et éventuellement adapter
VB:
Option Explicit

Sub PrésentationColonnes()
   Dim d As Object, c, i As Long, Tb
   Set d = CreateObject("Scripting.Dictionary")
   With Sheets("recap")
      For Each c In Range("B2:B" & .[A65000].End(xlUp).Row)
         d(c.Value) = d(c.Value) & c.Offset(0, -1) & "|"
      Next c
   End With
   With Feuil2
      .Range("I1").CurrentRegion.ClearContents
      If d.Count > 0 Then
         .Range("I1").Resize(, d.Count) = d.keys
         i = 0
         For Each c In d.items
            Tb = Split(c, "|")
            .Range("I2").Offset(, i).Resize(UBound(Tb)) = Application.Transpose(Tb)
            i = i + 1
         Next c
      End If
   End With
   MsgBox "Traitement terminé!", vbInformation + vbOKOnly, "Process"
End Sub
 

ExcLnoob

XLDnaute Occasionnel
Bonjour @cp4 ,
Effectivement la politesse ne devrait pas se solder..
Je suis un peu la tête dans le guidon et ne fait plus attention certaines fois...
Bref, merci pour ton retour.
J'ai regardé et testé rapidement mais cela efface mes données et ne copie plus rien. Il faut que j'aille plus en avant pour effectivement adapter.
Merci encore et encore dsl
Bonne après-midi
 

cp4

XLDnaute Barbatruc
Bonjour,
cela efface mes données et ne copie plus rien
Est-ce que sur le fichier que tu as joins ça fonctionne correctement? car chez moi tout est bon d'après ce que j'ai compris.
En effet, ça efface la plage qui reçoit les données traitées par code. Pour moi, les données sont ajoutées au fur et à mesure. Puis sur la deuxième feuille, tu récupères via le code le nom (prénom) de l'agent avec ses numéros de commande.
En réexaminant le code, il y a un petit oubli mais très important. Ajoute un point (.) devant Range de la 4ème ligne de code (soit For each c range(".....)

A+
 

ExcLnoob

XLDnaute Occasionnel
Bonjour,

Est-ce que sur le fichier que tu as joins ça fonctionne correctement? car chez moi tout est bon d'après ce que j'ai compris.
En effet, ça efface la plage qui reçoit les données traitées par code. Pour moi, les données sont ajoutées au fur et à mesure. Puis sur la deuxième feuille, tu récupères via le code le nom (prénom) de l'agent avec ses numéros de commande.
En réexaminant le code, il y a un petit oubli mais très important. Ajoute un point (.) devant Range de la 4ème ligne de code (soit For each c range(".....)

A+
Bonjour @cp4
Désolé pour ma réponse tardive..
Effectivement ça fonctionne merveilleusement bien !!
Je l'ai adapté sur mon fichier final et ça fonctionne également.
Merci, merci et encore merci !!
Je mets le sujet en résolu.
Belle journée!
 

Statistiques des forums

Discussions
312 024
Messages
2 084 728
Membres
102 642
dernier inscrit
isa_mat