Macro Excel

Résolu
cs_catbou Messages postés 7 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 25 septembre 2008 - 24 sept. 2008 à 20:41
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012 - 25 sept. 2008 à 11:48
Bonjour,

J'ai posé une question hier soir, et au miracle, ce matin j'avais la réponse !!!
C'est super génial. Je pensais pouvoir continuer ma macro seule, mais je suis vraiment trop nulle !!! [javascript:Insert_Emoticon('/imgs2/smile_dissapprove.gif'); ]
Voilà mon problème :
Lorsque ma colonne E commence par 6 j'insère une ligne en dessous en me copiant ma ligne (merci à dedenet2 et bigfish_le vrai) :
  Dim lig As Long
  Range("E2").Select
  reprise:
     ActiveCell.Offset(1, 0).Select
     If Len(ActiveCell.Value) = 0 Then Exit Sub
     If Left(ActiveCell.Value, 1) = "6" Then
         Rows(ActiveCell.Row).Copy
         Rows("2").Insert Shift:=xlDown
         ActiveCell.Offset(1, 0).Select
     End If
 GoTo reprise

Mais
je veux ensuite que sur  ma ligne copiée il y ait dans la
colonne G : "Toto".

Merci de votre aide

12 réponses

dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 2
24 sept. 2008 à 21:51
bonjour ,
bigfish_le vrai ,ta solution est plus courte que la mienne , c'est mieux
mais cela me marche pas.J'ai remplacé "Rows("2").Insert Shift:=xlDown" par
"Rows(ActiveCell.Row + 1).Insert Shift:=xlDown".
Tes insertions se faisait sur la ligne 2.

Pour rajouter ce fameux "Toto" en colonne G ,cela donne:

Dim lig As Long
Range("E2").Select
reprise:
ActiveCell.Offset(1, 0).Select
If Len(ActiveCell.Value) = 0 Then Exit Sub
If Left(ActiveCell.Value, 1) = "6" Then
Rows(ActiveCell.Row).Copy
Rows(ActiveCell.Row + 1).Insert Shift:=xlDown
Range("G" & ActiveCell.Row + 1).Value = "Toto"
ActiveCell.Offset(1, 0).Select
End If
GoTo reprise
En esperant que ça te conviennes.
A++
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
24 sept. 2008 à 22:05
Alors la j'ai de quoi me mettre en colere

mais j'ai pas envie je suis fatigué ! Une remarque quand meme : arrete avec tes activecell et autre select a tout va !

le code qui suis fait exactement ce que tu veux donc fait un copier coller, rien de plus.

Dim lig As Long
Range("E2").Select
reprise:
 ActiveCell.Offset(1, 0).Select
 If Len(ActiveCell.Value) = 0 Then Exit Sub
 If Left(ActiveCell.Value, 1) = "6" Then
    Rows(ActiveCell.Row).Copy
    Rows(2).EntireRow.Insert Shift:=xlDown
    Range("G2").Value = "toto"
    ActiveCell.Offset(1, 0).Select <--- attention sans cette ligne tu vas tomber dans une boucle sans fin, enfin ici ce ne sera pas vraiment sans fin mais si cela t'amuse d'essayer !
 End If
GoTo reprise
End Sub
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
24 sept. 2008 à 22:12
dedenet2 : pour ma part j'ai compris que les insertions doivent toujours ce faire en ligne 2 pour décaler les valeurs existantes vers le bas.
3
dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 2
24 sept. 2008 à 22:45
Salut
bigfish_le vrai , tu as raison concernant l'utilisation des "Activecell" ,
des "select" , des offsets et autres.
En général , les débutants les utilisent souvent.
j'ai lu aussi que "Goto" n'est pas conseillé.(Plutôt "For..Next")
Moi-même aussi , bien que çà peut marcher , je l'ai évite.
J'ai l'impression de faire un parcours d'orientation.......!
On n'a pas toujours le temps de reprendre tous les programmes de tout le
monde.En plus , ce nest pas la règle du forum.
Catbou fait l'effort de nous montrer un bout de code de conception personnelle.
On l'aide sur le code qu'il nous montre.
Avec l'expérience et la recherche , ça va s'améliorer.

Bonne nuit si t'est fatigué !
A++
3

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

Posez votre question
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
24 sept. 2008 à 21:02
Salut,

j'ai repondu a une question hier soir et y a pas eu miracle car elle ne s'en sort toujours pas toute seul

