Problème de Macro

Tonave

XLDnaute Nouveau
Bonjour tout le monde,

Je suis actuellement en stage sur un banc de test automatique. Ce banc utilise donc des données qu'il doit ensuite analyser, trier et tracer les graphiques correspondants. Bref, durant les années précédentes, certains stagiaires ce sont donc attelés à écrire des macro sous Excel 2003.

Apparement tout fonctionnait. Mais aujourd'hui, l'entreprise est passée sous 2007 et les macros ne marchent plus. Mon problème vient apparement d'une check box. Voici le code où il y a plantage :

Sub CreateCheckBox(name As String, right As Long, top As Long)

'recuperation de la largeur de la feuille graphique
Dim chartWidth As Double

'déclaration de la case à cocher
Dim myCheckBox As Shape

chartWidth = ActiveChart.ChartArea.Width

'création de la case à cocher
Set myCheckBox = ActiveChart.Shapes.AddFormControl(xlCheckBox, _
chartWidth - right, top, 80, 10)

'modification du nom et du label de la case à cocher
nameLabel = left(name, Len(name) - 2) 'supprime le numero du checkbox
myCheckBox.name = name

ActiveChart.Shapes(name).Select

//Plantage :confused:

Selection.Characters.Text = nameLabel
Selection.PrintObject = False 'objet invisible à l'impression

'modification de la couleur de fond et de l'emplacement du checkbox
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 7
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.left = chartWidth - right
Selection.ShapeRange.top = top

'validation par défaut de la case à cocher
myCheckBox.ControlFormat.Value = 1

.........

Pouvez vous m'aider à déterminer d'où vient cette erreur?
Je n'y connais pas grand chose au VBA mon sujet de stage ne devait pas porter sur Excel... Oh surprise!

Merci à vous
Tony
 

JNP

XLDnaute Barbatruc
Re : Problème de Macro

Bonjour Tonave et bienvenue :),
Tes prédécesseurs aimaient vivre dangereusement... Déclarer des variables avec des noms de propriétés, je pense que c'est de là que vient l'erreur. Commence par nettoyer le code en modifiant le nom des variables (en français, par exemple) comme ceci
Code:
Sub CreateCheckBox([COLOR=red]Nom [/COLOR]As String, [COLOR=red]Droite[/COLOR] As Long, [COLOR=red]Haut [/COLOR]As Long)
'recuperation de la largeur de la feuille graphique
Dim [COLOR=red]Largeur [/COLOR]As Double
' déclaration de la case à cocher
Dim [COLOR=red]MonCheckBox[/COLOR] As Shape
[COLOR=red]Largeur[/COLOR] = ActiveChart.ChartArea.Width
'création de la case à cocher
Set [COLOR=red]MonCheckBox[/COLOR] = ActiveChart.Shapes.AddFormControl(xlCheckBox, _
    [COLOR=red]Largeur [/COLOR]- [COLOR=red]Droite[/COLOR], [COLOR=red]Haut[/COLOR], 80, 10)
'modification du nom et du label de la case à cocher
[COLOR=red]Dim NomLabel As String[/COLOR]
[COLOR=red]NomLabel [/COLOR]= Left([COLOR=red]Nom[/COLOR], Len([COLOR=red]Nom[/COLOR]) - 2) 'supprime le numero du checkbox
[COLOR=darkorange]MonCheckBox.name = Nom ' Là, y doit y avoir un problème de propriété, Name ne se met pas en majuscule pour le N tout seul...[/COLOR]
ActiveChart.Shapes([COLOR=red]Nom[/COLOR]).Select
Selection.Characters.Text = [COLOR=red]NomLabel[/COLOR]
Selection.PrintObject = False 'objet invisible à l'impression
'modification de la couleur de fond et de l'emplacement du checkbox
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 7
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Left = [COLOR=red]Largeur[/COLOR] - [COLOR=red]Droite[/COLOR]
[COLOR=darkorange]Selection.ShapeRange.top = Haut ' Même souci de propriété pour Top[/COLOR]
'validation par défaut de la case à cocher
MonCheckBox.ControlFormat.Value = 1
Bon courage :cool:
 

