Boucle sur Labels

Hulk

XLDnaute Barbatruc
Bonjour tout le monde :)

Pourquoi le code que j'ai écris ne fonctionne pas correctement ?

Il remplit bien tous les Labels, mais avec la dernière valeur uniquement !

Je sais que je pourrais utiliser une ListBox ou une ListView, mais je tiens à y faire (si possible) avec des Labels…

Merci pour votre aide !
Code:
Private Sub UserForm_Initialize()

    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    
    For i = 1 To 24
        For j = 3 To 8
            For k = 2 To 5
                Controls("Label" & i).Caption = Cells(j, k).Value
            Next k
        Next j
    Next i

End Sub
 

Pièces jointes

  • TestLabels.xls
    46 KB · Affichages: 141
Dernière édition:

laetitia90

XLDnaute Barbatruc
Re : Boucle sur Labels

re, tous

YANN je me suis contentée de repondre a la question pose par l' ami Hulk
pour fhoest j'ai donner un exemple trés trés basique pour voir l'avantage des modules de classes sans passer par la création dynamique de controls qui pour moi représente une autre "étape" de compréhention.a mon humble avis!!!
ceci dit tes modules sont trés bien construit;)
passe un bon WE a+ leti
 

fhoest

XLDnaute Accro
Re : Boucle sur Labels

Bonsoir,tous
tout d'abord merci pour l'intérêt que vous portez a ma question suite à un fil qui n'est pas ouvert par moi même (juste pour avis ,dois je ouvrir un autre fil pour le sujet) ou vous préférer rester sur celui ci.
en tous las cas je suis scotché de la puissance d'un module de classe.
je ne comprends toujours pas ou sont caché les formes pas dessiner dans le userform (de Yann-56)première question?
si j'ai bien compris:
on declare en public avec un évenement "nom" déclarer en forms.qqch
et ensuite on applique a ce nom un evenement tel le click ou enter ou doubleclick etc...
suivi d'un code qui fait une action qui sera valable pour toutes les formes = a ce nom dans le userform que l'on a attribué au départ dans la déclaration public
c'est bien ça?
encore merci a vous deux pour votre aide
cordialement
 

YANN-56

XLDnaute Barbatruc
Re : Boucle sur Labels

Bonsoir fhoest, aux participants et à ceux qui passeront par ici.

En premier lieu: N'ouvre surtout pas un autre fil!

Pour deux raisons principales:

1) Il y a peut-être quelques personnes intéressées par l'évolution de nos dialogues.

2) Pour bien répondre à une question; il est aussi important d'en en connaître
le sujet initial que de savoir manipuler VBA… Donc d'en avoir l'historique.

Je suis désolé, je n'ai pas retrouvé ma plaidoirie, pour un copain, sur les modules de classe.

