Petit problème de vocabulaire en vb

  • Initiateur de la discussion nicole
  • Date de début
N

nicole

Guest
Bonjour amis du forum,

Bien qu'il ne fasse pas très beau, je commence avec beaucoup de peps ce Week-end et j'espère que c'est le cas pour vous aussi.

En ce qui concerne mon post, j'ai besoin de comprendre le sens de quelques lignes de code.

1) For each ct in userform.controls
for i=1 to 9
if ct. name="TextB"&i then
ct.Enabled=False
Exit for
end if
next.

2) que signifient les macros commencant par "With me" et finissant par "end with"?


3) A quoi sert "ini"?

4) que signifie associé à un classeur et à une page: End(xlUp).Row?

5) tbXSetup?

6) Private sub ini
dim ctrl as control
dim col as string

for each ctrl in Me.controls
if typeOfCTRL Is MSforms.TextBox then
col=Right (CTRL.Name, 1)
CTRL.value= Worksheets("").Range(Col&Lig)
End If
Next CTRL
End sub

7) Private Sub TbxSetUp
Dim the lock As Boolean
Dim ctrl as control
select case mode
case 1: TheLock= True
case 2: TheLock= False
case 1: TheLock= False:recording
end select

for each ctrl in Me.controls
If typeOfctrl is Msforms.textBox then
ctrl.locked=TheLock
end if
next ctrl
end sub


voila je sais que j'ai été très longue et je m'en excuse. Seulement j'au du mal à comprendre ces lignes et donc à les transposer dans un autre cas.

Merci d'avance et très bon week-end.

Nicole
 
S

Sebb

Guest
Salut, je vais essayer de te répondre du mieux possible

2)With permet de simplifier le code pour appliquer une série de commande avec une même sélection
With me correspond à l'UserForm actuel et end with met fin à cette sélection.

3) ini ? c'est le nom de ton programme, il extrait le premier caractère du nom du contrôle et affecte à ce contrôle la valeur contenue dans la case ayant la même lettre
ex: si le contrôle s'appelle Rcontrole, il ira chercher la valeur dans la cellule "Rquelquechose"

4) End(xlUp).Row permet de partir du bas et de remonter jusqu'à ce qu'on trouve une cellule non vide, cela renvoit le numéro de la ligne en question

5)pour l'intérêt de TbxSetup euhhh .... ca sert à vérouiller ou non un contrôle textbox, mais à mon avis tu dois avoir un autre programme qui choisit ou pas de vérouiller dans certaines circonstances....

bref ! voilà en gros les explications
a+
 
R

Robert

Guest
Voici peut être une petite lueur vers la connaissance...

La première chose à faire est de bien indenté le code. Ceci facilite la lecture
1)
For each ct in userform.controls
Ici on regarde tous les controls contenus dans la userform

for i=1 to 9
boucle qui regarde le nom de ces controls

if ct. name="TextB"&i then
si le nom du controle est TextB1, TextB2,....TextB9 alors
ct.Enabled=False
On enable le controle ce qui fait que l'on peut le selectionner...
Exit for
et on quite la boucle for i=1 to 9
end if
fin du si....
next.
fin du for i = 1 to 9


2) que signifient les macros commencant par "With me" et finissant par "end with"?
With xxxx permet de pointer sur un objet, ceci permet une execution plus rapide ainsi qu'une écriture plus simple.....

exemple :
With v2.Interior
.Pattern = iPos + 1 'xlPatternCrissCross
.PatternColorIndex = 3 'ZONE A
End With


on peut egalement écrie
v2.Interior.Pattern = iPos + 1 'xlPatternCrissCross
v2.Interior.PatternColorIndex = 3 'ZONE A

Dans le 1er cas on pointe directement sur v2.Interior et on sait que les 2 lignes suivantes concernent v2.Interior
dans le 2ème cas, il faut que l'interpreteur aille pointer 2 fois sur v2.Interior...

3) A quoi sert "ini"?
Voir la réponse dans le point 6. C'est une fonction qui est appelée
on peut soit écrire
Call ini
soit écrire directement
ini

Je n'ai pas le temps maintenant pour le reste des questions. mais peut être que quelqu'un peu prendre le relais......

@+
 
R

Robert

Guest
Nicole,
Voici ce qui concerne les questions 6 et 7..... (fin)
6)
Private sub ini
dim ctrl as control
dim col as string

for each ctrl in Me.controls
if typeOfCTRL Is MSforms.TextBox then
col=Right (CTRL.Name, 1)
CTRL.value= Worksheets("").Range(Col&Lig)
End If
Next CTRL
End sub
Cette routine sert à initialiser le Label des ctrl TextBox en fonction du début de son nom... on prend la première lettre de son nom, et on assigne la valeur du ctrl avec le contenu des celulles 1ereLettre&Lig (qui est initialisé au préalable....)

7)
Private Sub TbxSetUp
Dim the lock As Boolean
Dim ctrl as control
select case mode
case 1: TheLock= True
case 2: TheLock= False
case 1: TheLock= False:recording
Ce dernier case ne passera jamais, il ne sert a rien !!!!!!!!

end select

for each ctrl in Me.controls
If typeOfctrl is Msforms.textBox then
ctrl.locked=TheLock
end if
next ctrl
end sub

Cette routine sert à Bloquer ou non les ctrl TextBox.
le mode doit être initialisé avant l'appel de cette routine...

