Explication VBA !

aude229
Messages postés
28
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
9 mai 2012
- 9 mai 2012 à 09:04
 Utilisateur anonyme - 9 mai 2012 à 19:38
Bonjour,

Je suis casiement au terme de mon programme, mais il me reste quelques erreurs, dans un code et je ne comprend pas trop ce qu'il veut dire (il à été écrit par une personne qui travaillais sur ce programme avant). Je voudrais savoir si vous voyer à première vu des errreurs ou tous simplement ce à quoi renvoi ce code.

Private Sub UserForm_Activate()

an = Range("ANNEEDEP")
ANNEE.Caption = an & ", " & an - 1 & ", " & an - 2
ANNEE2.Caption = an - 1 & ", " & an - 2 & ", " & an - 3

End Sub
Private Sub CommandButton1_Click()

Unload Me

Application.ScreenUpdating = False

If Month(Sheets("Menu").Range("C1")) - 1 = 0 Then
mois = 1
Else: mois = Month(Sheets("Menu").Range("C1")) - 1
End If

If Sheets("Paramètres").Range("CodeA") = 0 Then
    NBgraph = 0
    ElseIf Sheets("Paramètres").Range("CodeB") = 0 Then
        NBgraph = 1
        ElseIf Sheets("Paramètres").Range("CodeC") = 0 Then
            NBgraph = 2
            ElseIf Sheets("Paramètres").Range("CodeD") = 0 Then
                NBgraph = 3
                ElseIf Sheets("Paramètres").Range("CodeE") = 0 Then
                    NBgraph = 4
                    ElseIf Sheets("Paramètres").Range("CodeF") = 0 Then
                        NBgraph = 5
                        ElseIf Sheets("Paramètres").Range("CodeG") = 0 Then
                            NBgraph = 6
                            ElseIf Sheets("Paramètres").Range("CodeH") = 0 Then
                                NBgraph = 7
                                ElseIf Sheets("Paramètres").Range("CodeI") = 0 Then
                                    NBgraph = 8
                                    ElseIf Sheets("Paramètres").Range("CodeJ") = 0 Then
                                        NBgraph = 9
                                        ElseIf Sheets("Paramètres").Range("CodeK") = 0 Then
                                            NBgraph = 10
                                            ElseIf Sheets("Paramètres").Range("CodeL") = 0 Then
                                                NBgraph = 11
                                                ElseIf Sheets("Paramètres").Range("CodeM") = 0 Then
                                                    NBgraph = 12
                                                    ElseIf Sheets("Paramètres").Range("CodeN") = 0 Then
                                                        NBgraph = 13
                                                        ElseIf Sheets("Paramètres").Range("CodeO") = 0 Then
                                                            NBgraph = 14
                                                            Else: NBgraph = 15
                                        
                                        
End If

If ANNEE = True Then
    Sheets("Graphiques").Range("ANGRAPH") = Sheets("TAB").Range("ANNEEDEP")

    i = 1
    j =  2
    Do