Je vais donc reconstruire un exemple, ou commenter dans le détail un précédent.
(Tu verras; ce n'est pas trop complexe)

J'espère ce soir, si mon entourage m'en laisse le temps… Sinon demain.

A plus tard.

Yann
 

YANN-56

XLDnaute Barbatruc
Re : Boucle sur Labels

Re t'as vu l'heure?

Mais par ce temps, on était si bien en terrasse. :p

Voici mon dernier exemple avec commentaires.

J'espère qu'il pourra répondre à tes dernières questions.

Amicalement.

Yann
 

Pièces jointes

  • CLASSE_4.xls
    42.5 KB · Affichages: 111

Habitude

XLDnaute Accro
Re : Boucle sur Labels

Un module de classe est en fait un objet.

Bref tout les bibliotèque que vous utiliser en sont.

Un objet peut pratiquement tout contenir. Des vecteurs, des variables, des fonctions et même d'autres objet.

Pour exécuter une fonction de l'objet, on utilise le "."
objet.fonction

Un bouton est un objet.

Dans l'exemple #7


'Déclaration d'un vecteur d'objet "suite_A_CLIC"
Private YVES(99) As New SUITE_A_CLIC

le new est important. Sinon les 100 occurences du vecteur pointeront sur le même objet


Dans l'objet le code déclare une variable de type objet

Public WithEvents PASCAL As MSForms.CommandButton

C'est un Boutton de commande

Et aussi une fonction associé au bouton


L'objet dans le code permet d'accéder a d'autres objets PUBLIC

comme ici il vide la listeview1

UserForm1.ListView1.ListItems.Clear


Il est a noté que si userform1 avait été déclarer avec un new, sont appelation ici ne fonctionnerait pas.


Je join un petit d'exemple de programmation orienté objet que j'ai déja mis sur un autre post.
 

Pièces jointes

  • PROJETOrienteObjet.xls
    47.5 KB · Affichages: 106

MJ13

XLDnaute Barbatruc
Re : Boucle sur Labels

Bonjour à tous

Sinon en 2008, j'avais fait un exemple avec l'aide d'un code de MichelXLD que je salue, pour essayer de comprendre les modules de classe.

C'est vrai que c'est très performant mais assez dur à comprendre (enfin pour moi :p).

DAns l'exemple joint, vous pouvez supprimer ou ajouter des lignes.
 

Pièces jointes

  • USFClass modif MJ.zip
    30.7 KB · Affichages: 56
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : Boucle sur Labels

Bonjour Habitude, MJ13, aux participants et à ceux qui passeront par ici.

Bonjour fhoest: Je pense que tu vas avoir de quoi potasser! :) :) :)

De mon coté, j'ai constaté que j'en ai autant appris en voulant aider qu'en faisant
des recherches ou poser des questions. (Je l'ai déjà dit, mais j'aime à le répéter)

Merci Habitude pour le complément d'explications concernant les modules de classe.

Je n'ai quasiment jamais utilisé les "Functions", sauf par "Copier-coller" avec des œillères.
Il va bien falloir que j'apprenne un jour!!! Je n'ai toujours pas compris comment cela fonctionne.

Si tu pouvais me dire l'avantage de celles-ci (Cf. ton exemple) par rapport à ce que
j'ai tenté d'expliquer dans mes pièces jointes ci-dessus.

MJ13, Au regard de ta compétence que j'ai déjà constatée,
je suis surpris de t'entendre dire que cela est "Dur à comprendre"
(Je répondrai avec plaisir aux questions que tu voudras me poser)

C'est comme en mathématique: Il faut d'abord se dire que c'est simple, et tout va mieux.
D'ailleurs, la création dynamique ainsi que les modules de classe sont des outils de "fainéants"
Les meilleurs en Math. le sont, car obstinés par la simplicité!!! Itou en V.B.A.

La pédagogie n'étant pas ma qualité première, je serais très attentif à vos remarques
sur les explications que j'ai tenté de donner dans mon dernier exemple pour fhoest.

Le but final étant de l'aider à bien comprendre ces superbes outils que sont
les modules de classe.

Amicalement, et au plaisir.

Yann

P.S. A MJ13
J'ai déjà utilisé la position curseur (X,Y) dans mes bidouilles.
Mais j'ai eu de mauvaises surprises en passant avec un écran en 16/9
Peut-être sauras-tu m'expliquer…
Par ailleurs, ce que tu fais sur les TextBoxes est bigrement sympa.
Cela est-il possible sur les Items d'une ListView???
Ce serait le pied pour les presbytes comme moi!
 
Dernière édition:

Habitude

XLDnaute Accro
Re : Boucle sur Labels

J'ajouterai qu'un objet ne doit pas appeler dans son code un userform ou une feuille.
Ca devrait lui être passé en paramètre. Ce qui permet d'utiliser l'objet sur différente form et ou feuille.
Même chose pour les variables Public dans un module.

Prenons l'objet listview de microsoft.
On appel ses fonctions .Item
.ListItems
.ListSubItems

L'objet ses compose de plusieurs classe. Si userform1 ou feuil1 était déclarer dans son code, pour l'utiliser on serait obliger de le mettre dans une form nommé "Userform1"
De passé "Me" en paramètre est plus approprié.

