VBA excel

Fermé
Mathieu - 17 févr. 2011 à 20:09
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 20 févr. 2011 à 21:35
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

A voir également:

7 réponses

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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 17/02/2011 à 21:41
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
Merci de votre réponse,

j'ai testé votre solution mais elle ne marche pas ...
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
19 févr. 2011 à 18:26
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
20 févr. 2011 à 16:44
Bonjour,

Sur excel 2003 : menu 'affichage / barre d'outils / formulaires' et/ou 'boite à outils contrôles'
eric
0
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
20 févr. 2011 à 19:48
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
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
20 févr. 2011 à 21:35
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