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
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
A voir également:
- VBA excel
- Liste déroulante excel - Guide
- Formule excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Mise en forme conditionnelle excel - Guide
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...
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...
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
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 :
eric
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
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
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
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
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
Merci beaucoup !
je me permet d'abusé de votre talent, comment faites vous les boutons d'actions sur un classeur excel?
Merci
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
20 févr. 2011 à 16:44
Bonjour,
Sur excel 2003 : menu 'affichage / barre d'outils / formulaires' et/ou 'boite à outils contrôles'
eric
Sur excel 2003 : menu 'affichage / barre d'outils / formulaires' et/ou 'boite à outils contrôles'
eric
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
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
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
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
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
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
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
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
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
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