Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/05/2007, 16h21   #1
Membre du Club
 
Avatar de nomelek
 
Inscription : octobre 2006
Messages : 97
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 97
Points : 66
Points : 66
Par défaut Modifier Caption dynamiquement

Bonjour à tous,

ça va faire un petit moment que je cherche entre les forums, tutos, et je ne trouve pas de solution.

J'aimerais savoir si il est possible de modifier le caption d'un contrôle. Simple, c'est sur. Mais le nom du contrôle est dans une variable. Je m'expplique :

exemples :
Code :
1
2
3
4
5
6
7
8
 
'Definition
Dim label As String
label = "lblCodeProduit"
'modification du caption
'Comment faire ??
'Normalement :
ThisDocument.lblCodeProduit.Caption = "NouvelleValeur"
Donc je suis un peu bloqué .. c'est peut être tout bête, mais à force de chercher partout je m'égare. J'avais pensé utiliser CallByName

En fait, c'est pour utiliser une boucle qui modifierait tout une suite de label, donc ça doit être "dynamique".

merci
nomelek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 16h30   #2
Membre Expert
 
Homme sébastien
Développeur informatique
Inscription : octobre 2006
Messages : 1 173
Détails du profil
Informations personnelles :
Nom : Homme sébastien
Âge : 29
Localisation : Argentine

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : octobre 2006
Messages : 1 173
Points : 1 372
Points : 1 372
Envoyer un message via Skype™ à Vld44
Citation:
Envoyé par nomelek
Bonjour à tous,

ça va faire un petit moment que je cherche entre les forums, tutos, et je ne trouve pas de solution.

J'aimerais savoir si il est possible de modifier le caption d'un contrôle. Simple, c'est sur. Mais le nom du contrôle est dans une variable. Je m'expplique :

exemples :
Code :
1
2
3
4
5
6
7
8
 
'Definition
Dim label As String
label = "lblCodeProduit"
'modification du caption
'Comment faire ??
'Normalement :
ThisDocument.lblCodeProduit.Caption = "NouvelleValeur"
Donc je suis un peu bloqué .. c'est peut être tout bête, mais à force de chercher partout je m'égare. J'avais pensé utiliser CallByName

En fait, c'est pour utiliser une boucle qui modifierait tout une suite de label, donc ça doit être "dynamique".

merci
Tu veux changer le nom du label, pas son caption c'est ça ?
Vld44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 16h41   #3
Membre du Club
 
Avatar de nomelek
 
Inscription : octobre 2006
Messages : 97
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 97
Points : 66
Points : 66
Si le caption.

J'ai pas été assez clair , je vais étoffer un peu.

En fait avant, j'ai une liste de variables.
je parcours cette liste de variable et si le nom de la variable est égale au name d'un label de mon form et bien on le remplit.

J'ai un problème au niveau du remplissage. Puisque je dois remplir le label.caption de la valeur courante dans ma boucle ...

Si j'ai été clair ... hum

Algo : (pas de balise code pour un algo ?)
Code :
1
2
3
4
5
6
For each i To tab[CODPRD,CODMACHIN,CODTRUC]
   If CODPRD existe dans mon FORM
      Form.CODPRD.Caption = "Qqchose"   ' c'est là qu'est le problème ...
   Else ...
  ...
NEXT i
nomelek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 16h46   #4
Membre Expert
 
Homme sébastien
Développeur informatique
Inscription : octobre 2006
Messages : 1 173
Détails du profil
Informations personnelles :
Nom : Homme sébastien
Âge : 29
Localisation : Argentine

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : octobre 2006
Messages : 1 173
Points : 1 372
Points : 1 372
Envoyer un message via Skype™ à Vld44
il faut que tu boucles sur les controles de ta form:

Code :
1
2
3
for each control in maform.controls
    if control.name = "" then Form.CODPRD.Caption = control.caption
next control
Avec on error resume next, je pense que ça devrait suffire
Vld44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 16h48   #5
Membre du Club
 
Avatar de nomelek
 
Inscription : octobre 2006
Messages : 97
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 97
Points : 66
Points : 66
Le nom de mon contrôle (ici : CODPRD par exemple) n'est stocké que dans une variable. On ne le connait que grâce à cette variable.

Donc le problème c'est l'appel :
Code :
1
2
3
4
5
6
7
8
9
 
Dim i As String
i="CODPRD"
 
Form. ... .Caption = ""
'et là je mets quoi pour modifier le contrôle CODPRD ?
'je ne peux pas le mettre en dur ce qui donnerait : Form.CODPRD.Caption
'je boucle sur une liste contenant tout mes contrôles, donc j'aimerais extraire
'le nom des contrôles de cette liste
***************************************

Edit :
Hum j'ai lu ta réponse, mais ce n'est pas le problème auquel je suis confronté
Ce que je veux faire, j'ai l'impression que ce n'est pas bien naturel.
nomelek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 16h50   #6
Membre Expert
 
