Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Modules de classe Michel Pierron

4 réponses
Avatar
Jean-Paul V
Bonjour à tous

J’essaie de modifier un ancien module de classe de Michel Pierron qui
permettait de changer les couleurs de plusieurs éléments d’un graphique qui
pouvait prendre 69 types différents ( Serge Garneau).Malheureusement je ne
comprends pas tout.
http://cjoint.com/?ddkSwiibsy
Afin de progresser je commence par des questions simples :
Dans le code du Userform nous avons :

Option Explicit
Private iColors(1 To 56) As New lblClass

Private Sub UserForm_Initialize()
Dim u%, i%, Ctl As Control
With ThisWorkbook.Sheets("69Graph")
' Recherche de l'index du graphique actuel
i = InStr(1, .ChartObjects("graphe").Chart.ChartTitle.Text, "(", 1)
u = Val(Mid$(.ChartObjects("graphe").Chart.ChartTitle.Text, i + 1))
' Recherche du numéro de ligne correspondant sur la feuille "69Graph"
i = RowFind(ThisWorkbook.Sheets("69Graph"), 4, u, True)
' Positionnement de la ListeBox sur le graphique actuel
Me.ListBox1.ListIndex = i - 1
' Couleur de fond du graphique actuel
With .ChartObjects("graphe").Chart.ChartArea
u = .Interior.ColorIndex
End With
End With
' Create lblGroup objects
For Each Ctl In Me.Controls
If Left(Ctl.Name, 3) = "lbl" Then
i = Val(Mid(Ctl.Name, 4))
Set iColors(i).lblGroup = Ctl
' Présélection palette quand concordance des couleurs
If i = u Then
Me.Current.Top = Ctl.Top - 2
Me.Current.Left = Ctl.Left - 2
End If
End If
Next Ctl
End Sub

1)Si le titre de mon Graphique est Charttype=xlPie(5)
Je suppose que l’instruction ‘’ i =
InStr(1,ChartObjects("graphe").Chart.ChartTitle.Text, "(", 1) donne la
position de la ‘’( ‘’dans le titre donc avec ce titre i=16
L’instruction suivante donne donc pour u la valeur 5)
Sachant que en colonne 4 j’ai 5 je ne comprends pas comment l’instruction
i = RowFind(ThisWorkbook.Sheets("69Graph"), 4, u, True) trouve le numéro
de ligne correspondant sur la feuille "69Graph"

2)je ne comprends pas les 2 instructions

Me.Current.Top = Ctl.Top - 2
Me.Current.Left = Ctl.Left – 2

Comment les expliquer ?


@+ j’espère

4 réponses

Avatar
MichDenis
A ) Cette ligne est reliée à la fonction plus bas :
Si besoin d'aide sur la signification d'une ligne de code
particulière...spécifie laquelle !

| i = RowFind(....)

Dans le même module, tu as cette fonction
'------------------
' Recherche du N° de ligne correspondant à une chaîne (partielle ou non)
Private Function RowFind&(Sh As Worksheet, ByVal Col%, What As Variant, Whole As Boolean)
Dim W As Range, Who As Byte
If Whole Then Who = 1 Else Who = 2
Set W = Sh.Columns(Col).Find(What, LookAt:=Who)
If W Is Nothing Then RowFind = 0 Else RowFind = W.Row
End Function
'------------------

