Prendre les informations d'un tableau
Bonjour à tous.
J'ai un tableau Excel, que j'appellerai "AIDE" dont 3 colonnes me serviraient pour un autre tableau "VENTE".
AIDE
Colonne A = ref
Colonne B = prix
Colonne C = poids
Vente
Colonne BM = ref
Colonne BS = prix
Colonne BT = poids
Existe -t-il une solution pour que mon tableau "VENTE" reprennent ces informations sur mon tableau "AIDE"?
Dois-je mettre mon tableau "AIDE" dans une feuille de mon tableau "VENTE"? (je suppose que oui)
Merci pour vos futures réponses et bonne journée à tous.
Bonjour Manuel,
pour simplifier, j'vais supposer que "AIDE" et "VENTE" sont le nom
des feuilles plutôt que des noms définis de tableaux.
exemple pour ta 1ère référence :
* si c'était sur la même feuille ("AIDE" ou "VENTE"), alors en BM2 : =A2
* si c'est sur la feuille "VENTE", alors en BM2 : =AIDE!A2
mais d'toute façon, c'est mieux d'éviter les redondances d'information !
alors veux-tu vraiment la solution pour des tableaux structurés ?
en plus, selon c'que tu veux vraiment faire au juste, il se pourrait qu'une
solution VBA pour copier / coller les données soit plus adaptée.
dhany
Merci dhany pour ta réponse.
Ta supposition est juste, "AIDE" et "VENTE" sont les noms des feuilles.
En fait, j'ai besoin que les colonnes BS et BT de la feuille "Ventes" se remplissent automatiquement selon les colonnes D et G de la feuille "Aide Ventes", sachant que la feuille "Aide Ventes" contient plus de 3000 lignes (références)
Et pour faciliter les choses, si dans la feuilles "Aide Ventes", les références sont dans l'ordre, ce ne peut être le cas dans "Ventes"., tu l'as bien compris. Donc, même en filtrant la colonne des références de la feuille "Ventes", je ne tomberai jamais sur la bonne cellule en faisant un VBA copier-coller.
Merci à vous.
je te retourne ton fichier modifié :
* sur la la feuille "Ventes", regarde d'abord les colonnes BS et BT
* va sur la feuille "Aide Ventes", et fais Ctrl e
ça sera bon si c'est dans l'même ordre que celui de ta feuille "Aide Ventes", mais p't'être que ça devrait être en fonction de Correspondance ou Ref ? si oui, ça n'y est pas sur la feuille "Ventes", donc c'est pas possible de « rapprocher » !
dhany
Bonjour dhany.
Comme je disais précédemment, les références en feuille "VENTES" ne sont pas dans le même ordre.Sur ton tableau, en faisant CTRL + E, ça nous met les poids et prix dans le même ordre que sur la feuille "AIDE VENTES". Donc du coup, cela ne peut pas correspondre.
Je me souviens qu'un neveu m'avait "fabriqué" une chose similaire pour faire des factures. Il avait mis en feuille 1 la facture vierge que je devais remplir. En feuille 2, mon tableau des produits avec ref, descriptif, et prix.
Lorsque je tapais une ref sur ma feuille 1, cela ajoutait automatiquement dans les 2 cellules d'à côté le descriptif et le prix. (Je crois que je n'avais pas besoin de respecter l'ordre des ref.)
Donc, dans l'idée de ce topic, est il possible de mettre en concordance ces 2 feuilles par rapport aux ref (colonne "Vente!BM") et que ça aille chercher les informations de cette ref dans la colonne "Aide Ventes!C" et "Aide Ventes!G" ?
En tout cas, merci pour ton temps sacrifié.
Bonne journée.
Bonjour Manuel,
je m'disais bien que l'ordre allait poser un problème !
pour ton exemple des factures : tu n'avais pas besoin de respecter l'ordre des références, oui ; mais toutes les données se mettaient aux bons endroits (donc sur les bonnes lignes de la facture) car une correspondance pouvait être faite entre les références du tableau des produits et les références notées sur la facture.
dhany
Pour la correspondance, effectivement, c'est bien les ref qui entrent en jeu.
Pour la feuille "Ventes" , BM est égale à B de la feuille "Aide Vente".
Du coup, grâce à la feuille "Aide Ventes", et selon la ref dans B, les infos des colonnes BS et BT de la feuille "Ventes" se rempliraient en copiant les valeurs G et C.
Tu croies qu'on peux faire un truc?
++.
oui, avant ton post de 10:53, j'ai remarqué ce que j'avais pas vu à cause de tes nombreuses colonnes : la référence est en colonne BM et aussi en BE ; j'ai aussitôt fait le code VBA avec BM, car c'est la colonne la plus proche des 2 colonnes BS et BT : regarde la dernière version de mon fichier (je l'avais terminé à 10:34 mais j'ai dû rédiger un autre long post avant d'te répondre)
pardon pour le retard de ma réponse, mais j'pensais pas qu'la rédaction d'mon post précédent allait m'prendre autant d'temps !
* à l'ouverture du fichier, tu es sur la feuille "Ventes", en BM8 ; note que les 2 colonnes BS et BT sont vides (sauf les entêtes)
* va sur la feuille "Aide Ventes" ; la cellule active est B8 ; fais Ctrl e puis vérifie bien tous les résultats !
normalement, tu pourras voir qu'c'est aussi bien « synchronisé » qu'pour ton exemple de factures.
(j'dis ça en espérant qu'y'avait aucun défaut pour le fichier d'ton neveu !
si pour une raison ou une autre tu changes d'avis, et tu préfères une correspondance entre les références de B et BE, n'hésite pas à m'le dire !
dhany
Dhany,
c'est exactement ce que je cherche, bravo à toi !!!
Maintenant, il faut juste m'expliquer comment je le fais sur mon vrai classeur avec mes 3 000 ref environ (j'en ajoute une cinquantaine par mois) et 7 ou 8 feuilles
Et comme tu l'as vu, je suis néophyte et dur de la comprenette
Juste une petite chose à modifier de ton côté, je te parle depuis le début des prix d'achat et poids, et toi, tu mets les prix barrés et prix d'achat
J'ai essayé de modifier ta macro, et bizarrement, ça ne fonctionne plus
Tu a écrit :J'ai essayé de modifier ta macro, et bizarrement, ça ne fonctionne plus
non, j'te rassure : ça c'est tout à fait normal ! car y'a qu'moi pour avoir le feeling avec mes propres codes VBA !
Tu a écrit :je te parle depuis le début des prix d'achat et poids, et toi, tu mets les prix barrés et prix d'achat
oui, tu as tout à fait raison ! j'mettais les colonnes D et G car dans ton post d'hier à 17:13 tu as écrit texto : « j'ai besoin que les colonnes BS et BT de la feuille "Ventes" se remplissent automatiquement selon les colonnes D et G de la feuille "Aide Ventes" » (vraiment, j'sais pas pourquoi j'ai persisté bêtement à suivre tes indications, lollll !
bref, quoiqu'il en soit, voici ta nouvelle version avec 2 croissants avec tes colonnes prix d'achat et poids :
même utilisation qu'avant : Ctrl e à partir de la feuille "Aide Ventes"
Alt F11 pour voir les modifs du code VBA, puis revenir à Excel
t'as plus qu'à adapter à ton vrai classeur !
dhany
@Manuel
lis d'abord mon post précédent, puis celui-ci ; c'est pour adapter à ton vrai fichier :
* fais Alt F11 pour aller sur la fenêtre de "Microsoft Visual Basic"
* fais Alt i m pour insérer un nouveau module ➯ feuille blanche à droite
* sur cette feuille blanche, tu dois copier / coller mon dernier code VBA, donc celui-ci :
Option Explicit
Sub Essai()
If ActiveSheet.Name <> "Aide Ventes" Then Exit Sub
Dim Ref As Range, dlig&, dlg2&, lig&, lg2&: Application.ScreenUpdating = 0
With Worksheets("Ventes")
dlig = Cells(Rows.Count, "B").End(xlUp).Row: If dlig = 1 Then Exit Sub
dlg2 = .Cells(Rows.Count, "BM").End(xlUp).Row: If dlg2 = 1 Then Exit Sub
.Range("BS2:BT" & dlg2).ClearContents 'effacement anciennes données
For lig = 2 To dlig 'pour chaque ligne du tableau "Aide Ventes"
Set Ref = Cells(lig, "B") 'Ref de "Aide Ventes"
For lg2 = 2 To dlg2 'pour chaque ligne du tableau "Ventes"
With .Cells(lg2, "BM") 'Ref de "Ventes"
If .Value = Ref Then 'si test vrai : correspondance trouvée
.Offset(, 6) = Ref.Offset(, 5) 'Prix d'achat ht
.Offset(, 7) = Ref.Offset(, 1) 'Poids avec emb.
End If
End With
Next lg2
Next lig
.Select
End With
End Subtu dois aboutir à ceci :
si t'avais déjà un autre module et qu'le nouveau module s'appelle Module2, c'est pas un problème :
il suffit qu'ce soit un module Standard et pas un module spécial du Classeur ou d'une feuille.
* facultatif : tu peux compiler le code VBA : Alt D puis Entrée
* fais Alt F11 pour retourner sur Excel
ajout du raccourci clavier Ctrl e :
* fais Alt F8 ➯ fenêtre "Macro"
* la macro Essai étant sélectionnée, clique sur le bouton « Options... »
* la suite en image :
y'a plus qu'à tout valider par un clic sur le bouton "OK".
si t'as tout fait comme j't'ai dit jusqu'à maint'nant... ben t'as PERDU ! ... car j'ai pas dit : « Jacques a dit » !
non, sérieux : de retour sur la feuille, sauvegarde ton classeur ; tu peux utiliser la macro Essai avec Ctrl e
dhany
Bonjour dhany.
Désolé pour la réponse tardive, mais hier était une journée d'enfer .... (en fait, une grosse journée de mer.... !!!
De plus, le fichier que je récupère chaque jour a changé, (ajout de colonnes), ce qui fait que tout mon boulot est tombé par terre et que je dois tout refaire
je suis complètement dégouté. j'aimerai tant connaitre Excel. C'est décidé, je retourne à l'école en septembre (GRETA) pour prendre des cours car je galère trop.
En tous cas, un grand, un énorme, un immense merci pour ton aide !!!!
Existe t-il un tuto pour que je puisse refaire ton petit programme à l'infini, sur toutes sortes de classeur, avec le même principe?
A bientôt.
Bonjour Manuel,
Tu a écrit :le fichier que je récupère chaque jour a changé (ajout de colonnes)
d'un fichier à l'autre, peux-tu me dire quelles sont les colonnes fixes et variables ? par exemple :
1) pour la feuille "Aide Ventes"
* la colonne "Ref" est-elle toujours la colonne B ?
* la colonne "Poids" est-elle toujours en C ?
* la colonne "Prix d'achat ht" est-elle toujours en G ?
suppose par exemple que la colonne "Ref" n'est pas en B mais en E ; peux-tu dire alors que :
* "Poids" est en F (car cette colonne est toujours 1 colonne à droite de "Ref")
* "Prix d'achat ht" est en J (car cette colonne est toujours 5 colonnes à droite de "Ref")
si c'est par exemple ça, j'pourrai modifier le code VBA pour que tu n'aies qu'à indiquer la colonne pour "Ref" (variable) et ça trouvera automatiquement les 2 aut' par la position : 1 et 5 colonne(s) à droite ; si c'est encore plus variable que c'genre-là, aut' possibilité : trouver la position d'la colonne en cherchant son entête (mais là, c'est alors obligé qu'l'entête de colonne soit toujours le même).
(dans l'meilleur des cas, y'a aucun changement pour cette feuille)
2) pour la feuille "Ventes", mêmes considérations :
* est-ce que la colonne qui correspond à la colonne "Ref" de la feuille "Aide Ventes"
s'appelle toujours "OrderItem_MerchantProductId" ?
* est-ce que cette colonne "OrderItem_MerchantProductId" est toujours en colonne BM ?
* est-ce que la colonne "Prix" est toujours 6 colonnes à droite de "OrderItem_MerchantProductId" ?
* est-ce que la colonne "Poids" est toujours 7 colonnes à droite de "OrderItem_MerchantProductId" ?
là, il te suffirait donc d'indiquer dans le code VBA la position (variable) de la colonne "OrderItem_MerchantProductId"
(si tu peux confirmer qu'pour les colonnes concernées par le job à faire, les noms des entêtes sont toujours les mêmes, j'pourrai faire une recherche de position ; mais j'utiliserai ça que si l'astuce « n colonnes à droite » n'est pas possible)
j'connais pas d'tuto pour faire le programme que j'ai fait, mais si tu veux apprendre le VBA :
tu peux aussi faire une recherche google avec ces mots : « cours vba gratuit »
dhany
Merci dhany pour ton cours, je mets celui-ci en application dès demain matin au chant du coq
Je te tiens au courant bien évidemment, au chant du coq par SMS
A demain !!!!! tôt, très tôt !!!
d'accord, alors A+ (demain matin, très tôt) ! réveil par le coq gaulois : cocorico !!!
dhany
Bonjour dhany.
J'ai pu insérer ta macro, après plusieurs tentatives, en la modifiant à chaque fois pour bien comprendre.
Et maintenant, tout fonctionne à merveille.
Si j'ai bien compris : Offset(, 6) = Ref.Offset(, 5) correspond au nombre de colonnes qui séparent la colonne de référence à celle où tu prends l'information.
Maintenant, je vais essayer de l'adapter sur un autre classeur, mais je pense que ce sera plus difficile puisque dans la colonne de référence, ce sera juste un mot à repérer dans la cellule. En fait ce sera sur des relevés bancaires)
Excel est vraiment une machine de guerre et me donne envie de l'explorer chaque jour un peu plus. Vivement septembre....
Encore un grand merci l'ami pour ta précieuse aide et ta patience.
Bonne continuation et je suis sûr de te revoir
Au plaisir.
pour tes 2 Offset(), la partie du code VBA concernée est celle-ci (abrégée) :
With Worksheets("Ventes")
...
Set Ref = Cells(lig, "B") 'Ref de "Aide Ventes"
...
With .Cells(lg2, "BM") 'Ref de "Ventes"
...
.Offset(, 6) = Ref.Offset(, 5) 'Prix d'achat ht
End With
...
End Withdonc pour l'explication c'est plutôt ça :
* avec l'instruction Set, Ref est la cellule de ligne lig, colonne B
Ref.Offset(, 5) est la cellule qui est sur la même ligne, et 5 colonnes à droite
c'est donc la cellule de ligne lig, colonne G : "Prix d'achat ht"
* .Offset(, 6) est par rapport aux 2 With qui précèdent, donc par rapport à :
Worksheets("Ventes").Cells(lg2, "BM") c'est donc sur la feuille "Ventes",
cellule de la ligne lg2, 6 colonnes à droite de BM, donc colonne BS : "Prix"
note bien que ces 2 Offset() sont complètement indépendants l'un de l'autre !
dhany