" Le probleme commence ici "
     Sheets("Graphiques").ChartObjects("Graphique " & i).Activate     ActiveChart.SeriesCollection(1).Values  = "=TAB!R" & j & "C7:R" & j + 11 & "C7"
    ActiveChart.SeriesCollection(1).Name = "=TAB!R1C7"
    ActiveChart.SeriesCollection(2).Values = "=TAB!R" & j & "C5:R" & j + 11 & "C5"
    ActiveChart.SeriesCollection(2).Name = "=TAB!R1C5"
    ActiveChart.SeriesCollection(3).Values = "=TAB!R" & j & "C3:R" & j + 11 & "C3"
    ActiveChart.SeriesCollection(3).Name = "=TAB!R1C3"
    ActiveChart.SeriesCollection(3).ApplyDataLabels AutoText:=True, ShowValue:=False
    ActiveChart.SeriesCollection(3).Points(mois).ApplyDataLabels AutoText:=True, ShowValue:=True
    With ActiveChart.SeriesCollection(3).DataLabels.Border
        .Weight = 1
        .LineStyle = -4105
    End With
    ActiveChart.SeriesCollection(3).DataLabels.Shadow = True
    ActiveChart.SeriesCollection(3).DataLabels.Interior.ColorIndex = -4105
    With ActiveChart.SeriesCollection(3).DataLabels.Font
        .Name = "Arial"
        .FontStyle = "Gras italique"
        .Size = 10
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .Background = xlAutomatic
    End With

    i = i + 1
    j = j + 12
    Loop While (i < NBgraph + 1)
    
    Else
    Sheets("Graphiques").Range("ANGRAPH") = Sheets("TAB").Range("ANNEEDEP") - 1
 
    i = 1
    j = 2
    Do
    Sheets("Graphiques").ChartObjects("Graphique " & i).ChartObjects.Activate
    ActiveChart.SeriesCollection(1).Values = "=TAB!R" & j & "C9:R" & j + 11 & "C9"
    ActiveChart.SeriesCollection(1).Name = "=TAB!R1C9"
    ActiveChart.SeriesCollection(2).Values = "=TAB!R" & j & "C7:R" & j + 11 & "C7"
    ActiveChart.SeriesCollection(2).Name = "=TAB!R1C7"
    ActiveChart.SeriesCollection(3).Values = "=TAB!R" & j & "C5:R" & j + 11 & "C5"
    ActiveChart.SeriesCollection(3).Name = "=TAB!R1C5"
    ActiveChart.SeriesCollection(3).ApplyDataLabels AutoText:=True, ShowValue:=False
    ActiveChart.SeriesCollection(3).Points(12).ApplyDataLabels AutoText:=True, ShowValue:=True
    With ActiveChart.SeriesCollection(3).DataLabels.Border
        .Weight = 1
        .LineStyle = -4105
    End With
    ActiveChart.SeriesCollection(3).DataLabels.Shadow = True
    ActiveChart.SeriesCollection(3).DataLabels.Interior.ColorIndex = -4105
    With ActiveChart.SeriesCollection(3).DataLabels.Font
        .Name = "Arial"
        .FontStyle = "Gras italique"
        .Size = 10
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .Background = xlAutomatic
    End With
    
    
    i = i + 1
    j = j + 12
    Loop While (i < NBgraph + 1)
    End If
Application.ScreenUpdating = True
Sheets("Graphiques").Range("ANGRAPH").Select
End Sub


Merci d'avance pour votre aide !

20 réponses

4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
9 mai 2012 à 09:45
Tu écris "mais il me reste quelques erreurs", poste les erreurs en question avec la ligne ou elle qui génère l'erreur. ça serra plus simple pour tout le monde.

De plus ce te conseil de faire ce qui suit


Fais ce qui suit :
1)Au niveau de "an = Range("ANNEEDEP")" ou de "Unload Me" clique sur la marge de gauche un rond va apparaitre.

2)Lance
ton programme normalement.

3)Le programme va automatiquement s’arrêter au niveau du rond.

4)Utilise la tour F8 de ton clavier. Cela va faire tourner ton programme pas à pas

5)En survolant les variable avec ta souris tu pourras voir les valeurs qu'elles prennent et ainsi comprendra leurs utilités. Aussi si une fait "des choses bizards" tu pourras l'identifier et la corrigée.

6) Si une ligne généré un message d'erreur, copier la ligne ou surviens l'erreur et colle ici. Avec le message d'erreur.

Si quand tu lance ton programme il y a le message d'erreur avant que tu n'arrives au rond fais ce qui suit:

1)arrête ton programme

2)Presse la touche F8 de ton clavier

Une fois que tu auras fait cela lis les indication ci-dessus depuis le num 4.
0
aude229
Messages postés
28
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
9 mai 2012

9 mai 2012 à 09:56
Bonjour,

Merci pour ta réponse, j'ai fais ce que tu m'as dit, j'ai une erreur:

Erreur d'excecution 1004:
Impossible de lire la propriété ChartObjects de la classe worksheet

Ligne :

 Sheets("Graphiques").ChartObjects("Graphique " & i).Activate


Je ne comprend pas tellement l'erreur...
0
aude229
Messages postés
28
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
9 mai 2012

