De rien, ;-))) C'était avec grand plaisir, mais j'aimerais bien
comprendre ce qui se passe avec Thunderbird 1.0 fr ;-((Bizarre cette censure de la part de ton lecteur de news ! texte trop
long ?
Impec, j'ai tout pris la totalité du message sur ton site.En espérant que tout cela te sera utile.
Tu penses !!! Il y a un moment que je détourne mon attention dès que
cela parle de module de classe, bien que je sente que c'est vachement
bien.
Là, c'est l'occasion de rentrer dedans sur un exemple qui me concerne.
Je ne vais pas manquer l'occasion. Je vais diggérer ta leçon. 8-)
Au risque de me répéter, merci beaucoup...
Bonne journée.
à+twinleyVersion précédente encore tronquée ;-((
Par sécurité, j'ai mis une copie du message complet à cette adresse :
http://www.gaboly.com/MPFE/Classe1.html
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
Ceci crée une nouvelle classe (une sorte de catégorie), capable de
réagir aux événements (Events en anglais).
NB - "Option Explicit" n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des vaiables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quans survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
De rien, ;-))) C'était avec grand plaisir, mais j'aimerais bien
comprendre ce qui se passe avec Thunderbird 1.0 fr ;-((
Bizarre cette censure de la part de ton lecteur de news ! texte trop
long ?
Impec, j'ai tout pris la totalité du message sur ton site.
En espérant que tout cela te sera utile.
Tu penses !!! Il y a un moment que je détourne mon attention dès que
cela parle de module de classe, bien que je sente que c'est vachement
bien.
Là, c'est l'occasion de rentrer dedans sur un exemple qui me concerne.
Je ne vais pas manquer l'occasion. Je vais diggérer ta leçon. 8-)
Au risque de me répéter, merci beaucoup...
Bonne journée.
à+twinley
Version précédente encore tronquée ;-((
Par sécurité, j'ai mis une copie du message complet à cette adresse :
http://www.gaboly.com/MPFE/Classe1.html
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
Ceci crée une nouvelle classe (une sorte de catégorie), capable de
réagir aux événements (Events en anglais).
NB - "Option Explicit" n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des vaiables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quans survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
De rien, ;-))) C'était avec grand plaisir, mais j'aimerais bien
comprendre ce qui se passe avec Thunderbird 1.0 fr ;-((Bizarre cette censure de la part de ton lecteur de news ! texte trop
long ?
Impec, j'ai tout pris la totalité du message sur ton site.En espérant que tout cela te sera utile.
Tu penses !!! Il y a un moment que je détourne mon attention dès que
cela parle de module de classe, bien que je sente que c'est vachement
bien.
Là, c'est l'occasion de rentrer dedans sur un exemple qui me concerne.
Je ne vais pas manquer l'occasion. Je vais diggérer ta leçon. 8-)
Au risque de me répéter, merci beaucoup...
Bonne journée.
à+twinleyVersion précédente encore tronquée ;-((
Par sécurité, j'ai mis une copie du message complet à cette adresse :
http://www.gaboly.com/MPFE/Classe1.html
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
Ceci crée une nouvelle classe (une sorte de catégorie), capable de
réagir aux événements (Events en anglais).
NB - "Option Explicit" n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des vaiables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quans survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
Tiens j'essaye de renvoyer le tout pour tester. Les gens vont rien
comprendre, :-[ mais d'un autre coté, cela archivera ta réponse
complète. ;-)
J'utilise TB 1.0 Fr aussi.
à+twinley
Module de classe
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un module
de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
rée une nouclasse (une sorte de catégorie), capable de réagir aux
événements (Events en anglais).
NB - Option Explicit n'est pas indispensable, mais je conseille vivement
de cocher "Déclaration explicite des variables", dans les préférences
(options, sous Windows).
Dans le même module, on indique ce qui doit se passer quand survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
Il reste à créer la passerelle entre classe et les TextBox de ton UserForm.
Pour ce faire, en haut du module associé au UserForm :
Option Explicit
Dim TB() As New ClasseTextBoxes
ce qui crée une matrice destinée à stocker les TextBox à associer à la
classe TextBoxes. Cette matrice doit être définie au niveau module.
Elle est alimentée lors de l'initialisation du UserForm :
Private Sub UserForm_Initialize()
Dim TextBoxesCount As Integer, c As Control
' Création de la collection de TextBoxes, gérée par le module de classe
TextBoxesCount = 0
For Each c In Controls
If TypeName(c) = "TextBox" Then
TextBoxesCount = TextBoxesCount + 1
ReDim Preserve TB(1 To TextBoxesCount)
Set TB(TextBoxesCount).TextBoxes = c
End If
Next c
End Sub
NB - dans l'instruction Set TB(TextBoxesCount).TextBoxes = c, la
propriété doit correspondre au nom donné à la classe associée aux TextBox.
Dans la procédure ci-dessus, tous les TextBox du UserForm sont traités
de façon identique, mais il est aisé de n'en prendre en compte qu'une
partie, en se basant par exemple sur une convention pour le nom des
TextBox :
If TypeName(c) = "TextBox" And Left(c.Name, 2) = "TT" Then
permet de n'associer à la classe "TextBoxes" que les TextBox dont le nom
commence par "TT".
Le même genre de convention permet de différencier le traitement associé
à l'événement Change. Soit par exemple un UserForm comportant un grand
nombre de TextBox dont le contenu doit être numérique. L'association de
tous ces TextBox à une classe permet de n'avoir une procédure pour
l'événement Change de l'ensemble de ces TextBox. Cependant, il peut être
nécessaire d'avoir plusieurs messages différents à afficher selon qu'il
s'agit de quantités, de prix unitaire, de chiffre d'affaires, ... :
Private Sub Textboxes_Change()
Dim Sep As String, NatureInfo As String, Entier As Boolean
Sep = Application.International(xlDecimalSeparator)
If TextBoxes <> "" Then
TextBoxes = Replace(TextBoxes, ".", Sep)
TextBoxes = Replace(TextBoxes, ",", Sep)
' Construction du message
Select Case Left(TextBoxes.Name, 3)
Case "TCA"
NatureInfo = Traduction("ContrôleCAHT")
Case "TCo"
NatureInfo = Traduction("ContrôleCotHoraire")
Case "THD", "THF"
...
1 - Variant est le type par défaut, et Dim A as Variant peut être
remplacé simplement par Dim A.
2 - Variant est un type peu efficace en ce qui concerne la mémoire, car
gourmand. Ici le type String est bien mieux adapté.
3 - Il est inutile d'employer Me pour qualifier un contrôle d'un
UserForm dans le module associé à celui-ci ; A = TextBox1 suffit.
4 - Il est inutile de trop décomposer, car cela alourdit inutilement le
code : on peut écrire directement A = UCase(TextBox1) au lieu des 2
lignes A = Me.TextBox1 et A = UCase(A).
5 - Ce point est de loin le plus important, l'emploi d'une variable est
ici parfaitement superflu, car TextBox1 = UCase(TextBox1)" suffit
largement.
En espérant que tout cela te sera utile.De rien, ;-))) C'était avec grand plaisir, mais j'aimerais bien
comprendre ce qui se passe avec Thunderbird 1.0 fr ;-((Bizarre cette censure de la part de ton lecteur de news ! texte trop
long ?
Impec, j'ai tout pris la totalité du message sur ton site.En espérant que tout cela te sera utile.
Tu penses !!! Il y a un moment que je détourne mon attention dès que
cela parle de module de classe, bien que je sente que c'est vachement
bien.
Là, c'est l'occasion de rentrer dedans sur un exemple qui me concerne.
Je ne vais pas manquer l'occasion. Je vais diggérer ta leçon. 8-)
Au risque de me répéter, merci beaucoup...
Bonne journée.
à+twinleyVersion précédente encore tronquée ;-((
Par sécurité, j'ai mis une copie du message complet à cette adresse :
http://www.gaboly.com/MPFE/Classe1.html
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
Ceci crée une nouvelle classe (une sorte de catégorie), capable de
réagir aux événements (Events en anglais).
NB - "Option Explicit" n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des vaiables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quans survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
Tiens j'essaye de renvoyer le tout pour tester. Les gens vont rien
comprendre, :-[ mais d'un autre coté, cela archivera ta réponse
complète. ;-)
J'utilise TB 1.0 Fr aussi.
à+twinley
Module de classe
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un module
de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
rée une nouclasse (une sorte de catégorie), capable de réagir aux
événements (Events en anglais).
NB - Option Explicit n'est pas indispensable, mais je conseille vivement
de cocher "Déclaration explicite des variables", dans les préférences
(options, sous Windows).
Dans le même module, on indique ce qui doit se passer quand survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
Il reste à créer la passerelle entre classe et les TextBox de ton UserForm.
Pour ce faire, en haut du module associé au UserForm :
Option Explicit
Dim TB() As New ClasseTextBoxes
ce qui crée une matrice destinée à stocker les TextBox à associer à la
classe TextBoxes. Cette matrice doit être définie au niveau module.
Elle est alimentée lors de l'initialisation du UserForm :
Private Sub UserForm_Initialize()
Dim TextBoxesCount As Integer, c As Control
' Création de la collection de TextBoxes, gérée par le module de classe
TextBoxesCount = 0
For Each c In Controls
If TypeName(c) = "TextBox" Then
TextBoxesCount = TextBoxesCount + 1
ReDim Preserve TB(1 To TextBoxesCount)
Set TB(TextBoxesCount).TextBoxes = c
End If
Next c
End Sub
NB - dans l'instruction Set TB(TextBoxesCount).TextBoxes = c, la
propriété doit correspondre au nom donné à la classe associée aux TextBox.
Dans la procédure ci-dessus, tous les TextBox du UserForm sont traités
de façon identique, mais il est aisé de n'en prendre en compte qu'une
partie, en se basant par exemple sur une convention pour le nom des
TextBox :
If TypeName(c) = "TextBox" And Left(c.Name, 2) = "TT" Then
permet de n'associer à la classe "TextBoxes" que les TextBox dont le nom
commence par "TT".
Le même genre de convention permet de différencier le traitement associé
à l'événement Change. Soit par exemple un UserForm comportant un grand
nombre de TextBox dont le contenu doit être numérique. L'association de
tous ces TextBox à une classe permet de n'avoir une procédure pour
l'événement Change de l'ensemble de ces TextBox. Cependant, il peut être
nécessaire d'avoir plusieurs messages différents à afficher selon qu'il
s'agit de quantités, de prix unitaire, de chiffre d'affaires, ... :
Private Sub Textboxes_Change()
Dim Sep As String, NatureInfo As String, Entier As Boolean
Sep = Application.International(xlDecimalSeparator)
If TextBoxes <> "" Then
TextBoxes = Replace(TextBoxes, ".", Sep)
TextBoxes = Replace(TextBoxes, ",", Sep)
' Construction du message
Select Case Left(TextBoxes.Name, 3)
Case "TCA"
NatureInfo = Traduction("ContrôleCAHT")
Case "TCo"
NatureInfo = Traduction("ContrôleCotHoraire")
Case "THD", "THF"
...
1 - Variant est le type par défaut, et Dim A as Variant peut être
remplacé simplement par Dim A.
2 - Variant est un type peu efficace en ce qui concerne la mémoire, car
gourmand. Ici le type String est bien mieux adapté.
3 - Il est inutile d'employer Me pour qualifier un contrôle d'un
UserForm dans le module associé à celui-ci ; A = TextBox1 suffit.
4 - Il est inutile de trop décomposer, car cela alourdit inutilement le
code : on peut écrire directement A = UCase(TextBox1) au lieu des 2
lignes A = Me.TextBox1 et A = UCase(A).
5 - Ce point est de loin le plus important, l'emploi d'une variable est
ici parfaitement superflu, car TextBox1 = UCase(TextBox1)" suffit
largement.
En espérant que tout cela te sera utile.
De rien, ;-))) C'était avec grand plaisir, mais j'aimerais bien
comprendre ce qui se passe avec Thunderbird 1.0 fr ;-((
Bizarre cette censure de la part de ton lecteur de news ! texte trop
long ?
Impec, j'ai tout pris la totalité du message sur ton site.
En espérant que tout cela te sera utile.
Tu penses !!! Il y a un moment que je détourne mon attention dès que
cela parle de module de classe, bien que je sente que c'est vachement
bien.
Là, c'est l'occasion de rentrer dedans sur un exemple qui me concerne.
Je ne vais pas manquer l'occasion. Je vais diggérer ta leçon. 8-)
Au risque de me répéter, merci beaucoup...
Bonne journée.
à+twinley
Version précédente encore tronquée ;-((
Par sécurité, j'ai mis une copie du message complet à cette adresse :
http://www.gaboly.com/MPFE/Classe1.html
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
Ceci crée une nouvelle classe (une sorte de catégorie), capable de
réagir aux événements (Events en anglais).
NB - "Option Explicit" n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des vaiables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quans survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
Tiens j'essaye de renvoyer le tout pour tester. Les gens vont rien
comprendre, :-[ mais d'un autre coté, cela archivera ta réponse
complète. ;-)
J'utilise TB 1.0 Fr aussi.
à+twinley
Module de classe
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un module
de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
rée une nouclasse (une sorte de catégorie), capable de réagir aux
événements (Events en anglais).
NB - Option Explicit n'est pas indispensable, mais je conseille vivement
de cocher "Déclaration explicite des variables", dans les préférences
(options, sous Windows).
Dans le même module, on indique ce qui doit se passer quand survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
Il reste à créer la passerelle entre classe et les TextBox de ton UserForm.
Pour ce faire, en haut du module associé au UserForm :
Option Explicit
Dim TB() As New ClasseTextBoxes
ce qui crée une matrice destinée à stocker les TextBox à associer à la
classe TextBoxes. Cette matrice doit être définie au niveau module.
Elle est alimentée lors de l'initialisation du UserForm :
Private Sub UserForm_Initialize()
Dim TextBoxesCount As Integer, c As Control
' Création de la collection de TextBoxes, gérée par le module de classe
TextBoxesCount = 0
For Each c In Controls
If TypeName(c) = "TextBox" Then
TextBoxesCount = TextBoxesCount + 1
ReDim Preserve TB(1 To TextBoxesCount)
Set TB(TextBoxesCount).TextBoxes = c
End If
Next c
End Sub
NB - dans l'instruction Set TB(TextBoxesCount).TextBoxes = c, la
propriété doit correspondre au nom donné à la classe associée aux TextBox.
Dans la procédure ci-dessus, tous les TextBox du UserForm sont traités
de façon identique, mais il est aisé de n'en prendre en compte qu'une
partie, en se basant par exemple sur une convention pour le nom des
TextBox :
If TypeName(c) = "TextBox" And Left(c.Name, 2) = "TT" Then
permet de n'associer à la classe "TextBoxes" que les TextBox dont le nom
commence par "TT".
Le même genre de convention permet de différencier le traitement associé
à l'événement Change. Soit par exemple un UserForm comportant un grand
nombre de TextBox dont le contenu doit être numérique. L'association de
tous ces TextBox à une classe permet de n'avoir une procédure pour
l'événement Change de l'ensemble de ces TextBox. Cependant, il peut être
nécessaire d'avoir plusieurs messages différents à afficher selon qu'il
s'agit de quantités, de prix unitaire, de chiffre d'affaires, ... :
Private Sub Textboxes_Change()
Dim Sep As String, NatureInfo As String, Entier As Boolean
Sep = Application.International(xlDecimalSeparator)
If TextBoxes <> "" Then
TextBoxes = Replace(TextBoxes, ".", Sep)
TextBoxes = Replace(TextBoxes, ",", Sep)
' Construction du message
Select Case Left(TextBoxes.Name, 3)
Case "TCA"
NatureInfo = Traduction("ContrôleCAHT")
Case "TCo"
NatureInfo = Traduction("ContrôleCotHoraire")
Case "THD", "THF"
...
1 - Variant est le type par défaut, et Dim A as Variant peut être
remplacé simplement par Dim A.
2 - Variant est un type peu efficace en ce qui concerne la mémoire, car
gourmand. Ici le type String est bien mieux adapté.
3 - Il est inutile d'employer Me pour qualifier un contrôle d'un
UserForm dans le module associé à celui-ci ; A = TextBox1 suffit.
4 - Il est inutile de trop décomposer, car cela alourdit inutilement le
code : on peut écrire directement A = UCase(TextBox1) au lieu des 2
lignes A = Me.TextBox1 et A = UCase(A).
5 - Ce point est de loin le plus important, l'emploi d'une variable est
ici parfaitement superflu, car TextBox1 = UCase(TextBox1)" suffit
largement.
En espérant que tout cela te sera utile.De rien, ;-))) C'était avec grand plaisir, mais j'aimerais bien
comprendre ce qui se passe avec Thunderbird 1.0 fr ;-((Bizarre cette censure de la part de ton lecteur de news ! texte trop
long ?
Impec, j'ai tout pris la totalité du message sur ton site.En espérant que tout cela te sera utile.
Tu penses !!! Il y a un moment que je détourne mon attention dès que
cela parle de module de classe, bien que je sente que c'est vachement
bien.
Là, c'est l'occasion de rentrer dedans sur un exemple qui me concerne.
Je ne vais pas manquer l'occasion. Je vais diggérer ta leçon. 8-)
Au risque de me répéter, merci beaucoup...
Bonne journée.
à+twinleyVersion précédente encore tronquée ;-((
Par sécurité, j'ai mis une copie du message complet à cette adresse :
http://www.gaboly.com/MPFE/Classe1.html
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
Ceci crée une nouvelle classe (une sorte de catégorie), capable de
réagir aux événements (Events en anglais).
NB - "Option Explicit" n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des vaiables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quans survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
C'est passé les doigts dans le nez, les pouces ou je pense...
Ptet un reboot de ton PC, la RAM est engorgée car il tourne depuis
longtemps ?
à+twinley
Tiens j'essaye de renvoyer le tout pour tester. Les gens vont rien
comprendre, :-[ mais d'un autre coté, cela archivera ta réponse
complète. ;-)
J'utilise TB 1.0 Fr aussi.
à+twinley
Module de classe
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
rée une nouclasse (une sorte de catégorie), capable de réagir aux
événements (Events en anglais).
NB - Option Explicit n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des variables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quand survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
Il reste à créer la passerelle entre classe et les TextBox de ton
UserForm.
Pour ce faire, en haut du module associé au UserForm :
Option Explicit
Dim TB() As New ClasseTextBoxes
ce qui crée une matrice destinée à stocker les TextBox à associer à la
classe TextBoxes. Cette matrice doit être définie au niveau module.
Elle est alimentée lors de l'initialisation du UserForm :
Private Sub UserForm_Initialize()
Dim TextBoxesCount As Integer, c As Control
' Création de la collection de TextBoxes, gérée par le module de
classe
TextBoxesCount = 0
For Each c In Controls
If TypeName(c) = "TextBox" Then
TextBoxesCount = TextBoxesCount + 1
ReDim Preserve TB(1 To TextBoxesCount)
Set TB(TextBoxesCount).TextBoxes = c
End If
Next c
End Sub
NB - dans l'instruction Set TB(TextBoxesCount).TextBoxes = c, la
propriété doit correspondre au nom donné à la classe associée aux
TextBox.
Dans la procédure ci-dessus, tous les TextBox du UserForm sont traités
de façon identique, mais il est aisé de n'en prendre en compte qu'une
partie, en se basant par exemple sur une convention pour le nom des
TextBox :
If TypeName(c) = "TextBox" And Left(c.Name, 2) = "TT" Then
permet de n'associer à la classe "TextBoxes" que les TextBox dont le
nom commence par "TT".
Le même genre de convention permet de différencier le traitement
associé à l'événement Change. Soit par exemple un UserForm comportant
un grand nombre de TextBox dont le contenu doit être numérique.
L'association de tous ces TextBox à une classe permet de n'avoir une
procédure pour l'événement Change de l'ensemble de ces TextBox.
Cependant, il peut être nécessaire d'avoir plusieurs messages
différents à afficher selon qu'il s'agit de quantités, de prix
unitaire, de chiffre d'affaires, ... :
Private Sub Textboxes_Change()
Dim Sep As String, NatureInfo As String, Entier As Boolean
Sep = Application.International(xlDecimalSeparator)
If TextBoxes <> "" Then
TextBoxes = Replace(TextBoxes, ".", Sep)
TextBoxes = Replace(TextBoxes, ",", Sep)
' Construction du message
Select Case Left(TextBoxes.Name, 3)
Case "TCA"
NatureInfo = Traduction("ContrôleCAHT")
Case "TCo"
NatureInfo = Traduction("ContrôleCotHoraire")
Case "THD", "THF"
...
1 - Variant est le type par défaut, et Dim A as Variant peut être
remplacé simplement par Dim A.
2 - Variant est un type peu efficace en ce qui concerne la mémoire,
car gourmand. Ici le type String est bien mieux adapté.
3 - Il est inutile d'employer Me pour qualifier un contrôle d'un
UserForm dans le module associé à celui-ci ; A = TextBox1 suffit.
4 - Il est inutile de trop décomposer, car cela alourdit inutilement
le code : on peut écrire directement A = UCase(TextBox1) au lieu des
2 lignes A = Me.TextBox1 et A = UCase(A).
5 - Ce point est de loin le plus important, l'emploi d'une variable
est ici parfaitement superflu, car TextBox1 = UCase(TextBox1)" suffit
largement.
En espérant que tout cela te sera utile.De rien, ;-))) C'était avec grand plaisir, mais j'aimerais bien
comprendre ce qui se passe avec Thunderbird 1.0 fr ;-((Bizarre cette censure de la part de ton lecteur de news ! texte trop
long ?
Impec, j'ai tout pris la totalité du message sur ton site.En espérant que tout cela te sera utile.
Tu penses !!! Il y a un moment que je détourne mon attention dès que
cela parle de module de classe, bien que je sente que c'est
vachement bien.
Là, c'est l'occasion de rentrer dedans sur un exemple qui me concerne.
Je ne vais pas manquer l'occasion. Je vais diggérer ta leçon. 8-)
Au risque de me répéter, merci beaucoup...
Bonne journée.
à+twinleyVersion précédente encore tronquée ;-((
Par sécurité, j'ai mis une copie du message complet à cette adresse :
http://www.gaboly.com/MPFE/Classe1.html
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
Ceci crée une nouvelle classe (une sorte de catégorie), capable de
réagir aux événements (Events en anglais).
NB - "Option Explicit" n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des vaiables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quans
survient l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
C'est passé les doigts dans le nez, les pouces ou je pense...
Ptet un reboot de ton PC, la RAM est engorgée car il tourne depuis
longtemps ?
à+twinley
Tiens j'essaye de renvoyer le tout pour tester. Les gens vont rien
comprendre, :-[ mais d'un autre coté, cela archivera ta réponse
complète. ;-)
J'utilise TB 1.0 Fr aussi.
à+twinley
Module de classe
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
rée une nouclasse (une sorte de catégorie), capable de réagir aux
événements (Events en anglais).
NB - Option Explicit n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des variables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quand survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
Il reste à créer la passerelle entre classe et les TextBox de ton
UserForm.
Pour ce faire, en haut du module associé au UserForm :
Option Explicit
Dim TB() As New ClasseTextBoxes
ce qui crée une matrice destinée à stocker les TextBox à associer à la
classe TextBoxes. Cette matrice doit être définie au niveau module.
Elle est alimentée lors de l'initialisation du UserForm :
Private Sub UserForm_Initialize()
Dim TextBoxesCount As Integer, c As Control
' Création de la collection de TextBoxes, gérée par le module de
classe
TextBoxesCount = 0
For Each c In Controls
If TypeName(c) = "TextBox" Then
TextBoxesCount = TextBoxesCount + 1
ReDim Preserve TB(1 To TextBoxesCount)
Set TB(TextBoxesCount).TextBoxes = c
End If
Next c
End Sub
NB - dans l'instruction Set TB(TextBoxesCount).TextBoxes = c, la
propriété doit correspondre au nom donné à la classe associée aux
TextBox.
Dans la procédure ci-dessus, tous les TextBox du UserForm sont traités
de façon identique, mais il est aisé de n'en prendre en compte qu'une
partie, en se basant par exemple sur une convention pour le nom des
TextBox :
If TypeName(c) = "TextBox" And Left(c.Name, 2) = "TT" Then
permet de n'associer à la classe "TextBoxes" que les TextBox dont le
nom commence par "TT".
Le même genre de convention permet de différencier le traitement
associé à l'événement Change. Soit par exemple un UserForm comportant
un grand nombre de TextBox dont le contenu doit être numérique.
L'association de tous ces TextBox à une classe permet de n'avoir une
procédure pour l'événement Change de l'ensemble de ces TextBox.
Cependant, il peut être nécessaire d'avoir plusieurs messages
différents à afficher selon qu'il s'agit de quantités, de prix
unitaire, de chiffre d'affaires, ... :
Private Sub Textboxes_Change()
Dim Sep As String, NatureInfo As String, Entier As Boolean
Sep = Application.International(xlDecimalSeparator)
If TextBoxes <> "" Then
TextBoxes = Replace(TextBoxes, ".", Sep)
TextBoxes = Replace(TextBoxes, ",", Sep)
' Construction du message
Select Case Left(TextBoxes.Name, 3)
Case "TCA"
NatureInfo = Traduction("ContrôleCAHT")
Case "TCo"
NatureInfo = Traduction("ContrôleCotHoraire")
Case "THD", "THF"
...
1 - Variant est le type par défaut, et Dim A as Variant peut être
remplacé simplement par Dim A.
2 - Variant est un type peu efficace en ce qui concerne la mémoire,
car gourmand. Ici le type String est bien mieux adapté.
3 - Il est inutile d'employer Me pour qualifier un contrôle d'un
UserForm dans le module associé à celui-ci ; A = TextBox1 suffit.
4 - Il est inutile de trop décomposer, car cela alourdit inutilement
le code : on peut écrire directement A = UCase(TextBox1) au lieu des
2 lignes A = Me.TextBox1 et A = UCase(A).
5 - Ce point est de loin le plus important, l'emploi d'une variable
est ici parfaitement superflu, car TextBox1 = UCase(TextBox1)" suffit
largement.
En espérant que tout cela te sera utile.
De rien, ;-))) C'était avec grand plaisir, mais j'aimerais bien
comprendre ce qui se passe avec Thunderbird 1.0 fr ;-((
Bizarre cette censure de la part de ton lecteur de news ! texte trop
long ?
Impec, j'ai tout pris la totalité du message sur ton site.
En espérant que tout cela te sera utile.
Tu penses !!! Il y a un moment que je détourne mon attention dès que
cela parle de module de classe, bien que je sente que c'est
vachement bien.
Là, c'est l'occasion de rentrer dedans sur un exemple qui me concerne.
Je ne vais pas manquer l'occasion. Je vais diggérer ta leçon. 8-)
Au risque de me répéter, merci beaucoup...
Bonne journée.
à+twinley
Version précédente encore tronquée ;-((
Par sécurité, j'ai mis une copie du message complet à cette adresse :
http://www.gaboly.com/MPFE/Classe1.html
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
Ceci crée une nouvelle classe (une sorte de catégorie), capable de
réagir aux événements (Events en anglais).
NB - "Option Explicit" n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des vaiables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quans
survient l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
C'est passé les doigts dans le nez, les pouces ou je pense...
Ptet un reboot de ton PC, la RAM est engorgée car il tourne depuis
longtemps ?
à+twinley
Tiens j'essaye de renvoyer le tout pour tester. Les gens vont rien
comprendre, :-[ mais d'un autre coté, cela archivera ta réponse
complète. ;-)
J'utilise TB 1.0 Fr aussi.
à+twinley
Module de classe
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
rée une nouclasse (une sorte de catégorie), capable de réagir aux
événements (Events en anglais).
NB - Option Explicit n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des variables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quand survient
l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub
Il reste à créer la passerelle entre classe et les TextBox de ton
UserForm.
Pour ce faire, en haut du module associé au UserForm :
Option Explicit
Dim TB() As New ClasseTextBoxes
ce qui crée une matrice destinée à stocker les TextBox à associer à la
classe TextBoxes. Cette matrice doit être définie au niveau module.
Elle est alimentée lors de l'initialisation du UserForm :
Private Sub UserForm_Initialize()
Dim TextBoxesCount As Integer, c As Control
' Création de la collection de TextBoxes, gérée par le module de
classe
TextBoxesCount = 0
For Each c In Controls
If TypeName(c) = "TextBox" Then
TextBoxesCount = TextBoxesCount + 1
ReDim Preserve TB(1 To TextBoxesCount)
Set TB(TextBoxesCount).TextBoxes = c
End If
Next c
End Sub
NB - dans l'instruction Set TB(TextBoxesCount).TextBoxes = c, la
propriété doit correspondre au nom donné à la classe associée aux
TextBox.
Dans la procédure ci-dessus, tous les TextBox du UserForm sont traités
de façon identique, mais il est aisé de n'en prendre en compte qu'une
partie, en se basant par exemple sur une convention pour le nom des
TextBox :
If TypeName(c) = "TextBox" And Left(c.Name, 2) = "TT" Then
permet de n'associer à la classe "TextBoxes" que les TextBox dont le
nom commence par "TT".
Le même genre de convention permet de différencier le traitement
associé à l'événement Change. Soit par exemple un UserForm comportant
un grand nombre de TextBox dont le contenu doit être numérique.
L'association de tous ces TextBox à une classe permet de n'avoir une
procédure pour l'événement Change de l'ensemble de ces TextBox.
Cependant, il peut être nécessaire d'avoir plusieurs messages
différents à afficher selon qu'il s'agit de quantités, de prix
unitaire, de chiffre d'affaires, ... :
Private Sub Textboxes_Change()
Dim Sep As String, NatureInfo As String, Entier As Boolean
Sep = Application.International(xlDecimalSeparator)
If TextBoxes <> "" Then
TextBoxes = Replace(TextBoxes, ".", Sep)
TextBoxes = Replace(TextBoxes, ",", Sep)
' Construction du message
Select Case Left(TextBoxes.Name, 3)
Case "TCA"
NatureInfo = Traduction("ContrôleCAHT")
Case "TCo"
NatureInfo = Traduction("ContrôleCotHoraire")
Case "THD", "THF"
...
1 - Variant est le type par défaut, et Dim A as Variant peut être
remplacé simplement par Dim A.
2 - Variant est un type peu efficace en ce qui concerne la mémoire,
car gourmand. Ici le type String est bien mieux adapté.
3 - Il est inutile d'employer Me pour qualifier un contrôle d'un
UserForm dans le module associé à celui-ci ; A = TextBox1 suffit.
4 - Il est inutile de trop décomposer, car cela alourdit inutilement
le code : on peut écrire directement A = UCase(TextBox1) au lieu des
2 lignes A = Me.TextBox1 et A = UCase(A).
5 - Ce point est de loin le plus important, l'emploi d'une variable
est ici parfaitement superflu, car TextBox1 = UCase(TextBox1)" suffit
largement.
En espérant que tout cela te sera utile.De rien, ;-))) C'était avec grand plaisir, mais j'aimerais bien
comprendre ce qui se passe avec Thunderbird 1.0 fr ;-((Bizarre cette censure de la part de ton lecteur de news ! texte trop
long ?
Impec, j'ai tout pris la totalité du message sur ton site.En espérant que tout cela te sera utile.
Tu penses !!! Il y a un moment que je détourne mon attention dès que
cela parle de module de classe, bien que je sente que c'est
vachement bien.
Là, c'est l'occasion de rentrer dedans sur un exemple qui me concerne.
Je ne vais pas manquer l'occasion. Je vais diggérer ta leçon. 8-)
Au risque de me répéter, merci beaucoup...
Bonne journée.
à+twinleyVersion précédente encore tronquée ;-((
Par sécurité, j'ai mis une copie du message complet à cette adresse :
http://www.gaboly.com/MPFE/Classe1.html
Bonjour twinley,
Je viens seulement de lire ton message du 3.
On n'y pense pas toujours, mais quand on a un même traitement pour
plusieurs contrôles, il est souvent intéressant de passer par un
module de classe, ce qui permet d'avoir un code unique.
Pour cela on crée un module de classe avec en haut du module :
Option Explicit
Public WithEvents TextBoxes As MSForms.TextBox
Ceci crée une nouvelle classe (une sorte de catégorie), capable de
réagir aux événements (Events en anglais).
NB - "Option Explicit" n'est pas indispensable, mais je conseille
vivement de cocher "Déclaration explicite des vaiables", dans les
préférences (options, sous Windows).
Dans le même module, on indique ce qui doit se passer quans
survient l'événement Change :
Private Sub TextBoxes_Change()
TextBoxes = UCase(TextBoxes)
End Sub