De même que l'appelation d'un userform ne devrait pas se faire sur lui même.
La déclaration devrait se faire sur un nouvel objet.
Dim p as new UserForm1
p.show
etc..
C'est pourquoi dans le code de fermeture du userform1
On ne met pas userform1.hide mais bien me.hide
car userform1 n'existe plus. Le form s'appel "p"
 

MJ13

XLDnaute Barbatruc
Re : Boucle sur Labels

Re à tous

MJ13, Au regard de ta compétence que j'ai déjà constatée,
je suis surpris de t'entendre dire que cela est "Dur à comprendre"
(Je répondrai avec plaisir aux questions que tu voudras me poser)

Yann: Voila ici, tu as un cas d'école. Regarde comment Habitude parle des modules de classes? On voit qu'il s'y connaît ( je vais essayer de suivre ses conseils de près ;) mais c'est pas gagné).

C'est la différence entre un informaticien et moi qui bidouille et qui ai appris le basic sur Vic 20.

Donc pour moi, c'est assez complexe de partir sur ce que je veux faire en module de classe et de le faire dans les règles de l'art.

Par ailleurs, ce que tu fais sur les TextBoxes est bigrement sympa.
Cela est-il possible sur les Items d'une ListView???
Ce serait le pied pour les presbytes comme moi!

Je ne sais par car personnellemnet, je ne fais jamais de listview (car j'en ai jamais eu besoin ou je fais en sorte de m'en passer).
 

YANN-56

XLDnaute Barbatruc
Re : Boucle sur Labels

Bonsoir à fhoest, Habitude, MJ13, aux participants et à ceux qui passeront par ici.

J'apprécie beaucoup la peine que se donne Habitude dans son cours sur les objets.
Je pige un peu mieux mon utilisation des modules de classe.

(Un peu comme celui qui faisait de la prose sans le savoir)

De mon coté, je n'ai rien d'un informaticien,
mais plutôt d'un sexagénaire qui fait mumuse sans grand savoir.

De plus avec une fâcheuse manie de toujours commencer la lecture d'un magazine par la fin.

Ne sachant toujours pas si l'exemple que j'ai donné à fhoest est à oublier,
ni le bien fondé de privilégier l'utilisation des Functions; Je reste sur ma faim

Quant aux "ListView" la plaidoirie serait trop longue, et l'énumération des avantages fastidieuse!

Pour ce qui est de "X, Y" je vais demander à ma souris de s'asseoir sur la table de jardin,
puis sur celle de la cuisine, pour voir si les coordonnées changent de façon insidieuse.
(En tentant d'en comprendre les avantages, comme d'habitude)

Amicalement, avec un grand sourire :) et mes vœux de bonne fin de fin de semaine.

Yann
 
G

Guest

Guest
Re : Boucle sur Labels

Bonjour à tous,

Habitude à dit:
J'ajouterai qu'un objet ne doit pas appeler dans son code un userform ou une feuille.
Ca devrait lui être passé en paramètre.

Pour satisfaire à ces conditions, ta classe "mesDonnees" pourrait contenir:

Code:
Public FeuilleSource As Worksheet
Ou si l'on veut gérer les évènements de feuille et changements de valeurs

Code:
Public withEvents FeuilleSource As WorkSheet

Pour remplacer la méthode

Code:
Function Add(indice)
    For i = 0 To nbMatiere - 1
        If matiere(i).GetMatiere =[COLOR=red][B] Feuil1[/B][/COLOR].Cells(indice, 2) Then Exit For
    Next i
 
    If i = nbMatiere Then
        matiere(nbMatiere).Add indice, Feuil1.Cells(indice, 2)
        nbMatiere = nbMatiere + 1
    Else
        matiere(i).Modif indice
    End If
End Function

