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 :

problème d'exécution de macro


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Octobre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Octobre 2020
    Messages : 5
    Points : 4
    Points
    4
    Par défaut problème d'exécution de macro
    Bonjour à tous

    j'ai tenter de réaliser une macro permettant d’ouvrir ou fermer des onglets (60 environ) en fonctions du nom de l'onglet de chaque feuille.

    ma macro fonctionne quand je la lance dans le module développeur / visual basic, par contre elle plante quand je l’exécute a partir d'un bouton de commande.j'ai une erreur d'execution '9': l'indice n'appartient pas à la sélection

    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
     
    Sub Display_V2()
     
    Dim ligne As Integer: Dim colonne_condition As Integer: Dim colonne_sheet As Integer
    Dim m As String
    Dim wsManager As Worksheet
    'Paramétrer la feuille
    Set wsManager = ThisWorkbook.Sheets("00-Manager")
    'Récupérer le nombre de lignes par feuille
    nbreLignesData = wsManager.Cells.Find("*", , , , , xlPrevious).Row
     
    colonne_sheet = 11
    colonne_condition = 5
     
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
     
    For ligne = 26 To nbreLignesData
        m = Cells(ligne, colonne_sheet)
           If Cells(ligne, colonne_condition).Value = "ON" Then
                Worksheets(m).Visible = xlSheetVisible
            Else:
                Worksheets(m).Visible = xlSheetHidden
            End If
    Next ligne
     
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
     
    End Sub
    Auriez des pistes ? Merci d'avance pour vos retours

  2. #2
    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 729
    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 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour pouvoir vous aider, merci de placer le code VBA entre les balises prévues à cet effet (croisillons (#) et de nous indiquer à quelle n° de ligne a lieu l'erreur que vous signalez
    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

  3. #3
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Octobre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Octobre 2020
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    l'anomalie apparait à la ligne 22 (Worksheets(m).Visible = xlSheetHidden)

  4. #4
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Bonjour bertrand_b,

    Voici , vite fait, comment je procéderais : sur base d'un tableau Structuré ( un minimum en 2020).

    Je diviserai en 3 procédures, 1 procédure main (Sub testbertrand_b) et deux Functions (HideUnhideSheet & SheetExists (de Pierre F.))

    En gros le fonctionnement , après paramétrages :


    Pour chaque ligne du tableau de correspondance (ici nommé "Table1")
    On vérifie si la feuille (nom = colonne colShName) existe ( Function SheetExists (de Pierre F.))
    Si existe on applique la "visibilité" en fonction de la deuxième colonne (ColOnOff) via la function HideUnhideSheet

    En fin de macro, msgbox d'erreur , si erreur il y a.

    Les différents 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Sub testbertrand_b()
     
    Dim wb As Workbook
    Dim iRow As Long
    Dim check As Boolean
     
    Dim shName As String
    Dim visible As String
    Dim fdcbk As String
     
    'Paramètres à modifier
     
    Set wb = ThisWorkbook                                          'Par défaut, on va travailler dans ThisWorkbook, classeur d'ou on lance la macro
    Dim tableName As String: tableName = "Table1"          'Nom du tableau entre ""
    Dim colShName As String: colShName = "SheetName"  'Nom de la colonne contenant le nom des Feuilles entre ""
    Dim ColOnOff As String: ColOnOff = "Visible"              'Nom de la colonne contenant le critère visible,non visible ""
    Dim critVisible As String: critVisible = "on"                 'Critère text pour visibilité on = visible
     
    With Range(tableName).ListObject
     
     For iRow = 1 To .ListRows.Count
     
         shName = .ListColumns(colShName).DataBodyRange.Rows(iRow)
     
         If SheetExists(shName, wb) Then
            visible = .ListColumns(ColOnOff).DataBodyRange.Rows(iRow)
            check = HideUnhideSheet(shName, IIf(UCase(visible) = UCase(critVisible), 1, 2), wb)
            If check = False Then fdcbk = fdcbk & vbNewLine & shName & " : Error visible code not found."
         Else
            fdcbk = fdcbk & vbNewLine & "La Feuille " & shName & " n'existe pas dans le classeur " & wb.Name & "."
         End If
     Next iRow
     
    End With
     
    If fdcbk <> "" Then MsgBox fdcbk
     
     
    Set wb = Nothing
     
    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
    21
    Function HideUnhideSheet(ByVal shName As String, ByVal visibleCode As Integer, Optional wb As Workbook) As Boolean
     
    'Code 1 = xlSheetVisible
    'Code 2 = xlSheetHidden
    'Code 3 = xlSheetVeryHidden
    HideUnhideSheet = True
     
      If wb Is Nothing Then Set wb = ActiveWorkbook
     
        Select Case visibleCode
          Case Is = 1
           wb.Worksheets(shName).visible = xlSheetVisible
          Case Is = 2
           wb.Worksheets(shName).visible = xlSheetHidden
          Case Is = 3
           wb.Worksheets(shName).visible = xlSheetVeryHidden
          Case Else
           HideUnhideSheet = False
        End Select
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function SheetExists(ByVal shName As String, Optional wb As Workbook) As Boolean
    'Function de Pierre F sur Dvp
    'Return True if sheet exist
    'https://www.developpez.net/forums/blogs/27262-pierre-fauconnier/b8231/vba-excel-verifier-quune-feuille-existe-classeur-trouver-feuille-nom-classeur/
      Dim Counter As Long: Counter = 1
     
      If wb Is Nothing Then Set wb = ActiveWorkbook
      Do While Counter <= wb.Sheets.Count And Not SheetExists
        SheetExists = StrComp(shName, wb.Sheets(Counter).Name, vbTextCompare) = 0
        Counter = Counter + 1
      Loop
    End Function
    (Et le Workbook test en PJ)
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  5. #5
    Candidat au Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Octobre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Octobre 2020
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup Mfoxy, ta méthode fonctionne parfaitement, sinon concernant mon code que vaut il vraiment ?histoire de m'améliorer

  6. #6
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour Michaël,

    Ce n'est pas grave bien entendu,

    Je ne vois pas de classeur test en pièce jointe.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


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

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/01/2015, 19h42
  2. [XL-2010] Problème d'exécution de macro sous 2010
    Par batou.c dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/08/2013, 16h34
  3. [XL-2010] Problème d'exécution de macro sous 2010 et 2013
    Par asimonnet dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/07/2013, 16h26
  4. [XL-2010] Problème d'exécution de macros
    Par controle-cm dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/12/2012, 08h11
  5. Problème d'exécution de macro
    Par faruedde dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/09/2008, 23h24

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