Remplissage automatique

Bonjour tout le monde.

Je vous expose un probleme vba que je n'arrive pas à regler, merci pour votre aide d'expert.

J'ai d'un côté une tableau répertoriant dans une première colonne un numéro de commande, dans une deuxième colonne le nom du transporteur associé et dans une troisième la date de ramasse.

Par un premier export, j'envoie au transporteur x la liste des commandes qu'il doit ramasser, ce dernier me renvoie ensuite la matrice avec la liste des commandes et la date de ramasse effective.

A partir de son retour, je cherche le moyen de coller les dates de ramasses automatiquement en vba sur ma matrice initiale, et ce sans utiliser de recherchev sur ma matrice initiale.

En gros je souhaiterai avoir ma matrice de base sur l'onglet 1, le retour transporteur sur l'onglet 2, et faire en vba :

  • Sur longlet du retour transporteur (onglet 2) : La copie de la date de ramasse (ligne 1, colonne C)
  • la recherche du numéro de commande correspondant (ligne 1 colonne A sur le retour transporteur) sur ma matrice initiale (je trouve donc le même numéro de commande sur la colonne A de ma matrice initiale, sur une ligne xxx)
  • en déduire la cible de copie (ici la 3ème colonne) de la même ligne
  • coller la date
  • recommencer avec la ligne de commande suivante sur le retour transporteur.

Je souhaite éviter de mettre une recherchev simple en dur sur la colonne 3 de ma matrice initiale, ce qui serait le plus simple j'en suis sur, pour 2 raisons :

  • la colonne 3 de ma matrice initiale peut faire l'objet de saisies manuelle
  • la marice de retour transporteur changera tous les jours et ne restera pas fixe, la colonne 3 de ma matrice initiale devra donc contenir de vraies données, pas des formules en liaison avec d'autres tableaux.

Merci beaucoup pour votre aide qui sera précieuse je ne doute pas, de mon côté je nage un peu sur ce point.

Nicolas

Bonjour Pastisomaitre, bienvenue à toi,

Pastisomaitre a écrit :

de mon côté je nage un peu sur ce point

Si tu ne veux pas qu'on se retrouve tous à nager au même endroit, mais dans des sens différents le mieux serait de déposer une version allégée et sans données confidentielles de ton fichier, avec ses deux onglets.

On va éviter la natation commune.

Je fais ça!

Merci

Exemple simplifié ci-joint.

Merci par avance pour votre expertise.

17exemple.xlsx (12.05 Ko)

Re-bonjour,

Pour l'expertise, il faudra attendre le passage de quelqu'un d'autre Voici une proposition avec juste le bon sens du terroir ... enfin ... je crois!?

Coller les lignes suivantes dans un module standard ... et tester

Sub ramassage()
For Each c In Feuil2.[A2].Resize(Application.CountA(Feuil2.[A:A]) - 1, 1)
    On Error Resume Next
    lig = Application.Match(c, Feuil1.[A:A], 0)
    If Not IsError(lig) Then Feuil1.Cells(lig, 3) = c.Offset(0, 2)
Next c
End Sub

Si je pouvais, je te ferai un bisous.

Merci 1000 fois!!!!!!

Cela fonctionne!!!

Pastisomaitre a écrit :

Si je pouvais, je te ferai un bisous

Après le coup de la pataugeoire ... Je crois que je vais passer mon tour

Tu verras, à l'usage s'il y a des situations qui se présentent et que tu n'avais pas prévues.

Bon travail

J'ai juste une question en complément de la grande aide que tu m'a déjà apporté. Dans l'exemple, la colonne avec les numéros de commandes est la colonne A dans les 2 onglets, la colonne B contient les dates dans les 2 onglets.

En réalité, les numéros de commandes sont sur la colonne A dans le retour transporteurs, mais sur la colonne D dans ma matrice.

De même, les dates sont sur la colonne B dans le retour transporteur, mais sur la colonne S sur ma matrice.

Comment adapter ton code?

Pastisomaitre a écrit :

Comment adapter ton code?

Si j'ai bien compris, essaie ce qui suit (j'ai ajouté l'un ou l'autre commentaire ... Dis-nous s'il te faut plus d'explications)

Sub ramassage()
For Each c In Feuil2.[A2].Resize(Application.CountA(Feuil2.[A:A]) - 1, 1) 'pour chaque n° de commande en colonne A de "retour transporteur"
    On Error Resume Next
    lig = Application.Match(c, Feuil1.[D:D], 0) 'on cherche la ligne où figure, en colonne D de "matrice initiale", le n° de commande en question
    If Not IsError(lig) Then Feuil1.Cells(lig, 19) = c.Offset(0, 1) 'on inscrit en colonne 19 (S) de la "matrice initiale", la valeur figurant une colonne à droite du n° de commande (si trouvé)
Next c
End Sub

Merci encore et encore ça a l'air parfait!

Autre chose, sans vouloir abuser. Je cherche à écrire en vba dans une macro.

Je m'explique, j'ai une macro qui crée mon export à envoyer aux transporteurs,qui le remplissent et me le renvoient. Cet export comporte un recap épuré qui sert de base de données à copier coller sur ma matrice comme explicite dans mon premier post

Sur l'export dont je parle je voudrais intégrer en fin de macro un bouton sur lequel l'utilisateur cliquera ce qui sélectionnera la matrice épurée, pour eviter les manipulations manuelles.

En gros, créer une macro DANS une macro.

Est ce faisable?

Pastisomaitre a écrit :

Est ce faisable?

Ben ça ... je n'en sais absolument rien (je crois bien que je n'ai rien compris!)

Quand tu écris: "Cet export comporte un recap épuré qui sert de base de données à copier coller sur ma matrice", je suppose que tu "visualises" clairement quelque chose ... ce n'est pas notre cas! Mais si quelqu'un d'autre, passant par ici, a une idée ... qu'il ou elle ne se gêne pas!

La première question serait tout de même de savoir pourquoi tu ne fais pas cette manip mystérieuse, toi-même, au moment d'importer les données du transporteur dans "ta matrice"?

Rechercher des sujets similaires à "remplissage automatique"