9 mai 2012 à 10:05
J'ai aussi remarquer autre chose, quand je lis mon programme avec F8, il tourne en boucle 10 fois sur ces lignes là :

Sheets("Graphiques").ChartObjects("Graphique " & i).Activate
    ActiveChart.SeriesCollection(1).Values = "=TAB!R" & j & "C7:R" & j + 11 & "C7"
    ActiveChart.SeriesCollection(1).Name = "=TAB!R1C7"
    ActiveChart.SeriesCollection(2).Values = "=TAB!R" & j & "C5:R" & j + 11 & "C5"
    ActiveChart.SeriesCollection(2).Name = "=TAB!R1C5"
    ActiveChart.SeriesCollection(3).Values = "=TAB!R" & j & "C3:R" & j + 11 & "C3"
    ActiveChart.SeriesCollection(3).Name = "=TAB!R1C3"
    ActiveChart.SeriesCollection(3).ApplyDataLabels AutoText:=True, ShowValue:=False
    ActiveChart.SeriesCollection(3).Points(mois).ApplyDataLabels AutoText:=True, ShowValue:=True
    With ActiveChart.SeriesCollection(3).DataLabels.Border
        .Weight = 1
        .LineStyle = -4105
    End With
    ActiveChart.SeriesCollection(3).DataLabels.Shadow = True
    ActiveChart.SeriesCollection(3).DataLabels.Interior.ColorIndex = -4105
    With ActiveChart.SeriesCollection(3).DataLabels.Font
        .Name = "Arial"
        .FontStyle = "Gras italique"
        .Size = 10
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .Background = xlAutomatic
    End With

    i = i + 1
    j = j + 12
    Loop While (i < NBgraph + 1)


Je pense que c'est parce que avant il y avait 10 graphiques et j'en ai rajouter 5 et du coup la boucle de ne marche pas pour les 5 derniers, mais je ne vois pas ou dire que j'ai rajouter des graphiques.
0
4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
9 mai 2012 à 11:11
La commande
Sheets("Graphiques").ChartObjects("Graphique " & i).Activate


est dans une boucle. Je voudrais savoir si il y a un message d'erreur quand le programme exécute la commende la toute premier fois.

De plus le nom du graphique est-il correcte. Y a t'il vraiment un graphique appelé "Graphique 1" dans la feuille "Graphiques" ou s'appelle t-il "Graphique1" ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aude229
Messages postés
28
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
9 mai 2012

9 mai 2012 à 11:19
Il n'y a pas d'erreurs au debout la premiere est celle que je viens de vous citer.

Dans ma feuille Graphiques il y a 15 graphiques dont 5 que j'ai rajouter, d'ou l'erreur.

Je ne sais pas comment on regarde les noms des graphiques manuellement je n'y arrive pas
0
MarcPL
Messages postés
172
Date d'inscription
jeudi 8 décembre 2011
Statut
Membre
Dernière intervention
21 juillet 2013
2
9 mai 2012 à 12:04
Bonjour !

Deux moyens pour voir le nom d'un graphique :

- clic droit sur le graphique puis choisir dans le menu Fenêtre graphique,
  le nom apparaissant alors dans le titre de la fenêtre;

- sélectionner le graphique puis dans la fenêtre Exécution de l'environnement VBA taper
  ? selection.parent.name puis valider ...

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
aude229
Messages postés
28
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
9 mai 2012

9 mai 2012 à 12:10
C'est bizarre mes graphiques ce nomment Graphiques Graphique 1 .... jusqu'a Graphiques Graphique 10 et apres je passe à Graphiques Graphique 67
0
MarcPL
Messages postés
172
Date d'inscription
jeudi 8 décembre 2011
Statut
Membre
Dernière intervention
21 juillet 2013
2
9 mai 2012 à 12:22
Normal !   Plein de graphiques ont été créés après le n°10 puis supprimés ...

Le compteur s'incrémente au fur et à mesure des créations mais n'est pas mis à jour lors de suppression ...

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
aude229
Messages postés
28
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
9 mai 2012

