OVH Cloud OVH Cloud

Remplir 50 contrôles avec des données d'une feuille excel

7 réponses
Avatar
La Rota
Bonjour,

Dés que je clique sur un commandbutton, je voudrais remplir 25 contrôles
(label) nommés Jour1, Jour2,.... à l'aide de données qui se trouve sur une
feuille excel.
Les données se trouvent alignées sur la ligne 10 (commencent en D10) et
sautent une colonne à chaque fois (soit données en D10, F10, H10, I10,
.......) du fait de la fusion des cellules D10/E1 ; F10/G10 ; etc....

Comment faire pour éviter une saisie dans chaqu'un des 25 labels (comme
indiqué ci dessous) ?

Private Sub Jour1_Click ( )
Jour1.Caption = [D10]
End Sub

Private Sub Jour2_Click ( )
Jour2.Caption = [F10]
End Sub

Etc....

Merci beaucoup !!!!

7 réponses

Avatar
anonymousA
essaye de suivre les fils que tu inities. Ainsi tu verras que je t'ai
répondu hier en t'indiquant une méthode qui est reproductible à bien des
questions récurrentes sur "comment ne pas répéter des procédures
identiques pour un même type de controles".

A+

Bonjour,

Dés que je clique sur un commandbutton, je voudrais remplir 25 contrôles
(label) nommés Jour1, Jour2,.... à l'aide de données qui se trouve sur une
feuille excel.
Les données se trouvent alignées sur la ligne 10 (commencent en D10) et
sautent une colonne à chaque fois (soit données en D10, F10, H10, I10,
.......) du fait de la fusion des cellules D10/E1 ; F10/G10 ; etc....

Comment faire pour éviter une saisie dans chaqu'un des 25 labels (comme
indiqué ci dessous) ?

Private Sub Jour1_Click ( )
Jour1.Caption = [D10]
End Sub

Private Sub Jour2_Click ( )
Jour2.Caption = [F10]
End Sub

Etc....

Merci beaucoup !!!!




Avatar
Stéphan DuQuébec
Tes labels sont regroupés dans un UserForm ????

La commnade Load du UserForm attribuera les données voulues losrque ton
événement déclencahnt la macro sera rencontré.

Load

Bonjour,

Dés que je clique sur un commandbutton, je voudrais remplir 25 contrôles
(label) nommés Jour1, Jour2,.... à l'aide de données qui se trouve sur une
feuille excel.
Les données se trouvent alignées sur la ligne 10 (commencent en D10) et
sautent une colonne à chaque fois (soit données en D10, F10, H10, I10,
........) du fait de la fusion des cellules D10/E1 ; F10/G10 ; etc....

Comment faire pour éviter une saisie dans chaqu'un des 25 labels (comme
indiqué ci dessous) ?

Private Sub Jour1_Click ( )
Jour1.Caption = [D10]
End Sub

Private Sub Jour2_Click ( )
Jour2.Caption = [F10]
End Sub

Etc....

Merci beaucoup !!!!





Avatar
anonymousA
bon,

