Erreur d'execution '9' lors d'un lancement de macro

Signaler
Messages postés
4
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
3 novembre 2008
-
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
-
Bonjour à tous,

Voilà j'ai un soucis dans une macro excel qui me met l'erreur d'execution '9'

Lorsque je regarde le script j'ai ça :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.CommandBars("Assainissement").Visible = False
End Sub


Private Sub Workbook_Open()
    MsgBox "Bienvenue dans l'assainissement comptable des comptes de classe 3"
    Application.CommandBars("Assainissement").Visible = True
    'création du fichier à partir de l'extraction ICE
    Application.CommandBars("Assainissement").Controls(1).OnAction = "Creation_Fichier"
    'recherche et élimination des doublons
    Application.CommandBars("Assainissement").Controls(2).OnAction = "Doublons"
    'transfert des lignes émargées
    Application.CommandBars("Assainissement").Controls(3).OnAction = "transfert"
    'Calcul du solde sur l'ensemble des comptes
    Application.CommandBars("Assainissement").Controls(4).OnAction = "RECH_ELEM_CAL"
    'Emarger
    Application.CommandBars("Assainissement").Controls(5).OnAction = "EMARGE"
    'commentaire
    Application.CommandBars("Assainissement").Controls(6).OnAction = "Commentaire"
    'recherche
    Application.CommandBars("Assainissement").Controls(7).OnAction = "RECH_ELEM"
    'mettre en évidence les "gros contrats"
    Application.CommandBars("Assainissement").Controls(8).OnAction = "mettre_couleur"
End Sub

Le debogage surligne cette ligne

Application.CommandBars("Assainissement").Controls(1).OnAction = "Creation_Fichier"

Je ne m'y connais pas trop en code mais je pense que ca va surligner toutes les autres lignes.
Si vous pouviez eclairer mes lumières ca serait gentil

8 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
topic déplacé de VBS vers VBA
(juste au dessus dans la combo ^^)
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Bonjour

Comme je ne retiens pas par coeur les erreurs VBA j'ai dû écrire un bout de code pour savoir que l'erreur 9, c'est L'indice n'appartient pas à la sélection. Je t'en veux pas, zitounami, mais si tu veux de l'aide, il faut pas oublier ce genre de détail.

J'ai une sombre nouvelle pour toi, Zitounami, et tu vas devoir être courageux : il semble que la collection Controls de ton commandbar("Assainissement") soit vide.

Pour le savoir, exécute le sub suivant, qui va te lister les contrôles :

Sub listeCommandBarControl()
    Dim myItem As CommandBarControl
    For Each myItem In CommandBars("Assainissement").Controls
        MsgBox myItem.Caption
    Next
End Sub

Cordialement
Messages postés
4
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
3 novembre 2008

Bonjour Orohena,


Déjà merci pour ta réponse. Désole de ne pas avoir bien précisé l'erreur de ma macro.


Je viens de créer un module et j'ai mis ton sub mais je n'arrive pas à le lancer.


De toute façon mon commandbar est vide, il faut certainement que je mette les contrôles mais je ne sais pas comment faire cette manipulation.


Est-il possible de le faire graphiquement (pas en ligne de commande) ou pas ?


Si oui comment faire si possible, et si non, possèdes-tu le code adequate afin de résoudre mon problème.


Au pire des cas, je pourrai peut-être mettre à disposition mon document excel.


Bien cordialement.
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Bonjour

Je ne sais pas du tout si on peut créer un commandBar sans passer par VBA.
Voici une démo de gestion de commandBar.
Elle crée une barre de commande flottante et temporaire avec deux contrôles :
une listBox et un bouton.

Peux-tu la tester ?



Dim boissons As Variant
Sub accoudé_au_bar()
    boissons = Array("Pastis", "Whisky", "Vodka")
    Dim cb As CommandBar, cmdBarCtl As CommandBarControl
    Dim i As Integer
    supprimeCommandBar
' ajoute une nouvelle barre de commande
    Set cb = CommandBars.Add(Name:="L'Assommoir", _
        Position:=msoBarFloating, temporary:=True)
