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 :

Copie de Feuille_Renommer avec "bis" si feuille existe déjà


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 220
    Par défaut Copie de Feuille_Renommer avec "bis" si feuille existe déjà
    Bonjour à tous,

    Et bonne année 2008 !!!

    J'ai besoin de votre aide.
    J'ai un classeur contenant une feuille sommaine puis plusieurs feuilles datées de la forme "dd.mm.yy".

    Je souhaite copier la dernière feuille datée (la plus récente) et la renommer avec la date du jour.

    Mon problème se pose lorsque je souhaite effectuer cette opération plusieurs fois dans la journée. Dans ce cas, j'aimerais que la feuille soit nommée avec la DateDuJour suivie de "-2" si la date du jour existe déjà, avec "-3" si "DateDuJour" et "DateDuJour-2" existent déjà et ainsi de suite.

    Vérifier si une feuille existe, pas de problème, mais comment effectuer une boucle pour vérifier si DateDujour existe, puis DateDuJour-2, puis DateDuJour-3 etc. et ainsi renommer ma feuille copiée correctement ?

    Merci pour votre aide précieuse.

    Mél

  2. #2
    Membre expérimenté Avatar de conconbrr
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut
    Salut,

    Tu pourrais faire une boucle "For Each" sur toutes tes pages et incrémenter un compteur à chaque fois qu'une page contient la date du jour.

    A la fin de ta boucle, si le compteur vaut 0 alors tu mettras juste date du jour, sinon tu mettras "date du jour" & compteur+1.

    Voilà je pense que ça devrait répondre à tes attentes

    P.S: Si tu veux une aide technique plus détaillée (structure du For Each, ou du test de chaîne...), n'hésites pas je me ferais un plaisir de te répondre, je n'ai pas détaillé pour faire plus court et parce que je ne connaissais pas ton niveau en VBA

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 220
    Par défaut
    Citation Envoyé par conconbrr Voir le message
    Salut,

    Tu pourrais faire une boucle "For Each" sur toutes tes pages et incrémenter un compteur à chaque fois qu'une page contient la date du jour.

    A la fin de ta boucle, si le compteur vaut 0 alors tu mettras juste date du jour, sinon tu mettras "date du jour" & compteur+1.

    Voilà je pense que ça devrait répondre à tes attentes

    P.S: Si tu veux une aide technique plus détaillée (structure du For Each, ou du test de chaîne...), n'hésites pas je me ferais un plaisir de te répondre, je n'ai pas détaillé pour faire plus court et parce que je ne connaissais pas ton niveau en VBA
    Alors super, merci pour vos conseils éclairs. Bon j'ai d'abord essayé le code de Wilfried (adapté à mon cas, puisque ma feuille est la seconde, et je n'insère pas de nouvelle feuille mais copie simplement la plus actuelle), mais il ne fonctionne qu'à hauteur de 2 essais par jour.

    Du coup, j'ai repris l'idée du compteur de conconbrr (sympa le nom), et ca marche super bien :

    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
    nom = Sheets(2).Name
     
    Today = Format(Now, "dd.mm.yy")
     
    compteur = 0
     
    For Each feuille In Worksheets
        If Left(feuille.Name, 8) = Today Then
        compteur = compteur + 1
        End If
    Next
     
    Sheets(2).Copy After:=Sheets(1)
     
    If compteur = 0 Then
        ActiveSheet.Name = Today
    ElseIf compteur > 0 Then
        ActiveSheet.Name = Today & "_" & compteur + 1
    End If
    Merci encore !!! A une prochaine peut être.

    Mél

  4. #4
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    C'est bizarre ca, j'en ai fait 5 de feuilles sur la meme journée et ca fonctionne, la seule obligation comme je l'ai dit, toujours la derniere feuille

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    220
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Septembre 2007
    Messages : 220
    Par défaut
    Citation Envoyé par wilfried_42 Voir le message
    re:

    C'est bizarre ca, j'en ai fait 5 de feuilles sur la meme journée et ca fonctionne, la seule obligation comme je l'ai dit, toujours la derniere feuille
    Beh c bizarre, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If num = 1 then num = 2
    donc pas d'autre choix, num ne dépassera pas 2.
    Mais peut être que je me trompe aussi.

  6. #6
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    donc tu n'as pas essayé

    if num =1 then num = 2 est une initialisation, car dans ta demande, tu n'as pas de feuille _1, tu as uniquement la date, j'ai tout simplement suivi ta demande

    fais l'essai, je ne gere aucun compteur, je travaille directement sur le nom de la derniere feuille avec une analyse du nom

  7. #7
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    bonjour

    Si c'est la derniere feuille

    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
    Sub creerfeuille()
    Dim wdat As Date, wnum As Integer
    Dim nom As String, rec As Integer
    nom = Sheets(Sheets.Count).Name
    rec = InStr(nom, "_")
    If rec = 0 Then
       wdat = CDate(nom)
       num = 1
    Else
       wdat = CDate(Left(nom, rec - 1))
       num = Val(Mid(nom, rec + 1, Len(nom) - rec)) + 1
    End If
        Sheets.Add After:=Sheets(Sheets.Count)
    If wdat = Date Then
       If num = 1 Then num = 2
       Sheets(Sheets.Count).Name = Format(Date, "dd-mm-yy") & "_" & num
    Else
       Sheets(Sheets.Count).Name = Format(Date, "dd-mm-yy")
    End If
     
    End Sub
    Meilleurs voeux

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

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