9 mai 2012 à 13:17
Et du coup c'est peut être à cuase de ça que mon programme bug... Est il possible de mettre de nouveau numéro ?
0
4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
9 mai 2012 à 13:19
Il faudrait que tu me confirme ceci. Tu écris "Il n'y a pas d'erreurs au debout". Donc quand i = 1 les choses ce passe bien mais quand il vaut peut être 10 car il n'existe pas il y a une erreur. Oui Non ?

Si oui je t'invite à ne plus utiliser le nom du graphique mais en utilisant l'indexe soit changer:
Sheets("Graphiques").ChartObjects("Graphique " & i).Activate

par
Sheets("Graphiques").ChartObjects(i).Activate


Dis nous si cela règle le problème avec cette commande.
0
aude229
Messages postés
28
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
9 mai 2012

9 mai 2012 à 13:33
J'ai modifier plusieurs choses.
Le nom des graphiques finalement, j'ai graphique 1 graphique 2 ect jusqu'a 15 ! ensuite j'ai remarquer que mon "j" etait égale a 122 alors qu'il devrait etre egal a 182 (ligne ou se terminent les données pour les graphiques). Et j'ai fait la modification, mais maintenant il me mette un autre probleme relatif à cette ligne :
 ActiveChart.SeriesCollection(3).Values = "=TAB!R" & j & "C3:R" & j + 11 & "C3"


Impossible de définir la propriété values dans la classe séries

Pourtant j'y ai cru ^^
0
aude229
Messages postés
28
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
9 mai 2012

9 mai 2012 à 13:46
A quoi correspond le R car TAB une de mes feuilles se nomme comme cela, c'est celle ou il y a les tableaux, mais "TAB!R" c'est quoi ?
0
4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
9 mai 2012 à 13:49
Comme tu as fais des modif, je pense qu'il serait bon que tu repostes le code en entier pour que l'on aie une vision actuelle des problèmes.
0
aude229
Messages postés
28
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
9 mai 2012

9 mai 2012 à 13:54
J'ai juste modifié le nom des graphes et pour le "j" j'ai laisser = 2 finalement en attendant de regler les problemes sa donne excatement le meme programme.


If ANNEE = True Then
    Sheets("Graphiques").Range("ANGRAPH") = Sheets("TAB").Range("ANNEEDEP")

    I = 1
    j = 2
    Do
    Sheets("Graphiques").ChartObjects(I).Activate
    ActiveChart.SeriesCollection(1).Values = "=TAB!R" & j & "C7:R" & j + 11 & "C7"
    ActiveChart.SeriesCollection(1).Name = "=TAB!R1C7"
    ActiveChart.SeriesCollection(2).Values = "=TAB!R" & j & "C5:R" & j + 11 & "C5"
    ActiveChart.SeriesCollection(2).Name = "=TAB!R1C5"
    ActiveChart.SeriesCollection(3).Values = "=TAB!R" & j & "C3:R" & j + 11 & "C3"
    ActiveChart.SeriesCollection(3).Name = "=TAB!R1C3"
    ActiveChart.SeriesCollection(3).ApplyDataLabels AutoText:=True, ShowValue:=False
    ActiveChart.SeriesCollection(3).Points(mois).ApplyDataLabels AutoText:=True, ShowValue:=True
    With ActiveChart.SeriesCollection(3).DataLabels.Border
        .Weight = 1
        .LineStyle = -4105
    End With
    ActiveChart.SeriesCollection(3).DataLabels.Shadow = True
    ActiveChart.SeriesCollection(3).DataLabels.Interior.ColorIndex = -4105
    With ActiveChart.SeriesCollection(3).DataLabels.Font
        .Name = "Arial"
        .FontStyle = "Gras italique"
        .Size = 10
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .Background = xlAutomatic
    End With

    I = I + 1
    j = j
    Loop While (I < NBgraph + 1)
    
    Else
    Sheets("Graphiques").Range("ANGRAPH") = Sheets("TAB").Range("ANNEEDEP") - 1
 
    I = 1
    j = 2
    Do
    Sheets("Graphiques").ChartObject(I).Activate
    ActiveChart.SeriesCollection(1).Values = "=TAB!R" & j & "C9:R" & j + 11 & "C9"
    ActiveChart.SeriesCollection(1).Name = "=TAB!R1C9"
    ActiveChart.SeriesCollection(2).Values = "=TAB!R" & j & "C7:R" & j + 11 & "C7"
    ActiveChart.SeriesCollection(2).Name = "=TAB!R1C7"
    ActiveChart.SeriesCollection(3).Values = "=TAB!R" & j & "C5:R" & j + 11 & "C5"
    ActiveChart.SeriesCollection(3).Name = "=TAB!R1C5"
    ActiveChart.SeriesCollection(3).ApplyDataLabels AutoText:=True, ShowValue:=False
    ActiveChart.SeriesCollection(3).Points(12).ApplyDataLabels AutoText:=True, ShowValue:=True
    With ActiveChart.SeriesCollection(3).DataLabels.Border
        .Weight = 1
        .LineStyle = -4105
    End With
    ActiveChart.SeriesCollection(3).DataLabels.Shadow = True
    ActiveChart.SeriesCollection(3).DataLabels.Interior.ColorIndex = -4105
    With ActiveChart.SeriesCollection(3).DataLabels.Font
        .Name = "Arial"
        .FontStyle = "Gras italique"
        .Size = 10
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .Background = xlAutomatic
    End With
    
    
    I = I + 1
    j = j + 12
    Loop While (I < NBgraph + 1)
    End If
