Boucle copié-colle avec condition de valeur de cellule


#1

Bonjour, je débute en VBA et j’ai du mal à faire fonctionner une macro. Je dois réaliser une macro qui permettrai de faire la synthèse de d’un ensemble d’articles d’un fichier Excel “Base_de_données” sur une feuille d’un autre fichier Excel “Synthèse_produit”. Ce fichier (“Base_de_données”) conséquent, comporte beaucoup de colonnes (date de création, code article, désignation article, code client…) et beaucoup de lignes ( chaque vente d’articles correspond a une ligne)…

J’ai à côté une feuille ou se trouve toutes les références(code article) de l’ensemble des articles qui nous intéressent et leurs désignations : “Référence_ensemble1”

Je voudrai réaliser une boucle qui parcours toute la colonne “AF”(colonne du code article) du fichier “Base_de_données” pour copier sa valeur et la coller dans une feuille d’un classeur différent “Synthèse_produit” seulement si le code article correspond à un code article présent dans les plages de cellules présentent dans “Référence_ensemble1”.

Plage de données de codes produits dans “Référence_ensemble1” : B10 à B62

Description étape par étape :

On se place dans la feuille “Base_de_données”
Range “AF2”.Select

On sélectionne les 8 premiers caractères de la 1ère cellule des codes articles(AF2)

Tant que la cellule sélectionnée de la colonne AF n’est pas vide répéter la boucle ( pour balayer tout le tableau)
While Is Empty…

Si la cellule sélectionnée a une valeur identique à un code produit de la feuille “Référence_ensemble1”( les 8er caractères seulement)

On copie la ligne entière de la cellule qui remplit le critère de valeur
ActiveCell.Row.Copy
On active la feuille de synthèse ou on recopie les lignes sectionnées “Synthèse_produit”

On se place sur la cellule B10 et on colle la cellule
Range(“B10”).select
ActiveSheet.Paste

On insère en B10 ce qui décale la cellule copiée d’une ligne vers le bas pour la suivante
Utilisation d’un "xlDown ???

Si il vous manque des précisions n’hésitez à me les demander.

Merci d’avance,


#2

Bonjour,

Si il vous manque des précisions n’hésitez à me les demander.

A ton avis, tu parles de classeur, fichier, feuille et tu poses une macro qui n’en est pas une !!!

commence déjà par mettre des classeurs “modèle” avec 10/15 exemples anonymisés et une macro qui ressemble à quelque chose et les bonnes explications :hushed:


#3

Bonjour,
SI j’ai bien compris ce que tu demandes, tu veux faire un listing de toutes les commandes qui t’intéresses dans une autre feuille parmi toutes les commandes passées ? un peu comme une sélection multiple avec un filtre ? Ensuite pourquoi choisir uniquement les 8 premiers caractères ?

à la place de “is empty” utilise

Nb_Ligne = Feuil1.Range(“A” & Rows.Count).End(xlUp).Row

et tu part sur une boucle “For i = 2 To Nb_ligne Then”

Pas besoin de “xlDown” utilises cells(i,1) pour la cellule de destination afin de l’implémenter juste avant la fin de ta nouvelle boucle (Une dans l’autre)
(i = i + 1)