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 Sub

Merci 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

7test-forum.xlsm (21.58 Ko)

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" (je n'ai rencontré ce problème que récemment, avec des fichiers en "mode protégé" ... une fois les fichiers enregistrés sous un nouveau nom, le souci a disparu)

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 !

Rechercher des sujets similaires à "code vba copie"