cs_catbou
Messages postés7Date d'inscriptionmardi 23 septembre 2008StatutMembreDernière intervention25 septembre 2008
-
24 sept. 2008 à 20:41
l0r3nz1
Messages postés218Date d'inscriptionmercredi 20 février 2008StatutMembreDernière intervention17 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".
dedenet2
Messages postés372Date d'inscriptionvendredi 27 juillet 2007StatutMembreDernière intervention22 juillet 20132 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++
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
dedenet2
Messages postés372Date d'inscriptionvendredi 27 juillet 2007StatutMembreDernière intervention22 juillet 20132 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++
Vous n’avez pas trouvé la réponse que vous recherchez ?
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
cs_catbou
Messages postés7Date d'inscriptionmardi 23 septembre 2008StatutMembreDernière intervention25 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.
cs_catbou
Messages postés7Date d'inscriptionmardi 23 septembre 2008StatutMembreDernière intervention25 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.
l0r3nz1
Messages postés218Date d'inscriptionmercredi 20 février 2008StatutMembreDernière intervention17 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.