IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Faire une boucle Do Loop Until [XL-2002]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Météorologiste
    Inscrit en
    Octobre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Météorologiste
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 60
    Points : 59
    Points
    59
    Par défaut Faire une boucle Do Loop Until
    Bonjour,

    J'essaie de faire une macro où je cherche si un onglet existe et s'il n'existe pas, je le créé sinon je lui ajoute un numéro. mon soucis, c'est que ma macro tourne en boucle indéfiniment et je ne comprends pas pourquoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Public Function FeuilleExiste(ByVal StrNomFeuille As String) As Boolean
    FeuilleExiste = Not (IsError(Evaluate("=" & StrNomFeuille & "!A1")))
    End Function
     
    Sub ARCHIVER()
    Dim a As Integer
    a = 1
    If FeuilleExiste(Feuil1.Range("G2")) = False Then 'Si la feuille existe
        If FeuilleExiste(Feuil1.Range("G2") & "_" & a) = False Then 'Si la feuille existe
        Do
        a = a + 1
        Loop Until FeuilleExiste(Feuil1.Range("G2") & "_" & a) = True
        Sheets.Add.Name = Feuil1.Range("G2") & "_" & a
        Else
        Sheets.Add.Name = Feuil1.Range("G2") & "_" & a
        End If
    Else
    Sheets.Add.Name = Feuil1.Range("G2") 'Si la feuille n'existe pas
    End If
    End Sub
     
    Pouvez-vous m'éclairer s'il vous plait ?

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une autre approche semblable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub ARCHIVER()
    Dim Nom As String, Suf As String
    Dim i As Integer
     
    Nom = Feuil1.Range("G2").Value
    Do Until Not FeuilleExiste(Nom & Suf)
        i = i + 1
        Suf = "_" & CStr(i)
    Loop
    ThisWorkbook.Worksheets.Add.Name = Nom & Suf
    End Sub
     
    Private Function FeuilleExiste(ByVal Str As String) As Boolean
     
    On Error Resume Next
    FeuilleExiste = ThisWorkbook.Sheets(Str).Index > 0
    End Function
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une autre approche avec une boucle For each Next

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Sub Archiver()
     
    Dim NomFeuilleCherchee As String
    Dim FeuilleTrouvee As Boolean
    Dim Sh As Worksheet
     
    NomFeuilleCherchee = Feuil1.Range("G2")
    FeuilleTrouvee = False
     
    For Each Sh In Worksheets
       Select Case Mid(Sh.Name, 1, Len(NomFeuilleCherchee))
            Case NomFeuilleCherchee
                  FeuilleTrouvee = True
                  Exit For
       End Select
    Next Sh
     
    If FeuilleTrouvee = False Then
        Sheets.Add.Name = NomFeuilleCherchee & "_" & CStr(Sheets.Count + 1)
        ActiveSheet.Move after:=Sheets(Sheets.Count)
    End If
     
    End Sub
    Cordialement.

  4. #4
    Membre du Club
    Femme Profil pro
    Météorologiste
    Inscrit en
    Octobre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Météorologiste
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 60
    Points : 59
    Points
    59
    Par défaut
    Solution testée et approuvée ! Merci

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    et une proposition sans boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function existSheet(nomFeuille As String) As Long
        On Error Resume Next
        existSheet = Sheets(nomFeuille).Index
    End Function
    Si la feuille existe on a son index, 0 (FAUX) sinon.
    eric

    edit: je viens de voir que mercatog avait fait une proposition semblable, désolé pour le doublon.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. [XL-2003] Besoin d'aide pour faire une boucle loop sur une macro
    Par spacesheep dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/04/2010, 11h42
  3. Problème avec une boucle Do.. Loop Until
    Par gta126 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 29/12/2007, 11h27
  4. Réponses: 2
    Dernier message: 01/08/2005, 16h55
  5. Comment faire une boucle ???
    Par HookerSeven dans le forum Access
    Réponses: 6
    Dernier message: 17/06/2005, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo