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 :

Supprimer ou renommer une feuille si elle existe


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 141
    Points : 47
    Points
    47
    Par défaut Supprimer ou renommer une feuille si elle existe
    Bonjour,

    Je bloque sur cette macro...

    J'ai un code qui copie une feuille avec renommage auto,un msgbox qui s'affiche si le nom existe déjà.
    le soucis c'est que si c'est le cas, le programme s’arrête ne fait rien ce qui est logique car j'ai pas mis un vbYesNo.

    J'ai essayé de changer pour que je puisse avoir le choix entre ne rien faire ou remplacer la 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
    Set wh = Worksheets(ActiveSheet.Name)
     If Feuil_Exist(ThisWorkbook.Name, "C_" & wh.Name) = True Then
        ans = MsgBox("la feuille " & "C_" & wh.Name & " existe déjà voulez-vous la remplacer?", vbExclamation + vbYesNo, "Message Box Title")
         If ans = vbYes Then
         sheet = "C_" & wh.Name
           If sheet.Visible = False Then
            Debug.Print sheet.Name
            sheet.Delete
    End If
    Else
    Exit Sub
    End If
    Else
      ActiveSheet.Copy After:=wh
      ActiveSheet.Name = "C_" & wh.Name
    End If
    j'ai une erreur qui pointe sur : Merci

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    bonjour
    à tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MsgBox("la feuille " & "C_" & wh.Name & " existe déjà voulez-vous la remplacer?", vbYesNo, "Demande de confirmation") = vbYes Then
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    j'ai une erreur qui pointe sur :
    C'est normal, Sheet est un objet et pour nommer cet objet, il y a lieu d'utiliser la propriété Name de celui-ci
    Cependant, on ne peut pas écrire Sheet.Name = "Toto" car un objet est un élément d'une collection que l'on identifie soit par son numéro, soit par son nom
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(1).Name = "Toto"
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Titi").Name = "Toto"
    Mais il est également possible d'utiliser une variable objet de type Worksheet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Dim sht As Worksheet
      Set sht = ThisWorkbook.Worksheets("Titi")
      sht.Name = "Toto"
    J'espère que ces petites explications rendront plus claire la compréhension du problème rencontré

    Petite remarque : Si l'on travaille avec des feuilles de calcul, il est préférable d'utiliser un objet de la collection Worksheets à la place de Sheets
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 141
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    J'espère que ces petites explications rendront plus claire la compréhension du problème rencontré
    Bien sur, je comprends mieux !
    J'ai remplacer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim sheet as Object
    sheet = "C_" & wh.Name
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim sht as WorkSheet
    Set sht = ThisWorkbook.Worksheets("C_" & wh.Name)
         sht.Name = "C_" & wh.Name
    et j'ai plus d'erreur.

    Par contre comme je voulais, tester sur l'ensemble des feuilles visibles et invisibles j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     If sht.Visible = False Then
           Debug.Print sht.Name
            sht.Delete
            End If
            sht.Delete ' pour les feuilles visibles
            ActiveSheet.Copy After:=wh
            ActiveSheet.Name = "C_" & wh.Name
    End If
    Else
      ActiveSheet.Copy After:=wh
      ActiveSheet.Name = "C_" & wh.Name 
    End If
    Il est fonctionnel, mais je sais pas si en VBA existe des méthodes simplifier pour éviter la répétition des lignes, comme une fonction ou appeler la macro copy par exemple ?

    Sinon un grand merci sujet résolu!

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je serais très étonné que le troisième code soit fonctionnel ou alors tout n'a pas été publié car il y a un End If sans If et un Else sans If
    Juste après le premier End If il y a l'instruction sht.Delete or cette même instruction est placée dans le If sht.Visible = False donc cela signifie que l'on supprime toutes les feuilles or un classeur doit au moins avoir une feuille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    If sht.Visible = False Then
           Debug.Print sht.Name
            sht.Delete
            End If
            sht.Delete ' pour les feuilles visibles
            ActiveSheet.Copy After:=wh
            ActiveSheet.Name = "C_" & wh.Name
    End If
    Else
      ActiveSheet.Copy After:=wh
      ActiveSheet.Name = "C_" & wh.Name 
    End If
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 141
    Points : 47
    Points
    47
    Par défaut
    C
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Je serais très étonné que le troisième code soit fonctionnel ou alors tout n'a pas été publié car il y a un End If sans If et un Else sans If
    Juste après le premier End If il y a l'instruction sht.Delete or cette même instruction est placée dans le If sht.Visible = False donc cela signifie que l'on supprime toutes les feuilles or un classeur doit au moins avoir une feuille.
    Bonjour,

    Je penses qu'il fallait que recopie toute la partie du code comme ce que j'ai fait au tout début du sujet

    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
     
    If Feuil_Exist(ThisWorkbook.Name, "C_" & wh.Name) = True Then
         If MsgBox("la feuille " & "C_" & wh.Name & " existe déjà voulez-vous la remplacer?", vbYesNo, "Demande de confirmation") = vbYes Then
            If sht.Visible = False Then
            Debug.Print sht.Name
            sht.Delete
            End If
            sht.Delete ' pour les feuilles visibles
            ActiveSheet.Copy After:=wh
            ActiveSheet.Name = "C_" & wh.Name
          End If
    Else
      ActiveSheet.Copy After:=wh
      ActiveSheet.Name = "C_" & wh.Name 
    End If
    Pour le moment y'a aucun soucis...

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

Discussions similaires

  1. [XL-365] Remplacer une ligne dans une feuille si elle existe déja lors de sauvegarde.
    Par New_VBA_User dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/09/2019, 16h10
  2. [XL-2003] Supprimer une feuille si elle existe, sinon la créer
    Par nekcorp dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/10/2009, 11h03
  3. supprimer une table si elle existe.
    Par dddd86 dans le forum SQL
    Réponses: 3
    Dernier message: 18/06/2009, 09h49
  4. suppression d'une feuille si elle existe
    Par benoi dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/12/2008, 20h56
  5. Supprimer une colonne d'une feuille si elle est vide dans une autre
    Par xave dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 27/02/2008, 14h05

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