Par
Code:
Function Add(indice)
    For i = 0 To nbMatiere - 1
        If matiere(i).GetMatiere = [COLOR=red][B]FeuilleSource.Cells[/B][/COLOR](indice, 2) Then Exit For
    Next i
 
    If i = nbMatiere Then
        matiere(nbMatiere).Add indice, [B][COLOR=#ff0000]FeuilleSource.Cells[/COLOR][/B](indice, 2)
        nbMatiere = nbMatiere + 1
    Else
        matiere(i).Modif indice
    End If
End Function

Et dans le module du UserForm:

Code:
Private Sub UserForm_Initialize()
    d.Vider
   [COLOR=red][B]Set d.FeuilleSource = Feuil1[/B][/COLOR]
    For i = 3 To Feuil1.Range("B65536").End(xlUp).Row
        d.Add i
    Next i
 
    For j = 1 To d.Count
        ComboBox1.AddItem d.Item(j).GetMatiere
    Next j
End Sub

A+
 
Dernière modification par un modérateur:

YANN-56

XLDnaute Barbatruc
Re : Boucle sur Labels

Bonsoir Hasco, Bonsoir le groupe.

Je vous laisse entre "Pros"

Respecter les petits vous grandisse et les aide à grandir. (Me dixit)

Je m'éclipse en catimini (0 gramme de Co2), Les banderilles stockées sur la galerie. :eek:

A fhoest: Je reste à ta disposition avec ma pelle.
Regarde quand-même du coté des pelleteuses; il y a certainement à y apprendre.
(Certainement pas sur la politesse, mais surement sur le fond)

Plein de bonnes choses à tous pour la semaine qui vient.

Yann
 

Habitude

XLDnaute Accro
Re : Boucle sur Labels

Pour Hasco

A l'appelation du Userform on passe la feuille en paramètre en utilisant Me
La norme serait de la nommé Parent

A l'appelation de l'objet classe on passe le userform en paramètre en utilisant Me.
Aussi nommé parent.

Pour accéder au userform on utilise alors me.parent
Pour accéder à la feuille on utilise alors me.parent.parent

Les variables doivent être private.

Parent sont des fonctions.
 
Dernière édition:

fhoest

XLDnaute Accro
Re : Boucle sur Labels

Bonjour a tous,
ouahh!!, un jour nde répis et voila que ce fil s'enflamme,
j'ai regarder ta proposition Yann-56 j'arrive a comprendre le code mais je n'arrive pas a comprendre comment tu fais apparaitre les objets sur le usf (fais tu une action primaire dans la feuille excecl pour definir la zone a affiché sous forme de bouton etc... (difficile pour moi)
@Habitude, trés sympa ta proposition mais tout de même a mon niveau complexe,
le fait de renvoyer et d'aller chercher certaines function et impressionnant c'est une belle gymnastique des neuronnes en tous cas c'est ce qui me concerne,
et a tous les autres merci pour ces exemples,
j'ai de quoi faire ,mais je vais bientot partir en congé donc je reviendrai plus tard sur ce fil et vous contacterais par MP pour relancé le fil lorsque j'aurais pour ma part plus de temps a concacré a apprendre ces magnifique modules de classes
Un grand merci a tous et a plus tard.
Ps : courage a ceux qui bosse et bonne vacances ou retraite pour les autres
 

tototiti2008

XLDnaute Barbatruc
Re : Boucle sur Labels

Bonjour à tous,

Chapeau pour les manipulateurs de classe, je ne m'y suis toujours pas mis sérieusement...

Un objet peut pratiquement tout contenir. Des vecteurs, des variables, des fonctions et même d'autres objet.

C'est quoi des vecteurs ?
En VB, les variables ne s'appellent pas Propriétés ?
En VB, les fonctions ne s'appellent pas Méthodes ?

Nul doute qu'Habitude sait de quoi il parle, c'est juste pour essayer de comprendre...
 

Discussions similaires

Réponses
4
Affichages
332
Réponses
29
Affichages
1 K

Statistiques des forums

Discussions
313 770
Messages
2 102 235
Membres
108 181
dernier inscrit
Chr1sD