VBA excel

Mathieu -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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. Mathieu
     
    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
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  3. Mathieu
     
    Merci de votre réponse,

    j'ai testé votre solution mais elle ne marche pas ...
    0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mathieu
     
    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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      Sur excel 2003 : menu 'affichage / barre d'outils / formulaires' et/ou 'boite à outils contrôles'
      eric
      0
  7. Mathieu
     
    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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
  8. Mathieu
     
    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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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