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
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