B ) Ces 2 lignes permettent d'avoir un petit carré autour
du bouton de couleur (label) qui est associé à la couleur
de l'objet graphique sélectionné ... ce qui donne au bouton
l'impression qu'il est sélectionné...
Si tu observes bien les boutons du formulaire, autour du bouton
affichant la couleur blanche (lbl2), il y a un autre Label appelé
Current. Ces 2 lignes positionnes ce label (current) autour
du bouton désiré... (le -2 permet de centré verticalement et
horizontalement ce label (current)
Me.Current.Top = Ctl.Top - 2
Me.Current.Left = Ctl.Left - 2




"Jean-Paul V" a écrit dans le message de news:

Bonjour à tous

J'essaie de modifier un ancien module de classe de Michel Pierron qui
permettait de changer les couleurs de plusieurs éléments d'un graphique qui
pouvait prendre 69 types différents ( Serge Garneau).Malheureusement je ne
comprends pas tout.
http://cjoint.com/?ddkSwiibsy
Afin de progresser je commence par des questions simples :
Dans le code du Userform nous avons :

Option Explicit
Private iColors(1 To 56) As New lblClass

Private Sub UserForm_Initialize()
Dim u%, i%, Ctl As Control
With ThisWorkbook.Sheets("69Graph")
' Recherche de l'index du graphique actuel
i = InStr(1, .ChartObjects("graphe").Chart.ChartTitle.Text, "(", 1)
u = Val(Mid$(.ChartObjects("graphe").Chart.ChartTitle.Text, i + 1))
' Recherche du numéro de ligne correspondant sur la feuille "69Graph"
i = RowFind(ThisWorkbook.Sheets("69Graph"), 4, u, True)
' Positionnement de la ListeBox sur le graphique actuel
Me.ListBox1.ListIndex = i - 1
' Couleur de fond du graphique actuel
With .ChartObjects("graphe").Chart.ChartArea
u = .Interior.ColorIndex
End With
End With
' Create lblGroup objects
For Each Ctl In Me.Controls
If Left(Ctl.Name, 3) = "lbl" Then
i = Val(Mid(Ctl.Name, 4))
Set iColors(i).lblGroup = Ctl
' Présélection palette quand concordance des couleurs
If i = u Then
Me.Current.Top = Ctl.Top - 2
Me.Current.Left = Ctl.Left - 2
End If
End If
Next Ctl
End Sub

1)Si le titre de mon Graphique est Charttype=xlPie(5)
Je suppose que l'instruction '' i InStr(1,ChartObjects("graphe").Chart.ChartTitle.Text, "(", 1) donne la
position de la ''( ''dans le titre donc avec ce titre i
L'instruction suivante donne donc pour u la valeur 5)
Sachant que en colonne 4 j'ai 5 je ne comprends pas comment l'instruction
i = RowFind(ThisWorkbook.Sheets("69Graph"), 4, u, True) trouve le numéro
de ligne correspondant sur la feuille "69Graph"

2)je ne comprends pas les 2 instructions

Me.Current.Top = Ctl.Top - 2
Me.Current.Left = Ctl.Left - 2

Comment les expliquer ?


@+ j'espère
Avatar
Jean-Paul V
Bonjour MichDenis

Merci pour votre réponse B cela répond à 2 questions que je me posais.

Pour la question A, je crois comprendre ce que fait la fonction
RowFind(....) elle cherche dans la 4ème colonne de la feuille 69Graph un
morceau de libellé déterminé par les 2 fonctions InStr et
Val(Mid$(.ChartObjects et elle donne la ligne.

Quand je regarde plus bas comment est définie la fonction RowFind je ne
comprends rien.

If Whole Then Who = 1 Else Who = 2

1 ) Qu'est-ce que cette variable Who non définie ?

Set W = Sh.Columns(Col).Find(What, LookAt:=Who)

2 ) le Find(What, LookAt:=Who) me laisse perplexe

mais dans ma question A j'ai fait l'impasse sur le comment ça marche du
RowFind.

malgrè cela je ne comprends pas, je disais :
Si le titre de mon Graphique est Charttype=xlPie(5)
Je suppose que l'instruction '' i =
InStr(1,ChartObjects("graphe").Chart.ChartTitle.Text, "(", 1) donne la
position de la ''( ''dans le titre donc avec ce titre i
3 ) est-ce exact?
l'instruction suivante
u = Val(Mid$(.ChartObjects("graphe").Chart.ChartTitle.Text, i + 1))
donne le morceau de libellé après ( , donc on trouve pour u la valeur '' 5)''
4) est-ce exact ?

5) si 3) et 4) sont exacts comment la fonction
i = RowFind(ThisWorkbook.Sheets("69Graph"), 4, u, True)
peut elle trouver ''5) '' dans la 4ème colonne alors que j'ai 5

@+ j'espère et merci encore pour la réponse B


A ) Cette ligne est reliée à la fonction plus bas :
Si besoin d'aide sur la signification d'une ligne de code
particulière...spécifie laquelle !

| i = RowFind(....)

Dans le même module, tu as cette fonction
'------------------
' Recherche du N° de ligne correspondant à une chaîne (partielle ou non)
Private Function RowFind&(Sh As Worksheet, ByVal Col%, What As Variant, Whole As Boolean)
Dim W As Range, Who As Byte
If Whole Then Who = 1 Else Who = 2
Set W = Sh.Columns(Col).Find(What, LookAt:=Who)
If W Is Nothing Then RowFind = 0 Else RowFind = W.Row
End Function
'------------------

B ) Ces 2 lignes permettent d'avoir un petit carré autour
du bouton de couleur (label) qui est associé à la couleur
de l'objet graphique sélectionné ... ce qui donne au bouton
l'impression qu'il est sélectionné...
Si tu observes bien les boutons du formulaire, autour du bouton
affichant la couleur blanche (lbl2), il y a un autre Label appelé
Current. Ces 2 lignes positionnes ce label (current) autour
du bouton désiré... (le -2 permet de centré verticalement et
horizontalement ce label (current)
Me.Current.Top = Ctl.Top - 2
Me.Current.Left = Ctl.Left - 2




"Jean-Paul V" a écrit dans le message de news:

Bonjour à tous

J'essaie de modifier un ancien module de classe de Michel Pierron qui
permettait de changer les couleurs de plusieurs éléments d'un graphique qui
pouvait prendre 69 types différents ( Serge Garneau).Malheureusement je ne
comprends pas tout.
http://cjoint.com/?ddkSwiibsy
Afin de progresser je commence par des questions simples :
Dans le code du Userform nous avons :

Option Explicit
Private iColors(1 To 56) As New lblClass

Private Sub UserForm_Initialize()
Dim u%, i%, Ctl As Control
With ThisWorkbook.Sheets("69Graph")
' Recherche de l'index du graphique actuel
i = InStr(1, .ChartObjects("graphe").Chart.ChartTitle.Text, "(", 1)
u = Val(Mid$(.ChartObjects("graphe").Chart.ChartTitle.Text, i + 1))
' Recherche du numéro de ligne correspondant sur la feuille "69Graph"
i = RowFind(ThisWorkbook.Sheets("69Graph"), 4, u, True)
' Positionnement de la ListeBox sur le graphique actuel
Me.ListBox1.ListIndex = i - 1
' Couleur de fond du graphique actuel
With .ChartObjects("graphe").Chart.ChartArea
u = .Interior.ColorIndex
End With
End With
' Create lblGroup objects
For Each Ctl In Me.Controls
If Left(Ctl.Name, 3) = "lbl" Then
i = Val(Mid(Ctl.Name, 4))
Set iColors(i).lblGroup = Ctl
' Présélection palette quand concordance des couleurs
If i = u Then
Me.Current.Top = Ctl.Top - 2
Me.Current.Left = Ctl.Left - 2
End If
End If
Next Ctl
End Sub

1)Si le titre de mon Graphique est Charttype=xlPie(5)
Je suppose que l'instruction '' i > InStr(1,ChartObjects("graphe").Chart.ChartTitle.Text, "(", 1) donne la
position de la ''( ''dans le titre donc avec ce titre i
L'instruction suivante donne donc pour u la valeur 5)
Sachant que en colonne 4 j'ai 5 je ne comprends pas comment l'instruction
i = RowFind(ThisWorkbook.Sheets("69Graph"), 4, u, True) trouve le numéro
de ligne correspondant sur la feuille "69Graph"

2)je ne comprends pas les 2 instructions

Me.Current.Top = Ctl.Top - 2
Me.Current.Left = Ctl.Left - 2

Comment les expliquer ?


@+ j'espère