Tonave

XLDnaute Nouveau
Re : Problème de Macro

Bonjour JNP!

Merci beaucoup de m'aider et ainsi que pour l'acceuil :)

Je reviens donc sur mon problème. J'ai fait exactement les modifs que tu m'as proposé. Le fichier retrouve donc un peu de son français.

Ce week end j'avais continué à me documenter et je suis tomber sur un convertisseur que propose Microsoft. J'ai donc réussi à changer mon fichier .xls de 2003 en .xlsm pour 2007.

Mais maintenant ce qui est comique c'est que l'erreur ne se trouve plus sur la même ligne :

Code:
'*********************************************************************************
'*          Création d'une case à cocher pour la sélection des courbes           *
'*-------------------------------------------------------------------------------*
'* name : nom de la case à cocher                                                *
'* left : position de la case à cocher à partir de la gauche                     *
'* top : position de la case à cocher à partir du haut                           *
'*********************************************************************************

Sub CreateCheckBox(Nom As String, Droite As Long, Haut As Long)
    
    'recuperation de la largeur de la feuille graphique
    Dim Largeur As Double
    
    'déclaration de la case à cocher
    Dim MonCheckBox As Shape
    
    Largeur = ActiveChart.ChartArea.Width
    
    'création de la case à cocher
    Set MonCheckBox = ActiveChart.Shapes.Add(xlCheckBox, _
            Largeur - Droite, Haut, 80, 10)
[B]  'Erreur avec le .xlsm et .xls RunTime error '438' Object doesn't support this property or method[/B]


    'modification du nom et du label de la case à cocher
    Dim NomLabel As String
    NomLabel = left(Nom, Len(Nom) - 2) 'supprime le numero du checkbox
    MonCheckBox.name = Nom
    ActiveChart.Shapes(name).Select
    Selection.Characters.Text = NomLabel
    Selection.PrintObject = False 'objet invisible à l'impression
        
    'modification de la couleur de fond et de l'emplacement du checkbox
    Selection.ShapeRange.Fill.Visible = msoTrue
    Selection.ShapeRange.Fill.Solid
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 7
    Selection.ShapeRange.Fill.Transparency = 0#
    Selection.ShapeRange.left = Largeur - Droite
    Selection.ShapeRange.top = Haut
    
    'validation par défaut de la case à cocher
    MonCheckBox.ControlFormat.Value = 1
    ' sauf pour Sub-Test 2 et Sub-Test 3
    If ((Nom = "Sub-Test 2  ") Or (Nom = "Sub-Test 3  ")) Then
        myCheckBox.ControlFormat.Value = 0
    End If
    
    'fonction à appeler dans le cas d'une modification de la valeur de la case à cocher
    If ((Nom = "Sub-Test 1  ") Or (Nom = "Sub-Test 2  ") Or (Nom = "Sub-Test 3  ")) Then
        MonCheckBox.OnAction = "'" & Application.ThisWorkbook.name & "'!SelectionCourbeInnerLoop"
    Else
        If (Nom = "Unusable Values  ") Then
            MonCheckBox.OnAction = "'" & Application.ThisWorkbook.name & "'!MaskUnusableValues"
        Else
            MonCheckBox.OnAction = "'" & Application.ThisWorkbook.name & "'!SelectionCourbe"
        End If
    End If
    
End Sub

Vraiment là je suis perdu je commence à perdre pied....
Pourquoi l'erreur se trouve ici maintenant?
Je ne comprends plus rien....

Merci de votre aide!!
Tonave
 

JNP

XLDnaute Barbatruc
Re : Problème de Macro

Bonjour Tonave :),
Je suis désolé mais je ne suis pas vraiment un spécialiste en CheckBox...
En utilisant l'enregistreur de macro, j'obtiens
Code:
    ActiveSheet.CheckBoxes.Add(240.75, 32.25, 58.5, 30.75).Select
