VBA excel

Bonjour,

Je souhaite faire une formule en VBA sous excel mais je ne m'y connais pas vraiment alors je galère....
J'explique :

J'ai un classeur avec une feuille AA;
Dans cette feuille j'ai un grand nombre de lignes et de colonnes;
Dans les cellules de la colonne L j'ai une condition (oui / non)

Voila ce que j'ai besoin :

Si la cellule de de la colonne Lx = "Oui" alors toute la ligne x est copier à la suite dans la feuille BB

C'est possible ?!
Si oui quelqu'un peu m'aidé?

Merci beaucoup.

Mathieu

7 réponses

  1. J'ai trouvé un début de solution !
    Si je fait une marco qui s'appel test:

    Sub test()
    Sub Copier_Ouvert()
    Dim Cellule_a_copier As Range
    Dim Fin_Colonne As Range

    Sheets("PRESTATAIRE").Select 'Sélectionne l'onglet où sont les valeurs
    Set Plage = Range("l2", Range("x2").End(xlDown)) 'Sélectionne toutes les cellules de l2 à l9999

    For Each Cellule_a_copier In Plage
    If (Cellule_a_copier.Text = "Oui") Then 'Si la celulle contient le texte
    Sheets("PRESTATAIRE").Select
    Rows(Cellule_a_copier.Row).EntireRow.Copy 'Alors on copie la ligne

    Sheets("Feuil2").Select 'Sélectionne l'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

    Le hic c'est que si j'ai deux lignes ou en colonne L j'ai indiqué "oui" et bien il ne marque que la dernière...
    0
    1. Contributeur
      Bonsoir,

      Sur la principe je pense que tu as compris mais, si ça ne te dérange pas, plutôt que de rechercher l'erreur de ton code je te montre ce que j'aurais fait :
      Sub copier()  
          Dim ShSource As Worksheet, ShDest As Worksheet  
          Dim lig1 As Long
          Set ShSource = Worksheets("AA")  
          Set ShDest = Worksheets("BB")  
          For lig1 = 2 To ShSource.[X65536].End(xlUp).Row  
              If Cells(lig1, 12) = "oui" Then  
                  ShSource.Cells(lig1, 1).EntireRow.Copy Destination:=ShDest.Cells(ShDest.[X65536].End(xlUp).Row + 1, 1)  
              End If  
          Next lig1  
      End Sub

      eric
      0
      1. Merci de votre réponse,

        j'ai testé votre solution mais elle ne marche pas ...
        0
        1. Contributeur
          Bonjour,

          Je teste toujours avant de poster...
          Je me sert de la colonne X pour connaitre le nombre de lignes, les 'oui' sont testé en colonne 12 (L), et les feuilles doivent s'appeler AA et BB conformément à ta question.
          http://www.cijoint.fr/cjlink.php?file=cj201102/cijXuSL3ZM.xls
          eric
          0
          1. Ouppss désolé...effectivement ça marche du feu de dieu !

            Merci beaucoup !

            je me permet d'abusé de votre talent, comment faites vous les boutons d'actions sur un classeur excel?

            Merci
            0
            1. Contributeur
              Bonjour,

              Sur excel 2003 : menu 'affichage / barre d'outils / formulaires' et/ou 'boite à outils contrôles'
              eric
              0
          2. Merci beaucoup... C'est sympa de votre part; j'ai vu sur le forum que vous répondez souvent à ce genre de questions pour excel... Chapeau, c'est compliqué quand même !

            une dernière question (je suis un peu profiteur sur les bord...) comment je peux faire pour exécuté une macro sur une autre feuille? ...arf c'est pas claire, je m'explique :

            J'ai une userform qui apparait sur la feuille A et me propose 2 actions différentes
            => de faire la copie de la feuille A vers B
            => de supprimer les doublons de la feuille B

            L'option copie est OK (merci a vous)
            L'option doublon fonctionne si on l'exécute depuis la feuille B (car c'est celle ci qui contient des doublons) mais je ne sais pas l'exécuté depuis la feuille A pour prendre effet sur la feuille B....

            C'est possible d'après vous ?

            Merci
            0
            1. Contributeur
              Bien sûr que c'est possible, il suffit de modifier ce qu'il faut ;-)

              Mais, selon l'usage que tu fais de tes feuilles, c'est peut-être plus simple d'éviter les doublons en modifiant le contenu des lignes copiées en changeant 'oui' en 'copiée'
              Dans ma macro après
              ShSource.Cells(lig1, 1).EntireRow.Copy
              ajoute :
              Cells(lig1, 12) = "Copiée"

              eric
              0
          3. Waaa trop fort...

            Une dernière question :
            Je vous site dans un post plus haut : "Je me sert de la colonne X pour connaitre le nombre de lignes, les 'oui' sont testé en colonne 12 (L)"

            on est obligé de faire le test sur la colonne x ? je n'ai que des colonne jusqu'à L...

            Encore merci
            0
            1. Contributeur
              non, j'ai pris X car c'est celle sur laquelle tu te basais dans ton code.
              Dans For lig1 = 2 To ShSource.[X65536].End(xlUp).Row remplace X par la colonne que tu veux.
              Remplace aussi dans Destination:=ShDest.Cells(ShDest.[X65536].End(xlUp).Row + 1, 1)
              Le tout est que ce soit une colonne qui ait toujours une donnée et pas une fois de temps en temps.
              eric
              0