' ajoute un controle listBox à la barre de commande
    Set cmdBarCtl = cb.Controls.Add(Type:=msoControlDropdown, temporary:=True)
    With cmdBarCtl
        .Width = 100
        .Caption = "Interdit aux moins de 18 ans"
        For i = 0 To UBound(boissons)
            .AddItem boissons(i), i + 1
        Next
        .DropDownLines = 10
        .DropDownWidth = 100
        .ListIndex = 0
        .OnAction = "surSelectionBoisson"
    End With
' ajoute un bouton à la barre de commande
    Set cmdBarCtl = cb.Controls.Add(Type:=msoControlButton, temporary:=True)
    With cmdBarCtl
        .BeginGroup = True
        .Caption = "Brève de comptoir"
        .FaceId = 3
        .OnAction = "histoire"
    End With
    With cb
        .Visible = True
        .Protection = msoBarNoChangeVisible
        .Width = 200
    End With
End Sub

Sub surSelectionBoisson() ' code evenementiel associé à la listBox
    Dim ind As Byte
    ind = CommandBars("L'Assommoir").Controls(1).ListIndex - 1
    MsgBox "Vous avez commandé : " & boissons(ind)
End Sub


Sub histoire()   ' code evenementiel associé au bouton
    MsgBox "Les bons crus font les bonnes cuites", , "Pensée profonde"
End Sub

Sub supprimeCommandBar() ' suppression de la commandBar
    Dim myItem As CommandBar
    For Each myItem In CommandBars
        If myItem.Name = "L'Assommoir" Then myItem.Delete
    Next
End Sub


Cordialement
Messages postés
4
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
3 novembre 2008

Bonjour,

J'ai testé ta commandbar !

Donc ca me créé bien la barre de commande flotante avec une listebox (vodka whisky pastis) et quand on en selectionne une ca nous dis bien qu'on l'a selectionnée.
Et si on clic sur le button 'enregistrer' ca nous met 'les bons crus font les bonnes cuites'

Mais j'ai pas réussi à avoir d'autres fonctions ?

Puis je t'adresser mon document excel par mp ?
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Bonjour zitounami

D'après ta description, l'exemple que je t'ai envoyé fonctionne bien ; tu es donc en mesure de créer un CommandBar et de lui attribuer des listes déroulantes et des boutons, et d'appeler des procédures... C'est à peu près tout ce qu'on attend d'un CommandBar. Pourrais-tu préciser ce que tu veux dire par j'ai pas réussi à avoir d'autres fonctions, stp ?

Cordialement
Messages postés
4
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
3 novembre 2008

Bonjour Orohena,

Et bien en fait, dans le script que tu m'as envoyé j'appercois des "Pensée profonde", "Breve de comptoir", "Histoire".. Que je n'ai pas vu ou réussi à utiliser.
Sinon, apparement le script fonctionne sur d'autre poste, connaitrais tu un moyen de récupérer cette fameuse commande barre, car les gens utilisent la même macro mise sur le réseau, néanmoins elle fonctionne pour certains postes et pas d'autre.

Ou il y a t'il un fichier à récupérer sur le system pour que les 2 excels soit similaires ? (Dans le sens ou ca fera comme une copie d'un Excel à un autre).

Merci encore ! !
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
Hello Zitounami,

Ne te fais pas de souci pour ce que tu appelles les autres fonctions. Ce sont des infos-bulles, des titres de boîtes de message, et je pense que tu ne les a pas vu passer. De toute façon elles sont tout à fait accessoires.

Si je comprends bien, tu veux copier les commandbars permanentes d'une application Excel pour les coller dans l'application d'un autre poste sur le réseau.

Si c'est cela, je ne sais pas comment faire. En plus, ça me paraît très compliqué, alors que ma solution consistant à créer une commandbar temporaire est simple et orthodoxe. Qu'est-ce qui te pose problème dans mon code, et qui t'empêche de le réutiliser pour créer ta commandbar assainissement ?

Cordialement