Avatar
MichDenis
| i = RowFind(ThisWorkbook.Sheets("69Graph"), 4, u, True)

'-------------------------
Private Function RowFind&(Sh As Worksheet, ByVal Col%, What As Variant, Whole As Boolean)
Dim W As Range, Who As Byte
If Whole Then Who = 1 Else Who = 2
Set W = Sh.Columns(Col).Find(What, LookAt:=Who)
If W Is Nothing Then RowFind = 0 Else RowFind = W.Row
End Function
'-------------------------

Chaque paramètre de la fonction
Sh As Worksheet = ThisWorkbook.Sheets("69Graph")
ByVal Col% = 4
What As Variant = La variable U définit dans la procédure appelant la fonction
Whole As Boolean = True

Cette ligne de code :
If Whole Then Who = 1 Else Who = 2
Sert à déterminer si la méthode Find à la ligne suivante doit
utiliser la valeur Xlpart ou XlWhole lorsqu'elle recherche
la valeur de U dans la colonne 4
La valeur numérique des 2 constantes du paramètre "LookAt"
de la méthode Find est :
XlPart = 2
XlWhole = 1
En conséquence, selon que le paramètre est à true ou False dans
la ligne de code appelant la fonction
i = RowFind(ThisWorkbook.Sheets("69Graph"), 4, u, True)
La méthode Find uilisera LookAt:= XlPart ou LookAt:= XlWhole

Comment déterminer la valeur numérique d'une constante d'un paramêtre de fonction :
A ) dans la fenêtre de l'éditeur de code,
ouvre l'explorateur d'objet
B ) dans la boîte de saisie recherche, tu tapes le paramètre : LookAt
C ) dans la fenêtre du bas, à droite, apparaît les 2 valeurs que ce paramêtre
peut prende
D ) Si tu sélectiones à tour de rôle chacun deux valeurs, tu verras dans le bas
de la fenêtre son équivalent numérique.
Avatar
Jean-Paul V
Bonjour MichDenis

Merci pour cette réponse détaillée et pédagogique.
Je viens de découvrir l'utilité de l'explorateur d'objet.
Il faudrait que je creuse ce sujet.

Bonne journée


| i = RowFind(ThisWorkbook.Sheets("69Graph"), 4, u, True)

'-------------------------
Private Function RowFind&(Sh As Worksheet, ByVal Col%, What As Variant, Whole As Boolean)
Dim W As Range, Who As Byte
If Whole Then Who = 1 Else Who = 2
Set W = Sh.Columns(Col).Find(What, LookAt:=Who)
If W Is Nothing Then RowFind = 0 Else RowFind = W.Row
End Function
'-------------------------

Chaque paramètre de la fonction
Sh As Worksheet = ThisWorkbook.Sheets("69Graph")
ByVal Col% = 4
What As Variant = La variable U définit dans la procédure appelant la fonction
Whole As Boolean = True

Cette ligne de code :
If Whole Then Who = 1 Else Who = 2
Sert à déterminer si la méthode Find à la ligne suivante doit
utiliser la valeur Xlpart ou XlWhole lorsqu'elle recherche
la valeur de U dans la colonne 4
La valeur numérique des 2 constantes du paramètre "LookAt"
de la méthode Find est :
XlPart = 2
XlWhole = 1
En conséquence, selon que le paramètre est à true ou False dans
la ligne de code appelant la fonction
i = RowFind(ThisWorkbook.Sheets("69Graph"), 4, u, True)
La méthode Find uilisera LookAt:= XlPart ou LookAt:= XlWhole

Comment déterminer la valeur numérique d'une constante d'un paramêtre de fonction :
A ) dans la fenêtre de l'éditeur de code,
ouvre l'explorateur d'objet
B ) dans la boîte de saisie recherche, tu tapes le paramètre : LookAt
C ) dans la fenêtre du bas, à droite, apparaît les 2 valeurs que ce paramêtre
peut prende
D ) Si tu sélectiones à tour de rôle chacun deux valeurs, tu verras dans le bas
de la fenêtre son équivalent numérique.