La création des CheckBox a peut-être changé sous 2007... Essaie
Code:
Set MonCheckBox = ActiveChart.CheckBoxes.Add(Largeur - Droite, Haut, 80, 10)
ou
Code:
Set MonCheckBox = ActiveSheet.CheckBoxes.Add(Largeur - Droite, Haut, 80, 10)
mais c'est sans garantie...
Bon courage :cool:
 

Tonave

XLDnaute Nouveau
Re : Problème de Macro

Merci JNP pour tes conseils et le coup de l'enregistreur macro, porquoi n'y avais je pas pensé??? :confused:

Donc voilà ce que j'obtiens avec les différentes ligne :
Code:
Set MonCheckBox = ActiveSheet.CheckBoxes.Add(Largeur - Droite, Haut, 80, 10)

Runtime Error '13' type mismatch

Set MonCheckBox = ActiveChart.CheckBoxes.Add(Largeur - Droite, Haut, 80, 10)

Runtime Error '13' type mismatch

ActiveSheet.CheckBoxes.Add(240.75, 32.25, 58.5, 30.75).Select

Object required

:mad:

Snifff je ne comprends vraiement rien à ce excel. Je vais essayé de faire de même avec l'enregistreur macro, j'espère que mon problème va se régler car à l'origine je ne devais pas commencer par ça mais par du C++ ou je suis bien plus à l'aise. Enfin bref encore merci JNP je te metterai les résultats obtenus avec l'enregistreur!

A tout à l'heure ;)
 
Dernière édition:

Tonave

XLDnaute Nouveau
Re : Problème de Macro

Ca y est enfinnnnnnn!!!!!!!

Alors voila comment j'ai procédé :

Code:
Sub CreateCheckBox(Nom As String, Droite As Long, Haut As Long)
    
    'recuperation de la largeur de la feuille graphique
    Dim Largeur As Double
    
    'déclaration de la case à cocher
    Dim MonCheckBox As Shape
    
    Largeur = ActiveChart.ChartArea.Width
    
    'création de la case à cocher
    ActiveSheet.CheckBoxes.Add(Largeur - Droite, Haut, 80, 10).Select
    
    'modification du nom et du label de la case à cocher
    Dim NomLabel As String
    NomLabel = left(Nom, Len(Nom) - 2) 'supprime le numero du checkbox
    Selection.name = Nom
    Selection.Characters.Text = NomLabel
    Selection.PrintObject = False 'objet invisible à l'impression
        
    'modification de la couleur de fond et de l'emplacement du checkbox
    Selection.ShapeRange.Fill.Visible = msoTrue
    Selection.ShapeRange.Fill.Solid
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 7
    Selection.ShapeRange.Fill.Transparency = 0#
    Selection.ShapeRange.left = Largeur - Droite
    Selection.ShapeRange.top = Haut
    
    'validation par défaut de la case à cocher
    'MonCheckBox.ControlFormat.Value = 1
     Selection.Value = xlOn
    ' sauf pour Sub-Test 2 et Sub-Test 3
    If ((Nom = "Sub-Test 2  ") Or (Nom = "Sub-Test 3  ")) Then
        Selection.Value = 0
    End If
    
    'fonction à appeler dans le cas d'une modification de la valeur de la case à cocher
    If ((Nom = "Sub-Test 1  ") Or (Nom = "Sub-Test 2  ") Or (Nom = "Sub-Test 3  ")) Then
        Selection.OnAction = "'" & Application.ThisWorkbook.name & "'!SelectionCourbeInnerLoop"
    Else
        If (Nom = "Unusable Values  ") Then
            Selection.OnAction = "'" & Application.ThisWorkbook.name & "'!MaskUnusableValues"
        Else
            Selection.OnAction = "'" & Application.ThisWorkbook.name & "'!SelectionCourbe"
        End If
    End If
    
End Sub

Mais maintenant j'ai d'autres problèmes :(

J'espère que je vais arriver à les régler tout seul comme un grand.

En tout cas merci pour tout JNP sans toi je n'aurai jamais pensé à utiliser l'enregistreur macro. Tu es mon sauveur ;)

MERCI!
Tonave
 

Discussions similaires

Statistiques des forums

Discussions
312 241
Messages
2 086 523
Membres
103 242
dernier inscrit
Patoshick