Code VBA copie
Bonjour à tous,
je vous explique mon soucis,
J'ai une "Base Qualité" avec différentes données.
Dans la colonne A à partir de la ligne 5 je n'ai que des chiffres, par exemple 050, 137 etc.
Ensuite j'ai une autre "BASE" où l'on retrouve ces mêmes chiffres en colonne A.
Et en fait j'aimerais que lorsque mon code balaye ma "Base Qualité" et qu'il trouve un numéro dans ma base qualité et ce même numéro dans ma BASE. J'aimerais qu'il me copie la valeur associée de la colonne 3 en colonne 2 dans ma BASE.
J'ai fait ce code (qui ne fonctionne pas) :
Sub Copie()
Dim x As Long, y As Long
Dim WB As Worksheet
Dim WBQ As Worksheet
Set WB = ThisWorkbook.Worksheets("BASE")
Set WBQ = Workbooks("Base Mère.xlsm").Worksheets("Base Qualité")
With WBQ
For i = 5 To .Range("A" & Rows.Count).End(xlUp).Row
If WBQ.Cells(x, 1) = WB.Cells(x, 1) Then
y = 3
If .Cells(x, y).Value <> "" Then
WB.Cells(x, 2) = WBQ.Cells(x, y).Value
End If
End If
Next
End With
End SubMerci de votre aide !
Clem
Je vous joint un fichier "allégé" avec mon code si ça peut aider.
Après je dois appliquer ce code pour différentes colonnes mais si je comprends déjà pour une le reste ça devrait le faire
Clem
Bonjour cleiiim,
Pourquoi ne pas te "contenter" d'une simple formule (RECHERCHEV ferait très bien l'affaire, non ?)
[Edit:] oserais-je ajouter que la RECHERCHEV fonctionnera si le classeur "cible" est fermé (ce qui ne sera pas le cas avec le code inséré dans ton message). Dans le code en question, il te faudrait vraisemblablement une seconde boucle, imbriquée dans la première, puisque pour chaque "index" en feuille "Base", tu devras chaque fois parcourir toute la colonne A de la feuille "Base Qualité" et non comparer de ligne en ligne, dans les 2 feuilles, comme tu l'as fait ... me semble-t-il
Bonjour,
Merci pour ton retour U. Milité
Oui je vais faire comme ça, je vais passer par une recherche V.
Je cherchais à passer par un code car en fait avant je faisais une recherche selon 2 critères.
Et là c'est vrai que je recherche selon un seul critère (un chiffre) et j'en ai oublié la fonction recherche V...
Et il est vrai que j'aime bien utiliser des codes car j'ai moins de bug.
Avec la fonction RechercheV, lorsque j'ouvrais mon fichier source en même temps que mon fichier dans lequel j'utilisais ma fonction, mon "chemin" changeait tout seul et j'obtenais des ""#REF" partout... du coup mon cerveau avait bannit cette fonction
Merci
Clem
Bonjour et merci pour le retour,
Bizarre, ce que tu expliques avec les #REF!, lors de l'ouverture du fichier "cible"
Si tu as une préférence pour les codes, j'avais testé ce qui suit, mercredi, en attendant ta réponse:
Sub copie_bis()
Dim WB As Worksheet, WBQ As Worksheet
Dim x As Long, lig As Long, y As Long
Dim liste As Object
Dim tablo()
Set WB = ThisWorkbook.Worksheets("BASE")
Set WBQ = ThisWorkbook.Worksheets("Base Qualité")
With WBQ
Set liste = CreateObject("scripting.dictionary")
For x = 6 To .Range("A" & Rows.Count).End(xlUp).Row
liste(.Cells(x, 1).Value) = x
Next x
End With
For lig = 5 To WB.Range("A" & Rows.Count).End(xlUp).Row
If liste.exists(WB.Cells(lig, 1).Value) Then
ReDim Preserve tablo(1, y)
tablo(0, y) = WBQ.Cells(liste(WB.Cells(lig, 1).Value), 3)
tablo(1, y) = WBQ.Cells(liste(WB.Cells(lig, 1).Value), 2)
y = y + 1
End If
Next lig
WB.Cells(5, 2).Resize(y, 2) = Application.Transpose(tablo)
End SubÀ coller dans un module standard
... reste que tes deux classeurs doivent être ouverts lors de l'exécution !