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.

20etat-de-rap.zip (8.87 Ko)

Bonjour,

A tester si ça va.

J'écrase la feuille 'Etat de rap x' si elle est existante

eric

30classeur2.zip (18.44 Ko)

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.

15rappro-ibz.txt (13.05 Ko)

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 Sub

mais 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.

Rechercher des sujets similaires à "fonction identique each"