Solution pour mettre à jour deux fichiers de prix dans Excel
Bonjour,
Je m'excuse par avance si la question a déjà été posée sur le forum... mais après plusieurs recherches je ne trouve pas la réponse.
Voilà mon souci :
J'ai deux fichiers de tarifs : une liste de prix nets dont je dois garder la trame pour pouvoir ensuite l'importer ds mon logiciel
une liste de tarifs travaillés et à jour mais avec moins d'articles que la 1ère
Je voudrais que les tarifs de ma liste N°2 se mettent à jour dans la N°1 sans modifier les prix nets dont la référence ne figurent pas dans la liste N°2. ( oups je n'ai pas l'impression d'être claire)
J'ai d'abord utilisé la formule INDEX/EQUIV mais elle modifie de ce fait tous les prix nets en marquant N/A quant l'article n'est pas référencé dans la liste N°2! (logique...)
Peu importe la méthode, seul le résultat compte.. Toutefois s'il est possible d'avoir des explications, je vous en serais reconnaissante. (j'aime savoir ce que je fais..) Et dernière chose...je suis des plus ignorantes sur VBA, oups désolée.
Merci beaucoup à ceux qui accepteront de partager leurs lumières!!
Julia
PS: je joins le fichier de référence.
- Messages
- 358
- Excel
- 2003-2007 FR
- Inscrit
- 02/08/2011
- Emploi
- Consultant Test Performance / Audit
Salut,
Solution Macro
On cherche pour chaque Article contenue dans la colonne F de l'onglet "Prix nets Antonio" si cette reference existe dans la colonne A de l'onglet "Liste Articles mvmt"
Si c'est le cas alors on prend le prix affiché dans la colonne E de l'onglet "Liste articles Mvmt" et on le met dans la colonne I de l'onglet "Prix nets Antonio"
Si ce n'est pas le cas on ne fait rien
Pour la mettre en place:
Dans le fichier Excel
Faire ALT+F11 au clavier (cela ouvrel'editeur de VBA)
Faire un click droit sur "Microsoft Excel Objects (partie gauche de l'ecran) et selectionner Insertion Module
Dans le module partie droite, copier le code ci dessous, executer le ensuite comme une macro....
Sub trouveetremplace()
Dim listetotal As Worksheet
Dim listeAntonio As Worksheet
Dim mycell As Range
Dim derniereligne_Antonio, derniereligne_Total As Double
Dim resultat As Range
Set listetotal = ActiveWorkbook.Worksheets("liste articles mvmt")
Set listeAntonio = ActiveWorkbook.Worksheets("Prix nets ANTONIO")
colonne_ListeTotal_NumArticle = "A"
colonne_listeAntonio = "F"
'Determine la derniere ligne saisie dans la colonne F
derniereligne_Antonio = listeAntonio.Range(colonne_listeAntonio & "65536").End(xlUp).Row
'Determine la derniere ligne saisie dans la colonne F
derniereligne_Total = listetotal.Range(colonne_ListeTotal_NumArticle & "65536").End(xlUp).Row
'On va cherche pour toutes les reference contenu dans l'onglet Antonio si la ref existe dans lists articles mvmt puis si on trouve on prend le prix dans liste mvmt et on le replace dans Antonio
For Each mycell In listeAntonio.Range(colonne_listeAntonio & "1", colonne_listeAntonio & derniereligne_Antonio)
Set resultat = listetotal.Range(colonne_ListeTotal_NumArticle & "1", colonne_ListeTotal_NumArticle & derniereligne_Total).Find(mycell.Value)
If Not resultat Is Nothing Then
mycell.Offset(0, 3).Value = resultat.Offset(0, 4).Value
End If
Set resultat = Nothing
Next
End Subet bien... des plus sincèrements merci d'avoir pris le temps pour résoudre mon problème!!
ça m'enlève un tronc du pied.
Juste une petite précision? ds VBA, à chaque fois tu cites "antonio" alors que le nom de l'onglet est "prix nets Antonio" .. CQVD?
Merci encore!!!
- Messages
- 358
- Excel
- 2003-2007 FR
- Inscrit
- 02/08/2011
- Emploi
- Consultant Test Performance / Audit
Bonjour,
A part pour le nom de l'onglet : "prix nets Antonio", tu peux changer le nom des objets et variables, j'ai mis Antonio afin que le script soit plus lisible.
Exemple :
Set listeAntonio = ActiveWorkbook.Worksheets("Prix nets ANTONIO")
tu peux le changer en
set maliste = ActiveWorkbook.Worksheets("Prix nets ANTONIO")
Evidemment il faudra changer le nom de la variable partout dans le script.
Si tu ne comprends pas une fonction ou commande, postionne ton curseur dessus dans l'editeur et appuie sur la touche F1 (Aide)
Et si ce n'est pas clair, ouvre une demande d'info sur le forum. on prendra le temps de répondre.
Pense a fermer ta demande si tu es satisfaite.
++
Damien