@+
 
@

@+Thierry

Guest
Bonjour Nicole, Robert, Sebb

Non là ce n'est vraiment pas très gentil car tu fais chercher par des contributeurs des explications sur une démo que je viens à peine de te fournir... Lien supprimé

Non seulement tu fais perdre leur temps à Sebb et Robert qui n'ont probablement pas vu cette démo et tu demandes de décortiquer des portions de codes sans faire référence au fil et à la démo.

Non ce n'est pas comme ceci qu'il faut procéder, si quelqu'un te produit une solution que tu ne comprends pas, il faut rester à plus forte raison dans le même fil, et si vraiment tu ne peux pas alors au moins faire référence à cette solution, car on a déjà des difficulté à répondre à toutes les questions, si en plus on fait des Rébus !!!

Alors en Bref :

Pour 1) :
c'est une boucle, qui va scanner de 1 à 9 tous les Control en Concaténant leur nom TextB & i, (Donc "TextB1", 'TextB2"... Etc) si le nom match, alors le control respecatif sera desabled.


Pour 2) :
"With" et "End With" permet de faire une instance unique à un objet pendant toute une série d'action. Ce qui optimise énormément un code.


Pour 3) :
"Ini" est une macro que j'appelle à plusieurs reprise dans ma démo. Au lieu de ré-écrire la même macro dans chaque évènement je l'appelle, c'est tout. Ce genre de question ne peut avoir de réponse sans voir ou connaître mon fichier.


Pour 4) :
L = WS.Range("A65536").End(xlUp).Row
, signifie que je veux initialiser "L" avec le numéro de la première ligne non-vide rencontrée en partant de la dernière Ligne d'une feuille Excel (65536).


Pour 5) :
tbXSetup Idem que pour 3)


Pour 6) :
D'abord je n'ai jamais rédigé ce code tel quel, le code était celui-ci
Private Sub Ini()
Dim CTRL As Control
Dim Col As String
For Each CTRL In Me.Controls
If TypeOf CTRL Is MSforms.TextBox Then
Col = Right(CTRL.Name, 1)
CTRL.Value = WS.Range(Col & Lig)
End If
Next CTRL
End Sub

Car => CTRL.value= Worksheets("").Range(Col&Lig)
Ne risque pas de fonctionner...

Ensuite il faut voir le contexte entier, Lig (Numéro de Ligne) est une Varible Public initialisée ailleurs... Ensuite Col (Lettre de la Colonne) est initilisé avec la Lettre située en dernier dans le Nom des TextBox (TxbG par exemple), donc çà me permet d'incrémenter des données dans les TextBox assez facilement puisque j'ai le numéro de Ligne et de Colonne...


Pour 7) :
Idem que pour 6) sans voir le contexte personne ne peut te répondre. J'utilise une Boolean qui se nomme "TheLock" et je n'ai certainement pas rédigé :
Dim the lock As Boolean (<<< Je me demande si tu sais qu'on peut Copié/Collé...)

Enfin donc cette Boolean est subordonnée à une Variable Public "Mode"de type Byte qui peut avoir la Valeur de 1 à 3 en fonction des trois bouton cliqués...

Et donc selon le cas (Select Case) de "Mode", "TheLock" est initialisé soit à Vrai soit à Faux, ensuite la Boucle dessous Initialise Toutes les TextBoxs pour leur Propriété respectives "Locked" à Vrai ou Faux...

Voilà cette fois-ci je pense qu'entre les explications partielles qu'ont pu donner nos deux amis et celles-ci tu pourras passer un bon Week-End VBAesque ...

Bon Après Midi
@+Thierry
 
@

@+Thierry

Guest
Re Bonjour Robert, Nicole, Sebb, le Forum

Ah oui tiens Robert, je n'avais pas remarqué que Nicole avait aussi "transformer" cette macro là :

Private Sub TbXSetUp()
Dim TheLock As Boolean
Dim CTRL As Control

Select Case Mode
Case 1: TheLock = True
Case 2: TheLock = False
Case 3: TheLock = False: Recording
End Select

For Each CTRL In Me.Controls
If TypeOf CTRL Is MSforms.TextBox Then
CTRL.Locked = TheLock
End If
Next CTRL
End Sub
=> Démo d'origine pour ceux/celles qui seraient interessé(e)s Lien supprimé

Car comme le dit justement Robert
case 1: TheLock= True
case 2: TheLock= False
case 1: TheLock= False:recording
Va poser des soucis sérieux !! ... deux fois le même cas ...

D'ailleurs en voyant ce "case" tout en minuscule ça indique que ce code n'a pas été transposé directement de VBE... Il est évident que si tu recopies les Macro en les écrivant toi même au lieu de les Copier/Coller tu multiplies les risques d'erreurs Nicole...

Je te conseille un raccourci clavier qui va peut être "révolutionner ta vie" :

111) Sélection du Texte à Copier
(où qu'il soit, "Excel, VBA, Internet Explorer, Word, NotePad, etc etc..)

Touches [CTRL] et [C] simultanément enfoncées

222) Sélection de l'Emplacement où tu doit Coller
(où que cel soit, "Excel, VBA, Internet Explorer, Word, NotePad, etc etc..)

Touches [CTRL] et [V] simultanément enfoncées


Bon Week End à tous et Toutes
@+Thierry
 

Discussions similaires

Réponses
29
Affichages
920

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35