Imaginons que tes labels s'appellent label1, label2, et ainsi de suite
jusqu'à label6 . Ici c'est une exemple.
On va faire un module de classe (comme indiqué dans mon POST de réponse
à une de tes questions similaires d'hier). Le problème , ici c'est que
la classe MSForms.label n'a pas de propriété Name accessible par module
de classe. Donc , on va ruser et utiliser la propriété Accelerator qui
elle est accessible. Pour eviter que Accelerator soit visible en mode
normal du UF , on l'invalidera à l'issue du module de classe.

Dans l'exemple qui suit, on a déclaré les accelerators des labels dans
les propriétés du UF et les plages de cellules correspondantes dans des
Arrays.
label1 a recu l'accelerator "Z", label2 "y", label3 "x" et ainsi de
suite jusqu'à "2".Parallèlement, on a rangé dans l'Array arrlblcaption
les plages "D10", "F10" etc dans l'ordre dans lequel on veut voir
correspondre "z" avec Range("D10"),"y" avec range("F10"),etc...


Exemple:

Dans un module de classe nommé Classe1 écrire

Public WithEvents lbl As MSForms.Label

Private Sub lbl_Click()

arracclbl = Array("Z", "y", "x", "w", "v", "2")
With Sheets("Feuil3") 'ici l'exemple prend ses valeurs en Feuil3
arrlblcaption = Array(.Range("D10"), .Range("F10"), .Range("H10"),
.Range("J10"), .Range("L10"), .Range("N10"))
End With
With lbl
.Caption =
arrlblcaption(Application.WorksheetFunction.Match(.Accelerator,
arracclbl, 0) - 1)
.Accelerator = ""
End With

End Sub

Dans le module du UF, écrire

Dim labelsuf(1 To 6) As New Classe1

Private Sub UserForm_Initialize()

For i = 1 To 6
Set labelsuf(i).lbl = Me.Controls("label" & i)
Next

End Sub


Au final si tu respectes les déclarations, quand tu cliqueras sur label1
p.e, celui recevra la valeur de range("D10") puisque l'accelerator de
label1 est "z" et que Application.WorksheetFunction.Match(.Accelerator,
arracclbl, 0) - 1 aura envoyé 0 et que arrlblcaption (0) vaut range("D10").

A+


essaye de suivre les fils que tu inities. Ainsi tu verras que je t'ai
répondu hier en t'indiquant une méthode qui est reproductible à bien des
questions récurrentes sur "comment ne pas répéter des procédures
identiques pour un même type de controles".

A+


Bonjour,

Dés que je clique sur un commandbutton, je voudrais remplir 25 contrôles
(label) nommés Jour1, Jour2,.... à l'aide de données qui se trouve sur
une
feuille excel.
Les données se trouvent alignées sur la ligne 10 (commencent en D10) et
sautent une colonne à chaque fois (soit données en D10, F10, H10, I10,
.......) du fait de la fusion des cellules D10/E1 ; F10/G10 ; etc....

Comment faire pour éviter une saisie dans chaqu'un des 25 labels
(comme indiqué ci dessous) ?

Private Sub Jour1_Click ( )
Jour1.Caption = [D10]
End Sub

Private Sub Jour2_Click ( )
Jour2.Caption = [F10]
End Sub

Etc....

Merci beaucoup !!!!






Avatar
La Rota
Message à "AnonymousA"
Je n'en doute plus tu es très fort et tu ne va pas en douté non plus, je
suis très nul !

J'ai recu tes messages mais voilà.... En me relisant, je m'appercois que je
me suis très mal exprimé (j'me suis emmelé les pinceaux). Alors je
t'explique tout :

En fait, lorsque je change de données dans un combobox, je change de page
(soit un combobox comprenant les douzes mois et à chaque selection d'un mois
je change de page donc 12 pages)
Dans chacune de mes pages, les données à reporter dans mes labels se
trouvent sur le même numéro de ligne (10) et en sotant une colonne (soit
D10, F10, etc... comme tu l'as compris).
Je voudrait donc que les labels (au nombre de 50) s'alimentent
automatiquement à chaque changement de séléction du combobox (et donc
changement de pages).

Voilà en priant ton indulgence.... Je te souhaite une bonne soirée ou
journée selon....

A+





"anonymousA" a écrit dans le message de news:
434193b5$0$5403$
bon,

Imaginons que tes labels s'appellent label1, label2, et ainsi de suite
jusqu'à label6 . Ici c'est une exemple.
On va faire un module de classe (comme indiqué dans mon POST de réponse à
une de tes questions similaires d'hier). Le problème , ici c'est que la
classe MSForms.label n'a pas de propriété Name accessible par module de
classe. Donc , on va ruser et utiliser la propriété Accelerator qui elle
est accessible. Pour eviter que Accelerator soit visible en mode normal du
UF , on l'invalidera à l'issue du module de classe.

Dans l'exemple qui suit, on a déclaré les accelerators des labels dans les
propriétés du UF et les plages de cellules correspondantes dans des
Arrays.
label1 a recu l'accelerator "Z", label2 "y", label3 "x" et ainsi de suite
jusqu'à "2".Parallèlement, on a rangé dans l'Array arrlblcaption les
plages "D10", "F10" etc dans l'ordre dans lequel on veut voir correspondre
"z" avec Range("D10"),"y" avec range("F10"),etc...


Exemple:

Dans un module de classe nommé Classe1 écrire

Public WithEvents lbl As MSForms.Label

Private Sub lbl_Click()

arracclbl = Array("Z", "y", "x", "w", "v", "2")
With Sheets("Feuil3") 'ici l'exemple prend ses valeurs en Feuil3
arrlblcaption = Array(.Range("D10"), .Range("F10"), .Range("H10"),
.Range("J10"), .Range("L10"), .Range("N10"))
End With
With lbl
.Caption =
arrlblcaption(Application.WorksheetFunction.Match(.Accelerator, arracclbl,
0) - 1)
.Accelerator = ""
End With

End Sub

Dans le module du UF, écrire

Dim labelsuf(1 To 6) As New Classe1

Private Sub UserForm_Initialize()

For i = 1 To 6
Set labelsuf(i).lbl = Me.Controls("label" & i)
Next

End Sub


Au final si tu respectes les déclarations, quand tu cliqueras sur label1
p.e, celui recevra la valeur de range("D10") puisque l'accelerator de
label1 est "z" et que Application.WorksheetFunction.Match(.Accelerator,
arracclbl, 0) - 1 aura envoyé 0 et que arrlblcaption (0) vaut
range("D10").

A+


essaye de suivre les fils que tu inities. Ainsi tu verras que je t'ai
répondu hier en t'indiquant une méthode qui est reproductible à bien des
questions récurrentes sur "comment ne pas répéter des procédures
identiques pour un même type de controles".

A+


Bonjour,

Dés que je clique sur un commandbutton, je voudrais remplir 25 contrôles
(label) nommés Jour1, Jour2,.... à l'aide de données qui se trouve sur
une
feuille excel.
Les données se trouvent alignées sur la ligne 10 (commencent en D10) et
sautent une colonne à chaque fois (soit données en D10, F10, H10, I10,
.......) du fait de la fusion des cellules D10/E1 ; F10/G10 ; etc....

Comment faire pour éviter une saisie dans chaqu'un des 25 labels (comme
indiqué ci dessous) ?

Private Sub Jour1_Click ( )
Jour1.Caption = [D10]
End Sub

Private Sub Jour2_Click ( )
Jour2.Caption = [F10]
End Sub

Etc....

Merci beaucoup !!!!








Avatar
argyronet
Bonjour,
Si vos label sont sur une feuille de calcul comme je pense avoir compris,
procédez comme suit:
Sub cmdFillLabel()
Dim I As Integer
Dim intColumn As Integer

intColumn = 4' ColonneD
For I = 1 To 50
ActiveSheet.Shapes("Étiquette " & I).Select
Selection.Characters.Text = Cells(10, intColumn)
intColumn = intColumn + 1
Next
End Sub

Argy
--
Mes tutoriels sur http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment




Tes labels sont regroupés dans un UserForm ????

La commnade Load du UserForm attribuera les données voulues losrque ton
événement déclencahnt la macro sera rencontré.

Load

Bonjour,

Dés que je clique sur un commandbutton, je voudrais remplir 25 contrôles
(label) nommés Jour1, Jour2,.... à l'aide de données qui se trouve sur une
feuille excel.
Les données se trouvent alignées sur la ligne 10 (commencent en D10) et
sautent une colonne à chaque fois (soit données en D10, F10, H10, I10,
........) du fait de la fusion des cellules D10/E1 ; F10/G10 ; etc....

Comment faire pour éviter une saisie dans chaqu'un des 25 labels (comme
indiqué ci dessous) ?

Private Sub Jour1_Click ( )
Jour1.Caption = [D10]
End Sub

Private Sub Jour2_Click ( )
Jour2.Caption = [F10]
End Sub

Etc....

Merci beaucoup !!!!







Avatar
La Rota
Bonsoir
Non, mes label sont dans un userform.
Cela change t il quelque chose ?
Merci


"argyronet" a écrit dans le message de
news:
Bonjour,
Si vos label sont sur une feuille de calcul comme je pense avoir compris,
procédez comme suit:
Sub cmdFillLabel()
Dim I As Integer
Dim intColumn As Integer

intColumn = 4' ColonneD
For I = 1 To 50
ActiveSheet.Shapes("Étiquette " & I).Select
Selection.Characters.Text = Cells(10, intColumn)
intColumn = intColumn + 1
Next
End Sub

Argy
--
Mes tutoriels sur http://argyronet.developpez.com/

Ce qui donne son sens à la communication, c´est la réponse que l´on
obtient.
Si vous n´obtenez pas la réponse voulue, communiquez différemment




Tes labels sont regroupés dans un UserForm ????

La commnade Load du UserForm attribuera les données voulues losrque ton
événement déclencahnt la macro sera rencontré.

Load

Bonjour,

Dés que je clique sur un commandbutton, je voudrais remplir 25
contrôles
(label) nommés Jour1, Jour2,.... à l'aide de données qui se trouve sur
une
feuille excel.
Les données se trouvent alignées sur la ligne 10 (commencent en D10) et
sautent une colonne à chaque fois (soit données en D10, F10, H10, I10,
........) du fait de la fusion des cellules D10/E1 ; F10/G10 ; etc....

Comment faire pour éviter une saisie dans chaqu'un des 25 labels (comme
indiqué ci dessous) ?

Private Sub Jour1_Click ( )
Jour1.Caption = [D10]
End Sub

Private Sub Jour2_Click ( )
Jour2.Caption = [F10]
End Sub

Etc....

Merci beaucoup !!!!









Avatar
anonymousA
Bon, alors si je comprends bien ( je reformule pour être sur), il n'y a
pas d'histoire d'evenement Click sur les lables puisque tu parais
vouloir que les labels soient automatiquement mis à jour lorsqu'on
change de page.Ensuite , tu me dis changer de page donc, ca veut dire
qu'à l'instant où tu as cliqué sur ton combobox alors la page en
question est active (notes bien qu'on pourrait aussi alimenter les
caption des labels sans activer les feuilles , mais bon ).Je suppose
enfin que tes labels s'appellent de label1 à label50.

Dans ces consitions, si c'est bien ca , voici ce que je peux te proposer

A mettre dans le combobox_Change , après je suppose le Page.activate que
tu as initié

For I=1 to 50
Me.controls("Label" & I).captionÎlls(10,4 + 2*(I-1)).value
next

A+


Message à "AnonymousA"
Je n'en doute plus tu es très fort et tu ne va pas en douté non plus, je
suis très nul !

J'ai recu tes messages mais voilà.... En me relisant, je m'appercois que je
me suis très mal exprimé (j'me suis emmelé les pinceaux). Alors je
t'explique tout :

En fait, lorsque je change de données dans un combobox, je change de page
(soit un combobox comprenant les douzes mois et à chaque selection d'un mois
je change de page donc 12 pages)
Dans chacune de mes pages, les données à reporter dans mes labels se
trouvent sur le même numéro de ligne (10) et en sotant une colonne (soit
D10, F10, etc... comme tu l'as compris).
Je voudrait donc que les labels (au nombre de 50) s'alimentent
automatiquement à chaque changement de séléction du combobox (et donc
changement de pages).

Voilà en priant ton indulgence.... Je te souhaite une bonne soirée ou
journée selon....

A+





"anonymousA" a écrit dans le message de news:
434193b5$0$5403$

bon,

Imaginons que tes labels s'appellent label1, label2, et ainsi de suite
jusqu'à label6 . Ici c'est une exemple.
On va faire un module de classe (comme indiqué dans mon POST de réponse à
une de tes questions similaires d'hier). Le problème , ici c'est que la
classe MSForms.label n'a pas de propriété Name accessible par module de
classe. Donc , on va ruser et utiliser la propriété Accelerator qui elle
est accessible. Pour eviter que Accelerator soit visible en mode normal du
UF , on l'invalidera à l'issue du module de classe.

Dans l'exemple qui suit, on a déclaré les accelerators des labels dans les
propriétés du UF et les plages de cellules correspondantes dans des
Arrays.
label1 a recu l'accelerator "Z", label2 "y", label3 "x" et ainsi de suite
jusqu'à "2".Parallèlement, on a rangé dans l'Array arrlblcaption les
plages "D10", "F10" etc dans l'ordre dans lequel on veut voir correspondre
"z" avec Range("D10"),"y" avec range("F10"),etc...


Exemple:

Dans un module de classe nommé Classe1 écrire

Public WithEvents lbl As MSForms.Label

Private Sub lbl_Click()

arracclbl = Array("Z", "y", "x", "w", "v", "2")
With Sheets("Feuil3") 'ici l'exemple prend ses valeurs en Feuil3
arrlblcaption = Array(.Range("D10"), .Range("F10"), .Range("H10"),
.Range("J10"), .Range("L10"), .Range("N10"))
End With
With lbl
.Caption =
arrlblcaption(Application.WorksheetFunction.Match(.Accelerator, arracclbl,
0) - 1)
.Accelerator = ""
End With

End Sub

Dans le module du UF, écrire

Dim labelsuf(1 To 6) As New Classe1

Private Sub UserForm_Initialize()

For i = 1 To 6
Set labelsuf(i).lbl = Me.Controls("label" & i)
Next

End Sub


Au final si tu respectes les déclarations, quand tu cliqueras sur label1
p.e, celui recevra la valeur de range("D10") puisque l'accelerator de
label1 est "z" et que Application.WorksheetFunction.Match(.Accelerator,
arracclbl, 0) - 1 aura envoyé 0 et que arrlblcaption (0) vaut
range("D10").

A+



essaye de suivre les fils que tu inities. Ainsi tu verras que je t'ai
répondu hier en t'indiquant une méthode qui est reproductible à bien des
questions récurrentes sur "comment ne pas répéter des procédures
identiques pour un même type de controles".

A+



Bonjour,

Dés que je clique sur un commandbutton, je voudrais remplir 25 contrôles
(label) nommés Jour1, Jour2,.... à l'aide de données qui se trouve sur
une
feuille excel.
Les données se trouvent alignées sur la ligne 10 (commencent en D10) et
sautent une colonne à chaque fois (soit données en D10, F10, H10, I10,
.......) du fait de la fusion des cellules D10/E1 ; F10/G10 ; etc....

Comment faire pour éviter une saisie dans chaqu'un des 25 labels (comme
indiqué ci dessous) ?

Private Sub Jour1_Click ( )
Jour1.Caption = [D10]
End Sub

Private Sub Jour2_Click ( )
Jour2.Caption = [F10]
End Sub

Etc....

Merci beaucoup !!!!