enilec89
Messages postés12Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 1 décembre 2009
-
7 oct. 2008 à 16:04
enilec89
Messages postés12Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 1 décembre 2009
-
9 oct. 2008 à 11:58
Bonjour,
Je débute et je voudrais savoir s'il est possible et comment raccourcir ma macro qui se répète 30 fois. Elle est trop longue et donc ne peut s'executer.
Merci par avance pour votre aide.
Sub Macro1()<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Dim Lig_S As Long 'Ligne source
Dim Lig_D As Long 'ligne destination
Dim F_S As Worksheet 'Feuille source
Dim F_D As Worksheet 'Feuille Destination
Set F_S = Sheets("F1") 'F1 est le nom de l'onglet source
Set F_D = Sheets("F2") 'F2 est le nom de l'onglet destination
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 7 oct. 2008 à 18:19
Salut,
le fait que ta macro ne puisse s'executer n'a rien avoir avec sa longueur !
Voici lle code en version simplifié :
Les Range avec un point devant sont liés a la feuille F1 via le with
les Range sans point devant sont liés a la feuille selectionné en debut de code c'est a dire la feuille F2
Sub Macro1()
Dim Lig_S As Long 'Ligne source
Dim Lig_D As Long 'ligne destination
Dim F_S As Worksheet 'Feuille source
Dim F_D As Worksheet 'Feuille Destination
Set F_S = Sheets("F1") 'F1 est le nom de l'onglet source
Set F_D = Sheets("F2") 'F2 est le nom de l'onglet destination
Lig_D = F_D.Range("A65536").End(xlUp).Row + 1 'Ligne destination
For Lig_S = 44 To 3 Step -1
With F_S 'Avec la feuille F1
If F_S.Range("C4").Value = 1 Then
F_D.Select 'selection de la feuille F2
Application.CutCopyMode = False 'une fois suffit !!!
.Range("C40,E40,G40,I40").Copy
Range("A1000").Select 'Zone temporaire
ActiveSheet.Paste Link:=True
Selection.Copy
Range("B9").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Range("A1000").EntireRow.Delete 'on efface la zone temporaire
enilec89
Messages postés12Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 1 décembre 2009 7 oct. 2008 à 19:36
SUPER !!!
Merci Bigfish, ton code marche super bien et il est bien plus court que le mien....
C exactement ce qu'il me fallait!!
Merci aussi a Gillardg, je ne savait pas que l'on pouvait appeler une macro dans une autre. Très utile!
G beaucoup appris grace a vous 2.
enilec89
Messages postés12Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 1 décembre 2009 8 oct. 2008 à 11:31
Oups, petit probleme....
La macro de Bigfish marche tres bien seule, mais je doit la repeter 30 fois en midifiant cette instuction:
If F_S.Range("C4").Value = 1 Then
et la ca ne marche plus...
Qu'ai-je mal fait?
Sub Macro1()
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Dim Lig_S As Long 'Ligne source
Dim Lig_D As Long 'ligne destination
Dim F_S As Worksheet 'Feuille source
Dim F_D As Worksheet 'Feuille Destination
Set F_S = Sheets("F1") 'F1 est le nom de l'onglet source
Set F_D = Sheets("F2") 'F2 est le nom de l'onglet destination
Lig_D = F_D.Range("A65536").End(xlUp).Row + 1 'Ligne destination
For Lig_S = 44 To 3 Step -1
With F_S 'Avec la feuille F1
If F_S.Range("C4").Value = 1 Then
F_D.Select 'selection de la feuille F2
Application.CutCopyMode = False 'une fois suffit !!!
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 8 oct. 2008 à 15:44
Salut,
tu peux repreciser un peu et me donner la 2ieme partie du code en mettant en en evidence (couleur ou autre) les lignes de code differentes de la premiere partie
enilec89
Messages postés12Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 1 décembre 2009 8 oct. 2008 à 17:54
Voila, la seule chose qui change c'est
If F_S.Range("C4").Value = 1 ou 2ou 3 ect (30fois) Then
G aussi un message d'erreur sur SkipFlanks a partir de la 2eme partie du code.
Désolée si c pas tres claire , mais je débute donc je ne sait pas trop comment expliquer.....
Sub Macro1()
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Dim Lig_S As Long 'Ligne source
Dim Lig_D As Long 'ligne destination
Dim F_S As Worksheet 'Feuille source
Dim F_D As Worksheet 'Feuille Destination
Set F_S = Sheets("F1") 'F1 est le nom de l'onglet source
Set F_D = Sheets("F2") 'F2 est le nom de l'onglet destination
Lig_D = F_D.Range("A65536").End(xlUp).Row + 1 'Ligne destination
For Lig_S = 44 To 3 Step -1
With F_S 'Avec la feuille F1
If F_S.Range("C4").Value = 1 Then
F_D.Select 'selection de la feuille F2
Application.CutCopyMode = False 'une fois suffit !!!
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 8 oct. 2008 à 18:15
Ça je l'ai compris ! ce que je veux c'est que tu me dise quelle ligne sont differentes dans le reste du code car je veux bien t'aider mais je peux pas y passer ma journée
enilec89
Messages postés12Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 1 décembre 2009 9 oct. 2008 à 11:58
G trouvé mon erreur (stupide en plus).
Maintenant ca marche super bien!!!
Une derniere petite question et promis j'arrete de t'embeter:
Comment réaliser la transposition en conservant les liaisons aux
cellules?
Ce serai pour cette partie du code:
If F_S.Range("C4").Value = 1 Then
F_D.Select 'selection de la feuille F2
Application.CutCopyMode = False 'une fois suffit !!!
.Range("C40,E40,G40,I40").Copy
Range("A1000").Select 'Zone temporaire
ActiveSheet.Paste Link:=True
Selection.Copy
Range("B9").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Range("A1000").EntireRow.Delete 'on efface la zone temporaire