Relier macro à contrôle ActiveX

Bonjour,

J'ai un projet qui contient plusieurs feuilles et plusieurs modules. Sur l'une de ces feuilles, j'ai un contrôle activeX (une combobox). Cette liste permet de sélectionner une plage de valeurs dont on souhaite tracer le graphique, et chaque fois que l'on sélectionne une autre plage, le graphique précédent est supprimé pour laisser place au nouveau.

Je ne parviens pas à relier la macro qui permet de supprimer le graphique précédent (appelée Macro1) au contrôle ActiveX. J'ai essayé en l'appelant dans l'événement Click :

Private Sub ComboBox1_Click

Call Macro1 'Destruction du graphique précédent
'Création du graphique actuel dans le reste de la procédure

End Sub

J'ai également essayé en faisant Call NomDuModule.Macro1 ou en l'appelant dans l'événément Change, sans succès.

On obtient une erreur d'appel. Comment devrais-je appeler cette macro dans l'événement Click ?

Merci d'avance !

Bonjour,

j'utiliserais la procédure événementielle "Change" dans votre cas.
A chaque changement de valeur de la combobox, alors on lance la procédure de suppression du graphique.

Maintenant, où se trouve cette procédure ? Est-elle sur le "code" d'un autre onglet ?Je pense qu'elle doit se trouvait dans un module standard.

Evidemment, comme toujours, il est plus facile de répondre avec un fichier sous les yeux.

Pour ma part, j'évite d'utiliser les contrôles ActiveX... Ici peut être qu'une liste de choix avec une surveillance événementielle "Change" sur la feuille et un test d'intersection ferait l'affaire...

@ bientôt

LouReeD

Bonjour et merci pour votre réponse !

Je ne pourrai pas envoyer mon projet en entier, mais voici les parties concernées :

La macro de suppression de graphiques se trouve dans un module nommé "DeltaModule" (est-ce bien ce que vous appelez un module standard ? Ou alors le module devrait se nommer Module 1 ?). En voici le code :

Sub Macro1()
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.Parent.Delete
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.Parent.Delete
    ActiveSheet.ChartObjects("Graphique 3").Activate
    ActiveChart.Parent.Delete
End Sub

Dans la liste des procédures événementielles de ma combobox, j'ai donc ajouté :

Private Sub ComboBox1_Change()
    Call Macro1
End Sub

Dès lors que je veux sélectionner un élément dans ma liste, j'obtiens l'erreur "L'élément portant ce nom est introuvable" pointée sur la ligne

ActiveSheet.ChartObjects("Graphique 1").Activate

On dirait que VBA cherche à supprimer Graphique 1 dès que je sélectionne un élément de la liste pour la première fois, pourtant j'appelle Macro1 uniquement dans la procédure événementielle Change.

Voici la partie des événements ComboBox1 jointe ci-dessous (le classeur est vide donc ne contient pas les valeurs utilisées pour créer le graphique) :

20classeur-v1.xlsm (13.45 Ko)

Dites-moi si vous avez besoin de plus de détails.

En effet, je préfèrerais également ne pas utiliser de contrôle ActiveX, cependant je suis assez limitée niveau timing et mon correcteur ne portera pas d'intérêt sur la question. Si j'ai bien compris, les contrôles ActiveX peuvent modifier directement les registres du CPU, ce qui n'est pas top niveau sécurité.

Encore merci d'avance !

ASAP ? Moi je dis AVQP ! (aussi vite que possible !)

Sinon pour remédier rapidement au problème :

Sub Macro1()
    On Error Resume Next
    ActiveSheet.ChartObjects("Graphique 1").Activate
    ActiveChart.Parent.Delete
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.Parent.Delete
    ActiveSheet.ChartObjects("Graphique 3").Activate
    ActiveChart.Parent.Delete
    On Error Goto 0
End Sub

@ bientôt

LouReeD

Merci pour votre réponse ! Ce que vous avez proposé me semble effectivement être la bonne solution, toutefois je me heurte à un problème étrange (rencontré même lors de l'exécution d'autres procédures). Le code n'a pas le résultat attendu pendant un certain nombre d'exécutions, puis il fonctionne, puis plus à nouveau, etc. Sauriez-vous d'où cela peut venir ?

Je me suis rendu compte que dans la procédure du click il y avait déjà un paragraphe consacré à la suppression des graphiques :

For j = 1 To 4
    On Error Resume Next
    ActiveSheet.ChartObjects("Graphique " & j).Activate
    If Err.Number = 0 Then
        ActiveChart.Parent.Delete
    End If
Next j

Cependant, que ce soit avec ce paragraphe ou avec l'appel de Macro1 dans l'événement Change, j'obtiens au mieux le graphique en entier, au pire l'axe des graphiques sans la courbe, et dans les deux cas le graphe n'est pas supprimé lorsque j'en sélectionne un autre.

Par ailleurs, lorsque j'essaie d'exécuter ComboBox1_Click (sans le paragraphe consacré à la suppression de graphique), j'obtiens l'erreur 9 "L'indice n'appartient pas à la sélection". J'ai beau regarder en détail, je ne vois pas ce à quoi elle fait référence.

C'est grave, docteur ? Je vous remercie encore infiniment pour votre aide.

Rechercher des sujets similaires à "relier macro controle activex"