Homme sébastien
Développeur informatique
Inscription : octobre 2006
Messages : 1 173
Détails du profil
Informations personnelles :
Nom : Homme sébastien
Âge : 29
Localisation : Argentine

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : octobre 2006
Messages : 1 173
Points : 1 372
Points : 1 372
Envoyer un message via Skype™ à Vld44
je viens de te donner la solution
Vld44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 16h56   #7
Membre du Club
 
Avatar de nomelek
 
Inscription : octobre 2006
Messages : 97
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 97
Points : 66
Points : 66
Arf ... j'explique mal ! ^^

Je peux pas faire justement
maform.CODPRD.Caption

Je sais plus comment expliquer ...

Disons que j'ai une liste de variable.
Si dans le form, on trouve un contrôle du même nom d'une variable on remplit le contrôle de cette variable
Et comme j'ai beaucoup de valeur, il faudait que ça soit dynamique.
Je ne peux pas me permettre d'écrire : maform.CODPRD.Caption
Donc je veux prendre le nom de la variable (sachant que mes contrôles ont des noms identiques) pour le glisser entre maform. xxxx . Caption

hum ... j'espère avoir été plus clair ! en tout cas, merci d'essayer de comprendre !
nomelek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 17h20   #8
Membre Expert
 
Homme sébastien
Développeur informatique
Inscription : octobre 2006
Messages : 1 173
Détails du profil
Informations personnelles :
Nom : Homme sébastien
Âge : 29
Localisation : Argentine

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : octobre 2006
Messages : 1 173
Points : 1 372
Points : 1 372
Envoyer un message via Skype™ à Vld44
sisi j'avais bien compris lol

Regarde :

Code :
1
2
3
4
5
6
7
8
9
dim strControlName as variant
 
For each strControlName in tab[CODPRD,CODMACHIN,CODTRUC]
    for each control in form.controls
        if control.name = strControlName then
            control.caption = strControlName 'pas tout à fait sûr de ce que tu veux faire là, mais bon l'idée y est
        end if
    next control
next strControlName
Vld44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 17h25   #9
Membre du Club
 
Avatar de nomelek
 
Inscription : octobre 2006
Messages : 97
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 97
Points : 66
Points : 66
je regarde et je tiens au courant ... ^^
nomelek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 17h36   #10
Membre du Club
 
Avatar de nomelek
 
Inscription : octobre 2006
Messages : 97
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 97
Points : 66
Points : 66
je vois ... c'est vrai que ça marchera ! Merci

Mais - il y a toujours un mais ! - en fait je n'ai pas de champ Form (je travail directement sur un Word) et ThisDocument.xx ou Me.xx ne propose pas Controls, j'ai testé avec FormFields ... mais ça ne va pas ...
nomelek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 17h51   #11
Membre Expert
 
Homme sébastien
Développeur informatique
Inscription : octobre 2006
Messages : 1 173
Détails du profil
Informations personnelles :
Nom : Homme sébastien
Âge : 29
Localisation : Argentine

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : octobre 2006
Messages : 1 173
Points : 1 372
Points : 1 372
Envoyer un message via Skype™ à Vld44
ah ben oui mais là faut aller voir le forum vba -.-
Vld44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2007, 01h07   #12
Expert Confirmé
 
Avatar de zazaraignée
 
Étudiant
Inscription : février 2004
Messages : 3 173
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 3 173
Points : 3 543
Points : 3 543
Bon, alors, je déplace tout ça!
__________________
  • Pour les nouveaux : Mode d'emploi et aide aux nouveaux
  • et impérativement les règles du forum. Histoire de garder une ambiance amicale.
  • Noubliez pas les balises de Code pour vos listings : bouton # de l'éditeur. Et n'oubliez pas non plus de bouton
  • Je ne réponds pas aux questions posées par MP.
zazaraignée est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2007, 09h25   #13
Membre du Club
 
Inscription : février 2007
Messages : 71
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : février 2007
Messages : 71
Points : 62
Points : 62
Une solution serait aussi de déclarer ta variable contenant le nom du label en tant que .. Label

Code :
1
2
3
4
5
6
Dim MyControl as Label
 
MyControl = "CODPRD"
 
'et du coup tu peux mettre
MyForm.MyControl.Caption = "un truc"
Tes controles se trouvent sur une UserForm ou dans les barres d'outils de word ?
Speedrman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2007, 10h08   #14
Membre du Club
 
Avatar de nomelek
 
Inscription : octobre 2006
Messages : 97
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 97
Points : 66
Points : 66
Merci pour l'aide

J'ai trouvé une solution qui me convient, pas celle de départ, mais une autre avec les signets (à défaut de mieux !)

Je la propose au cas ou.

Code :
1
2
3
4
5
6
 
            Dim lbl As Range
            'j'ai créé un signet sur mon label du même nom
            Set lbl = ActiveDocument.Bookmarks("CODPRD").Range
            lbl.Text = "la nouvelle valeur"
            ActiveDocument.Bookmarks.Add "DatEff", lbl
nomelek est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h00.


 
 
 
 
Partenaires

Hébergement Web