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 :

Aide pour un bug dans une macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut Aide pour un bug dans une macro
    Bonjour,

    J'ai mis en place ce code qui doit me permettre de sélectionner une feuille de calcul une fois son nom inscrit dans un Textbox, mais malheureusement cela ne fonctionne pas.
    Le message suivant apparaît "L'indice n'apparaît pas dans la sélection"
    Pouvez-vous m'apporter votre aide s'il vous plait ?
    Merci par avance

    Voici 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
    27
    28
    Private Sub TxtLigne_Change()
    Dim NomFeuille As String, Ws As Object
    Dim NomFeuil As String
    
        Application.ScreenUpdating = False
        
    'Je rends toutes les feuilles visibles
    
        For Each Ws In ActiveWorkbook.Worksheets
        Ws.Visible = True
    Next Ws
    
    'Je sélectionne la feuille du Textbox
        NomFeuille = (Me.TxtLigne.Value) problème ici
        NomFeuil = ("F" & Me.TxtLigne.Value)
        ActiveWorkbook.Sheets(NomFeuille).Activate
        ActiveWorkbook.Sheets(NomFeuil).Activate
    'Je masque les autres feuilles
        For Each Ws In ActiveWorkbook.Worksheets
            If Ws.name <> NomFeuille Then Ws.Visible = xlSheetVeryHidden
            Sheets("Accueil").Visible = True
            Sheets("F" & Me.TxtLigne).Visible = True
            Next Ws
    
    'Je ferme l'userform
    Unload Me
    End Sub
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  2. #2
    Membre éclairé
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Points : 684
    Points
    684
    Par défaut
    bonjour,

    Je ne suis pas sur du tout de ma réponse mais peut être il y a un problème de concordance avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim NomFeuille As String
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomFeuille = (Me.TxtLigne.Value)
    n'étant pas professionnel en la matière je pense que le .value ne convient pas au format string mais peut être que je dis une grosse connerie...
    Merci de cliquer sur pour chaque message vous ayant aidé
    puis sur pour clore cette discussion …

    C'est en récoltant les cailloux qu'on te jette que tu construiras ta future estrade...

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Merci pour l'idée, mais j'ai tout essayé (String, Variant, Object, etc...) rien ne va
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    je suis un peu à court d'idée, sauf 2, peut-être pas très pertinentes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomFeuille = Cstr((Me.TxtLigne.Value))
    + quel est le type de variable associée à Me.TxtLigne.Value? (par la fonction VarType par exemple)

    Bonne journée
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    En fait j'ai fait autrement, je suis passé par une Combo, mais je rencontre un autre problème. L'utilisateur est obligé de faire sa sélection à partir de la Combo, il ne peut pas taper directement dans la Combo.

    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
    27
    28
     
    Private Sub CmbLigne_Change()
    Dim NomFeuille As String, Ws As Object
    Dim NomFeuil As String
     
        Application.ScreenUpdating = False
     
    'Je rends toutes les feuilles visibles
     
        For Each Ws In ActiveWorkbook.Worksheets
        Ws.Visible = True
    Next Ws
     
    'Je sélectionne la feuille du combo
        NomFeuille = Me.CmbLigne.Value
        NomFeuil = ("F" & Me.CmbLigne.Value)
        ActiveWorkbook.Sheets(NomFeuille).Activate
        ActiveWorkbook.Sheets(NomFeuil).Activate
    'Je masque les autres feuilles
        For Each Ws In ActiveWorkbook.Worksheets
            If Ws.name <> NomFeuille Then Ws.Visible = xlSheetVeryHidden
            Sheets("Accueil").Visible = True
            Sheets("F" & Me.CmbLigne).Visible = True
            Next Ws
     
    'Je ferme l'userform
    Unload Me
    End Sub
    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
     
    Private Sub UserForm_Initialize()
    Dim mesOnglets() As MyOnglet
    Dim i As Long
    ReDim mesOnglets(0)
    Dim l
    For i = 1 To ActiveWorkbook.Worksheets.Count
     
              If Left(Sheets(i).name, 1) = "L" Then 'test de  la premier lettre du nom de la feuille
                ReDim Preserve mesOnglets(UBound(mesOnglets) + 1)
                mesOnglets(UBound(mesOnglets)).couleur = ActiveWorkbook.Sheets(i).Tab.Color
                mesOnglets(UBound(mesOnglets)).name = UCase(ActiveWorkbook.Sheets(i).name)
                mesOnglets(UBound(mesOnglets)).l = CLng(Right(ActiveWorkbook.Sheets(i).name, Len(ActiveWorkbook.Sheets(i).name) - 1))
              End If
        Next i
        TrieOnglet mesOnglets
    For i = 1 To UBound(mesOnglets)
         Me.CmbLigne.AddItem (mesOnglets(i).name)
    Next
    End Sub
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  6. #6
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Il te faut effectuer un contrôle avant de sélectionner une feuille car tu ne peux pas être sûr que le nom sera bien orthographié !
    Utilise l'évènement "KeyDown" pour déclencher la proc par l'appui sur la touche "Entrée" :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    Private Sub TxtLigne_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
     
        Dim NomFeuille As String
        Dim Ws As Worksheet
        Dim NomFeuil As String
        Dim Existe As Boolean
     
        If KeyCode = 13 Then
     
            Application.ScreenUpdating = False
     
            'Je rends toutes les feuilles visibles
            For Each Ws In ActiveWorkbook.Worksheets
     
                Ws.Visible = True
     
            Next Ws
     
            NomFeuille = (Me.TxtLigne.Value)
     
            'contrôle de l'existance du nom de la feuille
            For Each Ws In Worksheets
     
                If Ws.Name = NomFeuille Then
     
                    Existe = True
                    Exit For
     
                End If
     
            Next Ws
     
            If Existe = False Then
     
                MsgBox "Le nom '" & NomFeuille & "' est inexistant dans la collection de feuilles de ce classeur !"
                Exit Sub
     
            End If
     
            NomFeuil = ("F" & Me.TxtLigne.Value)
     
            '---ça sert à quoi ces activations de feuille ???
            ActiveWorkbook.Sheets(NomFeuille).Activate
            ActiveWorkbook.Sheets(NomFeuil).Activate
     
            'Je masque les autres feuilles
            For Each Ws In ActiveWorkbook.Worksheets
     
                If Ws.Name <> NomFeuille Then Ws.Visible = xlSheetVeryHidden
     
                Sheets("Accueil").Visible = True
                Sheets("F" & Me.TxtLigne).Visible = True
     
            Next Ws
     
            'Je ferme l'userform
            Unload Me
     
        End If
     
    End Sub
    Hervé.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Merci Hervé pour ton aide. Est-ce que ce code remplace Change ou vient-il en complément ?
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  8. #8
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    J'ai trouvé la réponse. Je remplace Change et Initialize par ton code. Il fonctionne très bien.
    Par contre, lorsque l'utilisateur tape un nom inexsistant, toutes les feuilles s'affichent et ça je dois l'empêcher.
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Par contre, lorsque l'utilisateur tape un nom inexsistant, toutes les feuilles s'affichent et ça je dois l'empêcher.
    => C'est normal avec le code, puisque le test est fait après l'affichage de toutes les feuilles .... Voir proposition de rajout (non testé) ci-dessous

    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
    27
    28
    NomFeuille = (Me.TxtLigne.Value)
     
            'contrôle de l'existance du nom de la feuille
            For Each Ws In Worksheets
     
                If Ws.Name = NomFeuille Then
     
                    Existe = True
                    Exit For
     
                End If
     
            Next Ws
     
            If Existe = False Then
     
                MsgBox "Le nom '" & NomFeuille & "' est inexistant dans la collection de feuilles de ce classeur !"
    ' Quelquechose à rajouter ici, du style
            For Each Ws In ActiveWorkbook.Worksheets
     
                If Ws <> ActiveSheet Then Ws.Visible = False 'A revoir, il faut en laisser une
     
            Next Ws
     
     
                Exit Sub
     
            End If
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  10. #10
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Voici ce que j'ai fait en m'inspirant de la modificiation proposée par Vincent que je remercie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    For Each Ws In ActiveWorkbook.Worksheets
     
                    If Ws.name <> NomFeuille Then Ws.Visible = xlSheetVeryHidden
                    Sheets("Accueil").Visible = True
                Next Ws
     
                Exit Sub
     
            End If
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

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

Discussions similaires

  1. Bug dans une macro de copie de tableau Excel dans PPT
    Par sachadupuy dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/05/2014, 12h29
  2. Aide pour affichage "élégant" dans une QTableView
    Par init dans le forum Débuter
    Réponses: 0
    Dernier message: 27/06/2012, 20h43
  3. Réponses: 7
    Dernier message: 03/01/2012, 12h14
  4. Réponses: 2
    Dernier message: 20/11/2011, 17h17
  5. bug dans une macro
    Par lsebastien dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/01/2009, 18h14

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