Aide macro Copie de données selon critères

Bonjour à tout le forum,

Je suis actuellement en train d'écrire un code sur VBA dont la solution m'échappe. Je vais tenter de vous expliquer au mieux mon projet.

J'utilise 1 seul fichier, composé de 3 feuilles (pour le moment) :

  • Une feuille "Données", là où est positionné le bouton de la macro
  • Une feuille "Carrefour"
  • Une feuille "Casino"

La feuille "Données" se présente ainsi : j'ai une référence d'un produit dans la colonne A, son poids moyen dans la colonne B et son client dans la colonne C (exemple : 51 ; 5,20g ; Carrefour).

Les feuilles "Carrefour" et "Casino" ne sont ni plus ni moins qu'une liste de référence en colonne A avec tous les poids moyens de ceux-ci les uns à la suite des autres en colonne B,C,D etc.. (exemple dans la feuille "Carrefour" : 51 ; 5,10 ; 5,15 ; 5,20...).

Il s'agit en fait de garder un historique des poids moyen de chaque référence et d'en faire une moyenne.

Le code que je souhaite mettre en place devrait me permettre de renseigner automatiquement, pour chaque référence de la feuille "Données", son poids moyen à la suite du précédent dans la bonne feuille. Voici un début de code :

Sub Tst()

Dim WsDepart As Worksheet

Dim WsDestination As Worksheet

Set WsDepart = Sheets("Données")

i = 5 'Départ à la ligne 5

ref = Sheets("Données").range("A" & i).Value

dern = Sheets("Données").Range("A5000").End(xlUp).Row 'Récupère la dernière ligne de la feuille Données

For i = 5 to dern

If Range("C" & i).Value = "Carrefour" Then

Set WsDestination = Sheets("Carrefour")

ElseIf Range("C" & i).Value) = "Casino" Then

Set WsDestination = Sheets("Casino") 'Permet de saisir le poids moyen dans la bonne feuille selon le client saisi en colonne C

End If

j = 5 'Départ à la ligne 5

WsDestination.Activate

dern1 = WsDestination.Range("A65000").End(xlUp).Row 'Récupère la dernière ligne de la feuille déterminée dans le If

For j = 5 to dern1

If WsDestination.Range("A" & j).Value = ref Then

col = WsDestination.range(cells(j, "IV")).End(xltoLeft).Column 'Recherche la dernière colonne libre de la ligne correspondant à la référence

Exit For

End If

WsDepart.range("C" & i).copy 'Copie du poids moyen de la feuille Données

WsDestination.range(col & ref).PasteSpecial xlPasteValues 'Copie dans la colonne vide de la ligne de la référence

Pour l'instant le code me bloque ici, car il ne reconnait pas la variable col dans le Range et encore moins la variable ref pour déterminer la bonne ligne.

N'hésitez pas à me demander des informations complémentaires.

Merci d'avance pour votre temps passé sur la question.

A vous lire,

Thomas

Bonjour et bienvenue sur le forum

Tu devrais joindre le fichier sur lequel tu travailles. Il serait plus facile de t'aider.

Bye !

Bonjour !

En effet, j'ai hésité à le mettre hier soir.

Le voici en pièce jointe.

Merci pour votre réponse.

Bonne journée !

Thomas

10poids.xlsm (22.22 Ko)

Bonjour

Un essai à tester. Te convient-il ?

Bye !

21poids-v1.xlsm (28.13 Ko)

Après quelques tests, le fichier marche parfaitement.

J'ai simplement modifié le nombre de colonne dans la variable "col" application.max(7 au lieu de 8 car il y a 7 colonnes avant la saisie du premier poids.

A part ça, c'est top !

Merci à toi pour ta rapidité d'exécution. J'espère que tu liras mes prochains posts si jamais j'ai d'autres soucis !

Bien à toi,

Thomas

Rechercher des sujets similaires à "aide macro copie donnees criteres"