rapatrier des données

marpier

XLDnaute Nouveau
Bonjour à tous,
Je suis débutant en VBA Excel, et je cale sur une macro, voila mon soucis,
j ai 3 feuilles : dans la feuil1 j ai le récapitulatif de tous les n° de commandes sans les noms des clients.
dans la feuil2 j ai quelques n° de commandes (qui sont repris aussi dans la feuil1) avec les noms des clients.
dans la feuil3 idem feuil2 (avec des n° de commandes différents) et les noms de clients.
Je voudrais creer une macro qui me rapatrie dans la feuil1 les noms des clients par comparaison des n° de commandes.
Pouvez-vous m aider
Merci à vous.
je joins le fichier
 

Pièces jointes

  • Commandes.xlsx
    8.7 KB · Affichages: 50
  • Commandes.xlsx
    8.7 KB · Affichages: 51
  • Commandes.xlsx
    8.7 KB · Affichages: 48

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : rapatrier des données

Bonjour marpier, et bienvenue sur le forum

voir solution par formule dans le fichier joint

à+
Philippe
 

Pièces jointes

  • 111.xlsx
    12 KB · Affichages: 39
  • 111.xlsx
    12 KB · Affichages: 47
  • 111.xlsx
    12 KB · Affichages: 43

marpier

XLDnaute Nouveau
Re : rapatrier des données

Merci à Hasco et Phlaurent55 pour vos réponses, mais le fichier va être exploité par quelques personnes qui ne connaissent pas trés bien excel, c'est pour cette raison que si cela est possible de créer une macro, je la rattacherai a un bouton, afin d'eviter les erreurs de formules.
je vous remercie encore pour vos réponses.
 
G

Guest

Guest
Re : rapatrier des données

Re,

post #1 à dit:
suis débutant en VBA Excel, et je cale sur une macro
Je note que dans ton fichier, il n'y a pas la moindre tentative ou essai de macro!

Voici qui copie la formule dans la plage pour ensuite n'en laisser que les valeurs renvoyées.
Code:
Const xlFunction = "=IFERROR(VLOOKUP(A2,Feuil2!Adr1,2,FALSE), IFERROR(VLOOKUP(Feuil1!A2,Feuil3!Adr2,2,FALSE),""""))"
Sub Recup()
  Dim adr1 As String, adr2 As String
  'Récupérer les adresses de plage sur feuil2 et feuil3
  adr1 = Feuil2.Range("A2:B" & Feuil2.Cells(Rows.Count, 1).End(xlUp).Row).Address
  adr2 = Feuil3.Range("A2:B" & Feuil3.Cells(Rows.Count, 1).End(xlUp).Row).Address
  'Mettre la formule dans Feuil1
  With Feuil1.Range("B2:B" & Feuil1.Cells(Rows.Count, 1).End(xlUp).Row)
    .Formula = Replace(Replace(xlFunction, "Adr1", adr1), "Adr2", adr2)
    'Boucler le temps de recalcul de la feuille 
     '(pas forcément necessaire si peu de données ou pas d'autre longs calculs dans le classeur)
    Do
    Loop Until Application.CalculationState = xlDone
    .Value = .Value 'Ne laisser que les valeurs
  End With
End Sub

A+
 
Dernière modification par un modérateur:

marpier

XLDnaute Nouveau
Re : rapatrier des données

Un grand merci à toi Hasco, pour ta réalisation, j avais esseyé sur un autre fichier, mais ça ne marchais pas je vais pouvoir l'analyser avec tes commentaires et la réécrire.
Encore merci et bonne fin d aprés-midi.
 

reve24

XLDnaute Occasionnel
Re : rapatrier des données

Bonjour
je me suis servi du fichier d' HASCO ( Bravo :)) pour ré ecrire pour effectuer une matrice .
Mais quand on utilise un seul onglet nous avons #N/A

peux t on utiliser ceci pour unerecherche V a 2 variables

exemple dans mon fichier si TOTO1 A13 alors A14

merci
 

Pièces jointes

  • RechercheVbaNew1.xlsm
    25.3 KB · Affichages: 34
G

Guest

Guest
Re : rapatrier des données

Re

Reve24, le problème est différent pour ta matrice dont la formule de recherche pour toutes les cellules:
=SIERREUR(RECHERCHEV($A2;Feuil2!$A$2:$W$16;EQUIV(Feuil1!B$1;Feuil2!$C$1:$W$1;0));"")

Pas besoin de code VBA!

Si tu veux vraiment le faire par VBA en une seule fois:

Code:
Sub Recup1()
   With Feuil1.Range("A1").CurrentRegion
    With .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1)
        .Formula = "=IFERROR(VLOOKUP($A2,Feuil2!$A$2:$W$16,MATCH(Feuil1!B$1,Feuil2!$C$1:$W$1,0)),"""")"
        .Value = .Value
    End With
   End With
End Sub
Ou en récupérant les adresses idoines sur le second tableau:
Code:
 Sub Recup1()
    Const xFormula = "=IFERROR(VLOOKUP($A2,Feuil2!Adr1,MATCH(Feuil1!B$1,Feuil2!Adr2,0)),"""")"
    Dim Adr1 As String, Adr2 As String
    With Feuil2.Range("A1").CurrentRegion
        Adr1 = .Address
        Adr2 = .Rows(1).Address
    End With
   With Feuil1.Range("A1").CurrentRegion
    With .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1)
        .Formula = Replace(Replace(xFormula, "Adr1", Adr1), "Adr2", Adr2)
        .Value = .Value
    End With
   End With
End Sub
A+
 
Dernière modification par un modérateur:

reve24

XLDnaute Occasionnel
Re : rapatrier des données

j en arrive pas a comprendre a quoi sert recup1 = recup8 dans mon fichier

et recup 7 dans mon fichier cela ne fonctionne pas a partir de toto9

et si il y a un ligne libre cela ne s affiche pas .
 

Pièces jointes

  • RechercheVbaNew2.xlsm
    30 KB · Affichages: 29
G

Guest

Guest
Re : rapatrier des données

Bonjour,

Si tu disais exactement ce que tu veux! Car tu sembles copier/coller sans comprendre ce que tu fais.
En cellule E1 de Feuil1 tu n'as rien (pas de LABELn) mais un bouton 5. En cellule D1 tu as 'label2' et 2 boutons (4 et 7)? En cellule B1:'noms' et un bouton.
Sur quoi faut-il se baser pour construire la macro, le contenu des boutons (que faire alors des 2 boutons de D1?) ou le contenu des cellules d'entête de feuil1?

A+
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 086
Messages
2 085 197
Membres
102 814
dernier inscrit
JLGalley