Fonction identique a for...each
Bonsoir,
Débutant sur Excel et surtout en VB, je souhaiterai votre aide pour créer une macro qui :
A chaque fois qu' il trouve le terme "Etat de rap" ( qui en général se trouve dans la colonne E) , il copie toute les ligne jusqu' au prochaine terme "Etat de rap", dans un onglet ( par ex: Etat de rap 1". Puis le paragraphe suivant dans onglet " Etat de rap 2".......
J' ai essayé la fonction For...Each... mais rien n' y fait.
Merci de votre coup de main.
Bonjour,
A tester si ça va.
J'écrase la feuille 'Etat de rap x' si elle est existante
eric
Bonsoir Eriiic,
Merci pour ton aide. C' est exactement ce que je souhaitais.
Petite question si tu le permets. Comme tu as pu le voir dans mon exemple, les lignes étaient alignées, espacés, en gras.....mise en page faite.
Or j' applique ta macro sur un fichier qui, à la base est un fichier Txt que je converti en xls puis je fais la mise en page (je joints le fichier Txt pour info).
Ma question est de savoir comment lancer une macro qui fonctionne sur plusieurs onglets ( de 2 à x onglets par exemple).
Merci et bonne soirée.
Bonsoir,
par exemple :
Sub miseEnPage()
Dim sh As Worksheet
For Each sh In Worksheets
If Left(sh.Name, 11) = "Etat de rap" Then
'...
End If
End Submais je ne vois pas à quoi sert le fichier txt pour la question....
eric
Bonsoir Eriiic,
Merci pour ton aide et ta réactivité.
Un exemple concret est plus parlant qu' un long texte "explicatif " sur ce que l' on souhaite.
Comme tu as pu le constater, je pars d'un txt que je dois convertir en xls puis faire une mise en page de manière à avoir un Etat de rapprochement pas onglet ( j' ai énormement raccourci le fichier d' origine" pour plus de simplicité.
Le résultat souhaité est sur l' onglet FINAL ( qu' il faut multiplier X onglet).
As tu une suggestion ? Merci et bonne soirée.
Bonjour,
ta question était :
Ma question est de savoir comment lancer une macro qui fonctionne sur plusieurs onglets ( de 2 à x onglets par exemple).
C'est ce à quoi j'ai répondu.
Maintenant je ne comprend pas tout...
Tu as une mise en page au départ, que tu casses pour vouloir la refaire ensuite ? Pourquoi la casser alors ???
Récupère les qcq lignes qui te servent d'en-tête et décale d'autant la copie des lignes.
Et c'est quoi le but de répartir sur plusieurs onglet ? Si c'est pour imprimer autant garder l'original et insérer des sauts page si besoin.
Explique le but car là j'ai l'impression de bosser pour rien.
eric
Bonsoir Eric,
Navré de n'avoir pu te répondre avant.
J' ai avancé sur ma macro, néanmoins, un petit problème se pose quand à la fonction " applique la mise en page sur tout les onglet du classeur ( Etat de rap 1, Etat de rap 2, Etat de rap 3......).
Je m' explique, j' ai fait la macro suivante qui me fait la mise en page demandé sauf qu'arrivé à la fin, au lieu de passer à l' onglet suivant, elle reste sur le même onglet.
Peux tu me dire ce qui cloche.
Par avance, Merci[
Sub miseEnPage()
Dim sh As Worksheet
For Each sh In Worksheets
If Left(sh.Name, 11) = "Etat de rap" Then
Range("A1:C6").Select
Selection.ClearContents
Range("A1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[4],RC[5])"
Range("A2").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[4],"" "",RC[5])"
Range("A3").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[3],RC[4],RC[5])"
Range("A4").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[3],RC[4],RC[5])"
Range("A6").Select
ActiveCell.FormulaR1C1 = _
"=CONCATENATE(R[-5]C[6],R[-5]C[7],"" "",R[-5]C[8],R[-5]C[9],R[-5]C[10])"
Range("A1:A6").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
Range("C1:K4").Select
Selection.ClearContents
Range("A1:K1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Selection.Font.Bold = True
Range("A1:K1").Select
Selection.Copy
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A4").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A6").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A8:K8").Select
Selection.Cut
Range("A1").Select
ActiveSheet.Paste
Cells.Select
Cells.EntireColumn.AutoFit
End If
Next
End Sub
Re,
J' ai trouvé mon erreur, il me manquait le "sh" après Next.
Par contre pourrais tu jeter un oeil et me dire si l' on peut peut alléger la macro.
Merci
Bonjour,
Oui on peut alléger.
Déjà 99% des .select sont inutiles et ralentissent.
Ex :
Remplacer :
Range("A1:C6").Select
Selection.ClearContents
par :
Range("A1:C6").ClearContents
Ensuite tu mets des formules dans A1:A6 et tu enchaines par un collage spécial valeur (enfin j'ai l'impression). Met directement la valeur :
[A1]=[F1] & [G1] 'met les bonnes colonnes
Dans :
Range("A1:K1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
j'ai l'impression que toutes les autres propriétés sont celles par défaut.
Met ces lignes en commentaire avec une '. Et si c'est ok tu les supprimes ensuite.
Sur la fin il y a surement moyen d'améliorer les collage-spécial format mais j'ai la flemme de construire un fichier pour tester.
En début de code ajoute
application.screenupdating= false
que tu rétablis avec =true à la fin.
eric
Bonsoir Eric,
Dsl je me suis mal exprimé dans mes demandes et la finalité de ce que je souhaité. Je n' ai pas eu le temps de répondre à tes commentaires ( je le fais donc maintenant, avec un peu de retard, je te l' accorde).
" j'ai l'impression de bosser pour rien."
Réponse : sache que ce n' est pas le cas car avec la macro que tu as créer, tu me fais gagner un temps monstre ( je l'utilises sur d' autres fichiers).
" Ensuite tu mets des formules dans A1:A6 et tu enchaines par un collage spécial valeur (enfin j'ai l'impression). Met directement la valeur :
[A1]=[F1] & [G1] 'met les bonnes colonnes"
Réponse : j' ai pas encore compris comment fonctionne de cette commande, je cherche via notre ami Google et l' aide de Krosoft.
"Sur la fin il y a surement moyen d'améliorer les collage-spécial format mais j'ai la flemme de construire un fichier pour tester."
Réponse : Je comprends et te remercie de m' avoir accordé de ton temps.
Bonne soirée et à bientôt au détour de ce forum.