XL 2016 (Résolu) VBA Copie selon plusieurs critères

youklebambou

XLDnaute Junior
Hello
Je cherche à créer un fichier avec une macro me permettant de copier des données d'une feuille à une autre mais en fonction et de la date et du nom! Je précise qu'il faut absolument que ce soit en VBA puisque les noms de la page 1 et de la page 2 peuvent être différents. Les données copiés en page 2 doivent l'être que lorsqu'il y a 2 noms identiques sur les 2 pages. On m'a proposé de le faire avec power query mais ça me supprimer des noms en page 2 hors ils faut qu'il restent...
Je vous mets un fichier d'exemple (sachant que sur celui ci je n'ai pas encore travaillé de macro) : sur le fichier je souhaite que les données soit mis sur le bon nom et la bonne date....
j’espère avoir été assez limpide dans mes explications ^^
Merci de votre aide.
 

Pièces jointes

  • TEST.xlsm
    14.5 KB · Affichages: 16

job75

XLDnaute Barbatruc
Bonjour youklebambou, le forum,

Voyez le fichier joint et cette macro qui utilise 2 Dictionary :
Code:
Sub Envoyer()
Dim t, d1 As Object, d2 As Object, ncol%, i&, x$, j%
'---1ère feuille---
t = Sheets("Page 1").UsedRange
If Not IsArray(t) Then Exit Sub 'sécurité
ncol = UBound(t, 2)
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(t)
    x = t(i, 1)
    If x <> "" Then
        d1(x) = ""
        For j = 2 To ncol
            If t(1, j) <> "" Then d2(x & t(1, j)) = t(i, j)
        Next j
    End If
Next i
'---2ème feuille---
With Sheets("Page 2")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    t = .UsedRange
    If Not IsArray(t) Then Exit Sub 'sécurité
    ncol = UBound(t, 2)
    For i = 1 To UBound(t)
        x = t(i, 1)
        If d1.exists(x) Then
            For j = 2 To ncol
                If d2.exists(x & t(1, j)) Then t(i, j) = d2(x & t(1, j))
            Next j
        End If
    Next i
    .UsedRange = t 'restitution
    .Activate 'facultatif
End With
End Sub
Edit : traité le cas où la 2ème feuille est filtrée.

Bonne journée.
 

Pièces jointes

  • TEST(1).xlsm
    23.2 KB · Affichages: 28
Dernière édition:

youklebambou

XLDnaute Junior
ouah....alors ça fonctionne très bien mais alors pour l'adapter à mon fichier je sens que je vais galérer....^^
J'ai du mal à comprendre le code... qu'est ce que les dictionary ?? sachant que dans mon fichiers, les noms des équipiers ne sont pas exactement aux mêmes endroit, quels sont les parties du code à modifier??
 

youklebambou

XLDnaute Junior
Oh ....pardon...je voulais pas vous vexer.
excusez ma maladresse.
Donc bonjour.
justement a la base, les noms sont en colonne E sur une des pages c'est pour cela que j'essayais de voir comment fonctionnais votre formule.
mais j'ai trouvé une parade en ajoutant une page caché sur laquelle sont reporté les données dans la bonne colonne.
Pour le reste , j'ai cru comprendre que dictionary permettait d'enregistrer une base de données mais est il possible que cette formule fonctionne sur un ordi et pas sur un autre ou est ce que c'est propre au classeur?
en tout cas merci de votre patience et encore désolé pour mon oubli de politesse...;
 

youklebambou

XLDnaute Junior
Ok....alors si je joins un fichier lambda, c'est parce qu'il m'est impossible de mettre le bon fichier puisqu'il contient les données personnelles de mon entreprise. J'ai refait un fichier test pour éviter de divulguer des infos perso des employés! Le but était ensuite de réadapter votre aide à mon fichier.
Maintenant vous m'avez bien aidé et je vous en remercie ! mais pas la peine d'être si désagréable dans vos réponses! je me suis excusé pour mon manque de tact mais le votre est tout aussi agaçant.
bref je clos le sujet
bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
312 169
Messages
2 085 910
Membres
103 033
dernier inscrit
thazet