Coller des valeurs en fonction d'un critère

Bonjour à vous tous,

Je suis bloqué sur un problème en VBA.

En effet, j'ai saisi sur la feuille 1 des factures avec un numéro en colonne A (à partir de A2) et en colonne B j'ai saisi le commentaire Oui ou Non (oui pour facture payée et Non pour facture impayée).

Au lancement de ma macro VBA toutes les factures avec le commentaire Non doivent s'insérer dans la feuille 2 (c'est un copier coller).

Mon code marche à moitié.

En effet, lorsque je lance mon code toutes les factures avec le commentaire Non se collent correctement dans ma feuille 2 mais il y a des lignes vides.

Ce que je souhaite c'est que les factures avec le commentaire Non se collent en feuille 2 sans ligne vide. Elle doivent se coller dans la première ligne immédiatement disponible.

Je joins bien évidemment mon fichier.

Si une personne a la solution, je suis preneur.

En vous remerciant par avance

Bonjour kim_ono, le forum,

Option Explicit
Sub Programme_Principal()
Dim Num_Ligne As Long
Dim Lig_Ecriture As Long

    Lig_Ecriture = 2
    Num_Ligne = 2
    While Sheets("Feuil1").Cells(Num_Ligne, 1) <> ""
           If Sheets("Feuil1").Cells(Num_Ligne, 2) = "Non" Then
                Sheets("Feuil2").Cells(Lig_Ecriture, 1) = Sheets("Feuil1").Cells(Num_Ligne, 1)
                Sheets("Feuil2").Cells(Lig_Ecriture, 2) = Sheets("Feuil1").Cells(Num_Ligne, 2)
                Lig_Ecriture = Lig_Ecriture + 1
            End If
            Num_Ligne = Num_Ligne + 1
    Wend
End Sub

Autre possibilité à tester...

Option Explicit

Dim tablo, tabloR()
Dim i&, j&, k&

Sub Transfert()
    tablo = Sheets("Feuil1").Range("A1").CurrentRegion

    k = 0
    For i = 2 To UBound(tablo, 1)
        If tablo(i, 2) = "Non" Then
            ReDim Preserve tabloR(1 To 2, 1 To k + 1)
            For j = 1 To 2
                tabloR(j, 1 + k) = tablo(i, j)
            Next j
            k = 1 + k
        End If
    Next i
     Sheets("Feuil2").Range("A1").CurrentRegion.Offset(1, 0).ClearContents
    On Error Resume Next
     Sheets("Feuil2").Range("A2").Resize(UBound(tabloR, 2), 2) = Application.Transpose(tabloR)
     Sheets("Feuil2").Activate
End Sub

CTRL + e pour exécuter la macro

Cordialement,

Grand merci pour ta réactivité et ta solution apportée qui marche très bien.

De plus le code est très court ce qui est un plus.

Par contre, peux tu commenter tes lignes de codes. Je vois à peu près de quoi ça parle mais je pense que des commentaires dans le code seraient les bienvenus.

Grand merci encore

Re,

Merci pour ton retour,

Option Explicit

Dim tablo, tabloR()
Dim i&, j&, k&

Sub Transfert()
    tablo = Sheets("Feuil1").Range("A1").CurrentRegion '..........................................on stocke les données de la feuille Feuil1 dans une variable tableau

    k = 0 '.......................................................................................intialisation de la variable k (ligne du tableau)
    For i = 2 To UBound(tablo, 1) '...............................................................on boucle sur toutes les ligne de tablo à partir de la deuxième (sans le titre)
        If tablo(i, 2) = "Non" Then '.............................................................si la 2° colonne de tablo est "Non"
            ReDim Preserve tabloR(1 To 2, 1 To k + 1) '...........................................On définit la variable TabloR qui va contenir, transposé, le tableau (tablo)
            For j = 1 To 2 '......................................................................on boucle sur  les 2 colonnes de la ligne
                tabloR(j, 1 + k) = tablo(i, j) '..................................................on écrit les données dans tabloR
            Next j
            k = 1 + k '...........................................................................on incrémente la variable k afin d'ajouter une colonne à la variable tabloR
        End If
    Next i '......................................................................................On passe à la ligne suivante de tablo
     Sheets("Feuil2").Range("A1").CurrentRegion.Offset(1, 0).ClearContents '......................on efface les données existantes à partir de la ligne 2
    On Error Resume Next '........................................................................si on rencontre une erreur, on poursuit
     Sheets("Feuil2").Range("A2").Resize(UBound(tabloR, 2), 2) = Application.Transpose(tabloR) '..on écrit les données du tabloR sur Feuil2 à partir de A2
     Sheets("Feuil2").Activate '..................................................................on active Feuil2 (facultatif)
End Sub

Un grand merci à gmb dont je me suis largement inspiré,

Cordialement,

Bonjour,

Je te remercie pour cet effort explicatif conséquent.

Cela va m'aider à comprendre la logique des tableaux dans VBA.

En effet, je n'utilise pas encore les procédures VBA par tableau mais cela est visiblement efficace et me donne des idées pour la suite.

Grand merci encore

Rechercher des sujets similaires à "coller valeurs fonction critere"