PROBLEME VBA copier ligne avec condition

benwares Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
lermite222 Messages postés 9042 Statut Contributeur -
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. Ninja94400 Messages postés 15 Statut Membre 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. benwares Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
       
      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. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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. benwares Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
       
      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. Ninja94400 Messages postés 15 Statut Membre 1
       
      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. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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