Application.ScreenUpdating = True
Sheets("Graphiques").Range("ANGRAPH").Select
End Sub



Et maintenant c'est une autre ligne qui pose probleme...

 ActiveChart.SeriesCollection(3).Values = "=TAB!R" & j & "C3:R" & j + 11 & "C3"

0
4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
9 mai 2012 à 15:04
TAB!R" & j & "C3:R"

TAB! fait que excel pointe sur la feuille tab.

R et C font pointé de manière relative à une cellule.

Par exemple (De tête) A1 = R1C1

Il est possible que la valeur de j soit telle qu'il ne trouve pas la valeur.

Tante de mettre j à 171 (car tu fait j+11) et regarde si cela fonctionne.
0
aude229
Messages postés
28
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
9 mai 2012

9 mai 2012 à 15:18
On avance car maintenant il me mette une erreur différentes sa en deviens déprimant...

ActiveChart.SeriesCollection(3).Points(12).ApplyDataLabels AutoText:=True, ShowValue:=True


Erreur:
La méthode Applydatalabels de la classe point à échouer.
0
4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
9 mai 2012 à 16:20
Peut tu changer
ActiveChart.SeriesCollection(3).Points(12).ApplyDataLabels AutoText:=True, ShowValue:=True

par
ActiveChart.SeriesCollection(3).Points(12).ApplyDataLabels ShowValue:=True

ou par
ActiveChart.SeriesCollection(3).Points(12).ApplyDataLabels AutoText:=True


Pour savoir le quelle des deux font planter le programme
0
aude229
Messages postés
28
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
9 mai 2012

9 mai 2012 à 16:28
J'ai pas mal avancé mais je suis retourné au point de départ grâce à vos commentaire j'ai réussis à comprend ce que voulais dire mon code donc finalement "j" doit bien rester à 2 et du coup l'erreur du debut est revenu je suis désolé de vous faire perdre votre temps avec mon programme incompréhensible...


Si je change J, tous mes graphiques se modifies...
0
4u4me4us
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
9 mai 2012 à 17:04
Dans ce cas essaye de changer

Sheets("Graphiques").ChartObjects("Graphique " & i).Activate

par

Sheets("Graphiques").ChartObjects(i).Activate
0
Utilisateur anonyme
9 mai 2012 à 19:38
Bonjour,

Je pense que ce serait préférable que tu ne n'utilises pas TAB comme nom de feuille. En jetant un oeil dans l'aide de VBA on voit vite que TAB est un objet et aussi une fonction de VBA. C'est peut-être autorisé, mais c'est risqué. Personne n'est à l'abri d'une erreur, même pas (surtout pas) Microsoft.
0