Aide VBA excel

Résolu/Fermé
enark78 - 2 févr. 2010 à 09:55
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 - 2 févr. 2010 à 14:21
Bonjour à tous,
j'ai un projet a faire en VBA mais la je sèche un peu. Je dois faire une macro qui copiera un certain nombre de cellules et ira les coller dans une autre feuille selon le debut de la valeur de la cellule.
Je vais essayer d'être le plus clair possible:
j'ai une feuille dans laquelle chaque ligne (collonne A) commence par eBI suivi d'un nombre, I suivi d'un nombre ou P suivi d'un nombre. Je souhaiterai faire une macro qui copierai tout ce qui commence par eBI dans une feuille et tout ce qui commence pas I dans une autre. Par exemple, si la cellule A1 commence par eBI, la macro doit faire un copier/coller des cellules A1 à H1 vers la première cellule vide de la feuille eBI et la même chose si la cellule A1 (ou A2...) commence par I mais vers la feuille nommée I.
Merci de m'aider et désolé si je n'ai pas été très clair.
A voir également:

15 réponses

Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
2 févr. 2010 à 10:11
Sub Bouton1_QuandClic()
Dim i As Long

For i = 1 To 400 'nombre de ligne à contrôler
If Left(Range("a" & i), 3) = "eBI" Then
Sheets("Feuil2").Range("a65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("a" & i).Value
Sheets("Feuil2").Range("b65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("b" & i).Value
Sheets("Feuil2").Range("c65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("c" & i).Value
Sheets("Feuil2").Range("d65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("d" & i).Value
Sheets("Feuil2").Range("e65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("e" & i).Value
Sheets("Feuil2").Range("f65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("f" & i).Value
Sheets("Feuil2").Range("g65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("g" & i).Value
Sheets("Feuil2").Range("h65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("h" & i).Value
End If

If Left(Range("a" & i), 1) = "I" Then
Sheets("Feuil3").Range("a65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("a" & i).Value
Sheets("Feuil3").Range("b65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("b" & i).Value
Sheets("Feuil3").Range("c65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("c" & i).Value
Sheets("Feuil3").Range("d65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("d" & i).Value
Sheets("Feuil3").Range("e65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("e" & i).Value
Sheets("Feuil3").Range("f65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("f" & i).Value
Sheets("Feuil3").Range("g65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("g" & i).Value
Sheets("Feuil3").Range("h65536").End(xlUp).Offset(1, 0) = Sheets("feuil1").Range("h" & i).Value
End If
Next i
End Sub
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
2 févr. 2010 à 10:11
Change bien les noms Feuil1, Feuil2 et Feuil3 en nom de tes feuilles

J'ai défini la macro pour les lignes 1 a 400 mais tu peux en mettre plus ou moins
0
Je te remercie, je vais essayer ça de ce pas
0
J'ai bien remplacé le nom des feuilels mais malheureusement ca ne marche pas. Je n'ai aucun message a l'execution de la macro mais elle ne fait apparemmentrien
0

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

Posez votre question
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
2 févr. 2010 à 11:44
colle ta macro ici
0
Ba j'ai repris exactement ce que tu as fait en changeant Feuil1 par le nom de la feuille ou il y'a toutes mes données "en vrac", Feuil2 par le nom de la feuille ou je veux copier tout ce qui commence par eBI et Feuil3 par le nom de la feuille ou je veux copier tout ce qui commence par I.
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
2 févr. 2010 à 11:54
Bizarre, la macro fonctionnait pourtant sur mon classeur.

As tu possibilité de poster ton classeur sur cijoint.fr?
0
Bon, en voulant te le mettre, je l'ai refait pour ne garder que l'essentiel, seulement ce dont le classeur avait besoin pour ce que je voulait et là, ça a marché. Je me suis donc probablement trompé quelque part en remplacant un nom de feuille ou autre. Je vais regarder ca et te tenir au courant. En tout cas, merci de ton aide
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
2 févr. 2010 à 12:12
Ok

Bon ben hésite pas si t'as d'autres questions
0
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 févr. 2010 à 12:22
Bon ba moi je ne vois pas de quoi ca peut venir, je sollicite donc encore un peu ton aide.
Le premier c'est mon classeur officiel, celui sur lequel j'effectue mon projet.
L'autre c'est la partie que j'avais refaite exprès pour te la poster, celle qui marche.

http://www.cijoint.fr/cjlink.php?file=cj201002/cij9YaZ4Tp.xls

http://www.cijoint.fr/cjlink.php?file=cj201002/cijoTnjiRe.xls
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
2 févr. 2010 à 12:40
Je ne comprends pas, tu as du te tromper dans le code

copie cette macro et lance la dans ton classeur officiel

Sub Bouton87_QuandClic()
Dim i As Long

For i = 1 To 400 'nombre de ligne à contrôler
If Left(Range("a" & i), 1) = "I" Then
Sheets("i fermés").Range("a65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("a" & i).Value
Sheets("i fermés").Range("b65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("b" & i).Value
Sheets("i fermés").Range("c65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("c" & i).Value
Sheets("i fermés").Range("d65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("d" & i).Value
Sheets("i fermés").Range("e65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("e" & i).Value
Sheets("i fermés").Range("f65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("f" & i).Value
Sheets("i fermés").Range("g65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("g" & i).Value
Sheets("i fermés").Range("h65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("h" & i).Value
End If

If Left(Range("a" & i), 3) = "eBI" Then
Sheets("eBI fermées").Range("a65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("a" & i).Value
Sheets("eBI fermées").Range("b65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("b" & i).Value
Sheets("eBI fermées").Range("c65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("c" & i).Value
Sheets("eBI fermées").Range("d65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("d" & i).Value
Sheets("eBI fermées").Range("e65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("e" & i).Value
Sheets("eBI fermées").Range("f65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("f" & i).Value
Sheets("eBI fermées").Range("g65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("g" & i).Value
Sheets("eBI fermées").Range("h65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("h" & i).Value
End If

Next i
End Sub
0
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 févr. 2010 à 13:59
je viens de m'apercevoir que je ne t'ai pas passé la bonne version de mon classeur, du coup tu n'as pas du trouver la macro que tu m'avais donné je pense. Si tu es encore la, le voici
http://www.cijoint.fr/cjlink.php?file=cj201002/cijeEZAt2q.xls
c'est plus ou moins le meme classeur que l'autre que je t'ai donné sauf que celui-ci me sert de test avant de modifier ma version "finale"
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
2 févr. 2010 à 14:05
Et bien je ne vois pas le souci. La macro marche.

Crée un bouton d'action (affichage/barre d'outils/formulaire/ Bouton)

Clique droit sur le bouton que tu crées / Appliquer une macro / Bouton1quand click

Et ensuite quand tu cliques sur le bouton, les lignes se copient comme convenu
0
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 févr. 2010 à 14:10
J'ai trouvé le soucis, il fallait que je lance la macro en etant sur la feuille que j'ai appelé "full" (celle ou il y à toute la liste), j'ai donc corrigé ca. Par contre j'avoue ne pas vraiment comprendre ton code malgré l'aide de microsoft visual basic. Pourrait tu juste m'expliquer ceci ?
"Sheets("i fermés").Range("a65536").End(xlUp).Offset(1, 0) = Sheets("full").Range("a" & i).Value "
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
2 févr. 2010 à 14:16
"Sheets("i fermés") onglet "i fermés"

Range("a65536").End(xlUp).Offset(1, 0) dernière case vide de la colonne A en partant la Case A65536

Sheets full onglet "full"

Range("a" &i).value Valeur de la case Ai,i étant défini comme une variable de 1 à 400


A chaque fois, la macro contrôle les valeurs pour i=1 (A1), i=2 (a2), etc etc jusqu'à 400


Autrement dit:

La première case vide de l'onglet "i fermé" dans la colonne A est égale à la case Ai de l'onglet "Full"
0
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 févr. 2010 à 14:19
Et bien il ne me reste plus qu'à te remercier infiniement pour ton aide précieuse qui m'a evitée de me faire perdre une journée qui ne m'aurait peut etre à rien.
Merci a toi cher Farfadet88 ;-)
0
Farfadet88 Messages postés 6293 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 29 avril 2020 1 365
2 févr. 2010 à 14:21
De rien.

Hésite pas si t'as d'autres questions.
0