PROBLEME VBA copier ligne avec condition

Bonjour,

J'ai un probleme assez urgent pr effectuer un travail.

Sur une feuille A, jai une liste avec pour la colonne X differente valeur type char (soit "ouvert", "fermé",.......).
Je souhaite copier sur une feuille B toute les lignes de la feuille A dont la colonne X a la valeur "fermé".

Si vous pouvez m'aider ca me serait d'une grande aide.

Merci d'avance.

3 réponses

  1. Bonjour benwares

    Je te propose ce code, à adapter en fonction du nom exact de tes onglets etc.

    Sub Copier_Ouvert()
        Dim Cellule_a_copier As Range
        Dim Fin_Colonne As Range
        
        Sheets("A").Select  'Sélectionne ton onglet où sont tes valeurs
        Set Plage = Range("X2", Range("X2").End(xlDown))  'Sélectionne toutes les cellules de X2 jusqu'au bout de la colonne
        
        For Each Cellule_a_copier In Plage
            If (Cellule_a_copier.Text = "Ouvert") Then 'Si la celulle contient le texte
                Sheets("A").Select
                Rows(Cellule_a_copier.Row).EntireRow.Copy 'Alors on copie
                
                Sheets("B").Select  'Sélectionne ton onglet où il faut coller les valeurs
                Set Fin_Colonne = Range("X65536").End(xlUp) 'On va chercher la dernière ligne renseignée
                Fin_Colonne.Offset(1, 0).Select 'On se déplace d'une ligne en dessous
                Rows(ActiveCell.Row).PasteSpecial Paste:=xlPasteValues 'On colle la ligne
            End If
        Next
    End Sub
    


    Tiens nous au courant si c'est bien ce que tu cherches !
    1
    1. Bonjour,

      Ca marche nikel! merci beaucoup. je sais pas pourquoi mais je comprends la logique de programmation une fois faite mais je n'arrive pas à reussir un programme qui fonctionne.

      En tout cas merci bcp!!
      0
  2. Contributeur
    Bonjour,
    Peut-être un peu plus "conventionnel" ?
    Sub copieLigne()
    Dim LigA As Long, LigB As Long
    Dim Comp As String 'Pourrait être mis en paramètre dans l'appel de la sub.
        Comp = "Ouvert" 'Alors supprimer cette ligne
        LigB = 4 '1ère ligne ou copier
        With Sheets("Feuil1")
            For LigA = 1 To .Range("X65536").End(xlUp).Row
                If .Cells(LigA, "X") = Comp Then
                    .Rows(LigA).Copy Sheets("Feuil2").Rows(LigB)
                    LigB = LigB + 1
                End If
            Next LigA
        End With
    End Sub

    Si tu veux, par exemple, faire la même chose mais avec "Fermer" tu change juste la valeur de Comp.
    A+
    0
    1. Merci, j'avoue qu'il y a un petit soucis (mais c'est possible que ce soit de ma faute en mettant le nom des feuilles), mais d'apres ce que je comprends il semble que tu ne tienes pas compte du parametre colonne de la feuille.

      Dans tout les cas merci bcp.
      A+
      0
    2. Lol c'est vrai que ton code fait plus propre ^_^
      Pour te répondre benwares, j'ai appris le VBA sur le tas. J'essaie de m'imaginer ce que j'aurai fais à la mano, et le transcris en code (d'où le fait qu'il ne soit peut-être pas très conventionnel, mais marche :D)
      0
  3. Contributeur
    Re,
    Feuil1 c'est ta feuille "A"
    Feuil2 c'est ta feuille "B"
    Quand à la colonne tu dis que c'est la colonne "X" ? c'est bien ce qui est sur mon code.
    A+
    0