Sortie d'une boucle FOR

Re les amis, Vous m'avez sorti d'une sacrée galère y a quelques jours. Et j'ai encore un tic sur un passage de ma macro.

je veux tester un classeur sur ses feuilles. Si la feuille éxiste déjà, j'execute une action, mais si au contraire elle n'éxiste pas. Je créé la feuille puis j'exécute une action.

Tout marche bien, sauf que si la feuille est déja présente, il va quand meme allez chercher la création de feuille, ce qui me retourne logiquement une erreur.

Je vous ai mis, le fichier ainsi que le code qui m'échappe.

Merci d'avance pour vos réponses.

Sub testmacro()

Dim n As Integer

Dim trouve As Boolean

For n = 1 To Sheets.Count

If Sheets(n).Name = "Index" Then

trouve = True

MsgBox "trouvé"

Exit For

ElseIf Not trouve Then

Sheets.Add.Name = "Index"

MsgBox " créer"

End If

Next n

End Sub

15book1.xlsm (17.46 Ko)

bonjour,

proposition de correction de ta macro

Sub testmacro()
    Dim n As Integer
    Dim trouve As Boolean

    For n = 1 To Sheets.Count
        If Sheets(n).Name = "Index" Then
            trouve = True
            MsgBox "Index trouvé"
            Exit For
        End If
    Next n
    If Not trouve Then
        Sheets.Add.Name = "Index"
        MsgBox "Index créé"
    End If
End Sub

Bonjour

peux être comme ca a voir

A+

Maurice

Sub testmacro()
Dim N As Long
Dim Trouve As Boolean
Trouve = False
    For N = 1 To Sheets.Count
        If Sheets(N).Name = "Index" Then
                Trouve = True
                MsgBox "trouv?"
                Exit For
        End If
    Next N

If Trouve = False Then Sheets.Add.Name = "Index"

End Sub

edit : j'ai fait une erreur de code ; erreur corrigée dans ce post :

https://forum.excel-pratique.com/viewtopic.php?p=712761#p712761

dhany

Bordel !! Merci Beaucoup Acide sulfurique et Archer !

j'en étais sur, je m'etais planté sur les emplacements, franchement MERCI !!

Vous déchirez ! Vos deux codes marchent parfaitement !!

@Gianni23

je te propose une solution sans boucle !

22book1.xlsm (16.63 Ko)

* note que j'ai supprimé ta feuille "Index" ; exécute la macro test

* ensuite, exécute de nouveau la macro test

dhany

J'ai jamais utilié "On Error GoTo.

Mais quand je vois ce que tu as fais, j'en suis admiratif.

Encore Merci !

Et juste une chose, comment ça se passe si je veux reutilizer la feuille que j'ai créé ? A savoir si je remplace :

Sheets.Add.Name = "Index" par Sheets.Add.Name = Range("F2").value

FX.activate ?

tu a écrit :

comment ça se passe si je veux réutiliser la feuille que j'ai créée ?

après exécution de la macro test, tu es sûr que la feuille "Index" existe !

il te suffit donc de l'utiliser comme d'habitude ; par exemple :

MsgBox Worksheets("Index").Range("F2")

mais si tu veux renommer la feuille, c'est différent :

Worksheets("Index").Name = Range("F2")

dhany

tu a écrit :

comment ça se passe si je veux réutiliser la feuille que j'ai créée ?

après exécution de la macro test, tu es sûr que la feuille "Index" existe !

il te suffit donc de l'utiliser comme d'habitude ; par exemple :

MsgBox Worksheets("Index").Range("F2")

mais si tu veux renommer la feuille, c'est différent :

Worksheets("Index").Name = Range("F2")

dhany

Ok, justement la prochaine et dernière étape, est de créer une nouvelle feuille par identifiant.

Ex : La cellule F2 à pour valeur : OP467322.

Je dois créer un onglet avec ce nom la (OP467322) et y opérer mon action à l'intérieur de celui ci. Sinon le créer et travailler dedans ensuite.

Donc comme tu as pu le compendre, le nom de l'onglet n'est pas fixe.

Un exemple est plus flagrant. J'adjoins mon fichier

17book1.xlsm (19.04 Ko)

dans ce cas :

* ta cellule F2 indique le nom variable de la feuille avec laquelle tu vas travailler : "OP467322", ou un autre nom

* la feuille qui contient cette cellule F2 doit elle-même avoir un nom fixe pour y accéder et lire F2

autre possibilité : cette feuille est toujours la 1ère feuille du classeur, et tu la lis via Worksheets(1)

c'est donc Worksheets(1).[F2] qui contient le nom variable de ta feuille de travail

* est-ce que c'est pas la feuille de ta cellule F2 qui devrait s'appeler "Index" ? à c'moment-là, tu lis Worksheets("Index").[F2] qui contient "OP467322" ou autre ; tu travailles avec la feuille indiquée par F2 ; et surtout, tu changes pas le nom de la feuille "Index" ! (puisque ce nom doit rester fixe pour lire la prochaine valeur de F2) ; à moins d'utiliser Worksheets(1).[F2]

dhany

Ce que tu viens de me marquer est exactement ce que j'ai fais, mon soucis est que j'aimerais intérargir dans chacune des feuilles que j'ai créé. Mais cela me renvoie une erreur :

If Sheets(N).Name = Worksheets("Données").Range("F2").Value Then

Trouve = True

Range("D2:J2").Select

Selection.Copy

Sheets(N).Name.Activate ( cette partie me pose probleme)

If Range("F2").Value <> "" Then

bonjour

pour résoudre le problème de syntaxe, essaie

Sheets(N).Activate

mais l'utilisation de select et activate n'est pas conseillée.

bonjour

pour résoudre le problème de syntaxe, essaie

Sheets(N).Activate

mais l'utilisation de select et activate n'est pas conseillée.

J'ai essayé aussi, mais ne fonctionne pas non plus. Il me met tout dans une seule page

@Gianni

je te retourne ton fichier modifié (mais c'est juste quelques pistes) :

16book1.xlsm (22.78 Ko)

fais Ctrl e ; regarde chaque feuille ajoutée ; lis le code VBA.

dhany

Put*** Dhany, mais JE T'AIME !!!!

Depuis ce matin, je galère et tu as trouvé.. enfin

MERCI Beaucoup !!!

de rien, c'était avec plaisir !

dhany

Je t'avoue que je lute un peu pour comprendre pour modifier la suite, mais franchement c'est top le temps que tu aies passé pour moi.

Put*** Dhany, mais JE T'AIME !!!!

Dhany, ça match, fonce !!

Rechercher des sujets similaires à "sortie boucle"