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 :

VbCancel


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut VbCancel
    bonjour,

    je cherche a programmer une marco permettant de renommer les feuilles d'un classeur. voilà le code:

    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
    25
    26
    Sub RenommerFeuille()
        
        Dim maFeuilleCalcul As Worksheet
        Dim strPrompt As String, strResult As String
        Dim Compteur As Integer
        
        Compteur = 0
        strPrompt = "Veuillez saisir le nouveau nom de la feuille de calcul"
        
        For Each maFeuilleCalcul In Application.Worksheets
            strResult = InputBox(strPrompt & maFeuilleCalcul.Name)
            'maFeuilleCalcul.Name = strResult
                If vbCancel = True Then
                    Exit For
                ElseIf vbOK = True Then
                    maFeuilleCalcul.Name = strResult
                End If
            Compteur = Compteur + 1
        Next maFeuilleCalcul
        
        strPrompt = "Nombre total de feuilles de calcul renommées =" & Str$(Compteur)
        
        MsgBox strPrompt
            
    End Sub
    ça fonctionne assez bien mais une fois qu'on clique sur Annuler au lieu de OK ça me donne un déboguage , est ce que quelqu'un peut m'aider

    Merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Un simple petit test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            strResult = InputBox(strPrompt & maFeuilleCalcul.Name)
            if strResult = "" then exit for
    car inputbox renvoie "" quand on clique sur Annuler, je ne pense pas que tu puisses tester vbCancel ici.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    Bonjour,

    oui ça marche merci, mais moi en fait je veux pas qu'il s'arrete je veux qu'il passe a la prochaine feuille

    Merci en tout cas pour ta réponse ça ma trop aidé

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    J'ai édité mon premier post (pas assez vite sans doute) et ça devrait faire ce que tu veux.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    Citation Envoyé par neupont Voir le message
    J'ai édité mon premier post (pas assez vite sans doute) et ça devrait faire ce que tu veux.
    dsl mais j'ai rien compris de cette phrase

    parce que ca ne fait pas ce que je veux une fois que je clique sur annuler ben la boucle for s'arrete

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Ah ok.
    J'avais vu un "exit for" dans ton code, j'ai cru que c'était ce que tu voulais.
    Ceci devrait mieux convenir :

    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 RenommerFeuille()
     
        Dim maFeuilleCalcul As Worksheet
        Dim strPrompt As String, strResult As String
        Dim Compteur As Integer
     
        Compteur = 0
        strPrompt = "Veuillez saisir le nouveau nom de la feuille de calcul "
     
        For Each maFeuilleCalcul In Application.Worksheets
            strResult = InputBox(strPrompt & maFeuilleCalcul.Name)
            if strResult <> "" then 
                maFeuilleCalcul.Name = strResult
                Compteur = Compteur + 1
            End If
     
        Next maFeuilleCalcul
     
        strPrompt = "Nombre total de feuilles de calcul renommées = " & Str$(Compteur)
     
        MsgBox strPrompt
     
    End Sub

  7. #7
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour tlm,

    Je me permet de proposer une variante qui permet de renommer ou non 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
    Sub nom_feuille()
    Dim i As Byte, NewName As String
     
    For i = 1 To Sheets.Count
    renommer:
        If MsgBox("Voulez-vous renommer la feuille " & Sheets(i).Name & " ?", vbYesNo + vbQuestion, "Renommer les feuilles") = vbYes Then
            NewName = InputBox("Entrez un nouveau nom pour la feuille " & Sheets(i).Name)
            If NewName <> "" Then
                Sheets(i).Name = NewName
            Else
                MsgBox "Veuillez introduire un nouveau nom ou garder le nom initial", vbExclamation
                GoTo renommer
            End If
        End If
    Next
    End Sub

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 211
    Par défaut
    Pour le premier code le débogage est a ce niveau

    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
    25
    
    Sub RenommerFeuille1()
        
        Dim maFeuilleCalcul As Worksheet
        Dim strPrompt As String, strResult As String
        Dim Compteur As Integer
        
        Compteur = 0
        strPrompt = "Veuillez saisir le nouveau nom de la feuille de calcul "
        
        For Each maFeuilleCalcul In Application.Worksheets
            strResult = InputBox(strPrompt & maFeuilleCalcul.Name)
            If strResult <> "" Then
                maFeuilleCalcul.Name = strResult
                Compteur = Compteur + 1
            End If
            
        Next maFeuilleCalcul
        
        strPrompt = "Nombre total de feuilles de calcul renommées = " & Str$(Compteur)
        
        MsgBox strPrompt
            
    End Sub
    Dsl pour le deuxième code ca marche super bien

    Je voulais vous posez une autre question: pourquoi le vbcancel ne marche pas dans cet exemple?? pourtant normalement on appuie sur "Annuler"

    Merci d'avance

  9. #9
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Parce que je n'en ai pas tenu compte dans le code, je ne vérifie que son contenu et le fait de cliquer sur le bouton "annuler" de l'inputbox renvoit la même chose que si elle est vide.

+ 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