VBA_boucle de test avec recopie de la valeur d'une cellule

Bonjour à tous,

j'ai un souci pour réaliser la macro suivante :

je souhaite faire une boucle qui teste pour l'ensemble des lignes de la "sheet 1" la valeur contenue dans une colonne. Si cette valeur est correspond avec une chaine de caractère (ici "Y") inscrite dans le tableau, alors la macro doit copier le contenu de la cellule et le coller dans la sheet 2, dans la ligne correspondante.

en clair dans le fichier exemple que j'ai fait, je souhaite recopier la valeur de l'age de la personne dans le registre général qui se trouve en sheet 2. mais cela uniquement pour les personnes ayant dans la sheet 1 la chaine de caracère "Y" dans la colonne C (update needed). si le contenu de la colonne C n'est pas Y, on passe à la ligne suivante sans toucher au registre de la sheet2.

l'idée est de modifier une base de donnée assez importante uniquement sur certaines entrées.

Merci d'avance de votre aide,

Cordialement

17example-1.xlsx (10.13 Ko)

Bonjour,

un essai voir si cela peut te convenir.

Cordialement.

21example-1.xlsm (18.15 Ko)

Bonjour,

Proposition :

Sub ReportAge()
    Dim age(), n%, i%, j%
    With Worksheets("Sheet1")
        n = WorksheetFunction.CountIf(.Columns("C"), "Y")
        ReDim age(n, 1)
        n = .Cells(.Rows.Count, 3).End(xlUp).Row
        .Range("A2:C" & n).Sort key1:=.Range("A2"), order1:=xlAscending, Header:=xlNo
        For i = 2 To n
            If .Cells(i, 3) = "Y" Then
                j = j + 1
                age(j, 0) = .Cells(i, 1)
                age(j, 1) = .Cells(i, 2)
            End If
        Next i
    End With
    With Worksheets("Sheet2")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range("A1:B" & n).Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlNo
        j = 1
        For i = 1 To n
            If .Cells(i, 1) = age(j, 0) Then
                .Cells(i, 2) = age(j, 1)
                j = j + 1
                If j > UBound(age, 1) Then Exit Sub
            ElseIf .Cells(i, 1) > age(j, 0) Then
                MsgBox age(j, 0) & " ne figure pas dans la base.", vbInformation, "Elément manquant"
                j = j + 1: i = i - 1
                If j > UBound(age, 1) Then Exit Sub
            End If
        Next i
    End With
End Sub

Cordialement.

bonjour, merci à vous 2 pour vos réponses super rapides.

vos 2 solutions sont fonctionnelles et remplissent mon fichier exemple, c'est super. je vais partir sur la base du code de Mferrand pour élaborer ma solution car il me parle plus mais l'autre réponse semble tout à fait correcte, c'est mon niveau en excel/vba qui me fait défaut pour la comprendre aussi facilement.

merci à vous

cdlt,

Rechercher des sujets similaires à "vba boucle test recopie valeur"