Fonction [Résolu]

Messages postés
85
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
20 mars 2012
- - Dernière réponse : cs_hustler
Messages postés
85
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
20 mars 2012
- 30 oct. 2007 à 22:44
Bonjour a tous

quelqu'un pourrait m'expliquer pourquoi ma fonction ne marche pas

- appel de la fonction

CreatLigne "LblClef", i 

- Fonction

Function CreatLigne(LblDyna, LblNum)
    Load LblDyna(LblNum)
    LblDyna(LblNum).Top = LblNom(LblNum - 1).Top + LblNom(LblNum).Height
    LblDyna(LblNum).Visible = True
End Function

merci d'avance pour votre aide
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
3
Merci
Déjà :
1) Ce n'est pas là une fonction, mais une routine. Une fonction retourne une valeur, dans le sype qui est défini pour elle..;


2) L'emploi de la méthode Load implique l'existence d'un groupe de contrôles indexés. A-t-il été créé ?

3) "LblClef" est une chaîne de caractères et non l'identificateur d'un contrôle !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 114 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jmfmarques
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
60
3
Merci
Salut
Oui, comme le dit jmfmarques, pour pouvoir charger une nouvelle instance d'un objet, il faut qu'une première version existe.
Par exemple, si ta variable LblDyna est un Label (boule de cristal 2.0), il doit déjà exister sur ta forme un composant de type Label possedant l'index 0, même s'il est "Visible = False" pour ne pas géner.

C'est pour cela qu'il est important de bien dimensionner les varaibles :
   Function CreatLigne(LblDyna As Object, LblNum As Integer)
Si le composant que tu dois cloner est toujours un Label, il est préférable de remplacer "Object" par "Label"
et quand tu appelle la fonction de chargement d'un nouveau composant (composant d'index 3) :
   CreatLigne monLabelOriginal, 3

Je pense aussi qu'il faudra remplacer LblNom par LblDyna si tu veux que les nouveaux labels se placent sous le précédent.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 114 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
60
3
Merci
Salut
"deux valeurs dans un compteur" Je ne comprends pas ce que tu veux dire.
Lancement de "Boule-de-cristal 2.0" ...
Veux-tu dire que, au lieu de fournir le chiffre correspondant à l'index (2ème paramètre), tu voudrais fournir un objet dont il faudrait trouver l'index à l'intérieur de la fonction ?
Oui, tout est possible, mais il faut que la définition des paramètres de ta fonction coïncide avec le type du paramètre que tu fournis.
Dans ton cas, si Label(1) est le 1er paramètre et Date(2) le second :
   Function CreatLigne(LblDyna As Object, LblNumObjet As Object)
et dans les lignes de cette fonction, il faudra retrouver le numéro d'index du second paramètre avec 
   iIndex = LblNumObjet.Index

PS : "date(2)" est, je le suppose, un objet de ton application : Attention à ne jamais utiliser de mot clé comme variable, c'est le bug assuré un jour ou l'autre.
Les règles de base de programmation veulent que, quand tu définis un objet ou une variable, tu utilises un format dans lequel tu seras capable de retrouver le type d'objet juste en lisant son nom, exemple :
   lblAffichage est un Label
   txtSaisie est une TextBox
   sDonnée est une chaine de caractère (String)
   lCompteur est un entier au format Long
   aListe est un tableau (Array) ...
De cette manière, tu es sûr de ne jamais tomber sur des mots clé (comme Date) et ta programmation sera beaucoup (voire très beaucoup) plus claire.

Pour en finir avec les conseils, je te conseille de rendre obligatoire la déclaration de toutes les variables (Options).
Lors de la création d'une forme ou d'un module, cela va ajouter cette ligne en tête :
   Option Explicit
que tu vas devoir ajouter à la main dans les formes et modules existant.
Au début, on trouve ça chiant de devoir dimensionner chaque variable, mais à la longue, ça évite les erreurs et ça permet de mieux comprendre l'étendue d'application des variables (Private, Public ou Dim)

Ah bah non, j'ai encore un conseil, lol :
Au lancement de ton application dans l'IDE, lance-la avec Ctrl-F5 au lieu de F5 : ça obligera l'IDE à vérifier toute la syntaxe avant de démarrer. Si tu ne le fais pas, tu découvriras les erreur uniquement en passant sur les lignes = gain de temps.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 114 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
85
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
20 mars 2012
0
Merci
Merci beaucoup pour toutes ces infos

j'avais bien créé l'objet de base mais je ne savais pas qu'il fallait imperativement dimensionner les variables.

est ce qu'il est possible d'avoir deux valeures dans un compteur
genre
label(1)date(2)

en sachant que le deux correspond a l'index
Commenter la réponse de cs_hustler
Messages postés
85
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
20 mars 2012
0
Merci
et ben merci beaucoup si avec tout ça je m'en sort pas

en tout cas merci beaucoup pour votre aide
Commenter la réponse de cs_hustler