essaye ça cela devrait aller (j'ai pas testé)

  Dim lig As Long
  Range("E2").Select
  reprise:
     ActiveCell.Offset(1, 0).Select
     If Len(ActiveCell.Value) = 0 Then Exit Sub
     If Left(ActiveCell.Value, 1) = "6" Then
         Rows(ActiveCell.Row).Copy
         Rows("2").Insert Shift:=xlDown
         Range("G2").Value = "Toto"
         ActiveCell.Offset(1, 0).Select
     End If
 GoTo reprise

Don't be upset I am just kidding . You are welcome with all of your questions
0
alosamoelle Messages postés 129 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 23 mai 2009 1
24 sept. 2008 à 21:04
Bonjour,
rajoute avant ton end if
  ActiveCell(1, 4).Select
        ActiveCell.FormulaR1C1 = "toto"

voila et bon courage
  
0
cs_catbou Messages postés 7 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 25 septembre 2008
24 sept. 2008 à 21:19
Merci, mais aucune des solutions ne fonctionne !!!
La copie des lignes ne se fait plus correctement et Toto n'est mis qu'une seule fois
0
cs_catbou Messages postés 7 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 25 septembre 2008
24 sept. 2008 à 21:39
Voila ma macro :

Dim lig As Long
Range("E2").Select
reprise:
 ActiveCell.Offset(1, 0).Select
 If Len(ActiveCell) = 0 Then Exit Sub
 If Left(ActiveCell.Value, 1) = "6" Then
 Rows(ActiveCell.Row).Copy
 ActiveCell.Rows("2:2").EntireRow.Insert Shift:=xlDown
 ActiveCell(2, 7).Select
 ActiveCell.Value = "toto"
 ActiveCell.Offset(1, 0).Select
 
 End If
 
Maintenant la copie se fait lors de la première cellule où il y a 6 et toto est au bon endroit.
La macro continue de défiler mais ne fait rien d'autre !!
Lorsqu'elle s'arrête, le curseur reste sur la première ligne qui  a été copiée.
0
cs_catbou Messages postés 7 Date d'inscription mardi 23 septembre 2008 Statut Membre Dernière intervention 25 septembre 2008
25 sept. 2008 à 06:29
Bonjour,

Merci les gars, mais pas de guerre svp, je suis vraiment novice.
Je prend la solution dedenet2 car j'obtiens exactement ce que je veux.
Par contre bigfish_le vrai, ton code désorganise mon fichier. Les nouvelles lignes créées se mettent en début de fichier. Je dois le trier après.

Bonne journée.
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
25 sept. 2008 à 11:46
une petite précision ou remarque;

Et on remplaçait
ActiveCell.Offset(1, 0).Select
If Len(ActiveCell.Value) = 0 Then Exit Sub
par
If Len(ActiveCell.Offset(1, 0).Value) = 0 Then Exit Sub

de manière générale (et pas seulement sur ces deux lignes, je trouve que les macro s'exécutent plus rapidement ainsi.

En plus on peut regrouper le maximum de code dans quelques fonctions et variables pour ne pas avoir un code a rallonge.

Vu comme ça, programmer en VBA devient plus intéressant.
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
25 sept. 2008 à 11:47
une petite précision ou remarque;

Et on remplaçait
ActiveCell.Offset(1, 0).Select
If Len(ActiveCell.Value) = 0 Then Exit Sub
par
If Len(ActiveCell.Offset(1, 0).Value) = 0 Then Exit Sub

de manière générale (et pas seulement sur ces deux lignes, je trouve que les macro s'exécutent plus rapidement ainsi.

En plus on peut regrouper le maximum de code dans quelques fonctions et variables pour ne pas avoir un code a rallonge.

Vu comme ça, programmer en VBA devient plus intéressant.
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
25 sept. 2008 à 11:48
une petite précision ou remarque;

Et on remplaçait
ActiveCell.Offset(1, 0).Select
If Len(ActiveCell.Value) = 0 Then Exit Sub
par
If Len(ActiveCell.Offset(1, 0).Value) = 0 Then Exit Sub

de manière générale (et pas seulement sur ces deux lignes, je trouve que les macro s'exécutent plus rapidement ainsi.

En plus on peut regrouper le maximum de code dans quelques fonctions et variables pour ne pas avoir un code a rallonge.<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 11.25pt; HEIGHT: 11.25pt" alt="" type="#_x0000_t75"><v:imagedata o:href="http://www.vbfrance.com/imgs2/smile.gif" src="file:///C:\DOCUME~1\dlo\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></v:imagedata></v:shape>
Vu comme ça, programmer en VBA devient plus intéressant.
0
Rejoignez-nous