Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

comment coder une combobox pour remplir diverses feuilles d'un classeur

304 views
Skip to first unread message

raptorus1er

unread,
Aug 8, 2018, 6:31:22 AM8/8/18
to
Bonjour,
Tout nouveau sur le forum et dans le codage VBA, je viens vers vous car n'ayant
que pour seul méthode d'apprentissage le visionnage et la retranscription de
tutoriels vidéos je suis vite perdu dans les termes utilisés.
Après bcp de temps à essayer de comprendre comment créer un formulaire, je suis
face à une colle pour mon faible niveau.
Pour la petite explication, j'ai souhaité créer un formulaire car dans mon
service, chaque dossier contient une liste mise sous excel, j'ai premièrement
rassemblé toutes les listes sur un seul classeur sur diverses feuilles.
De là je me suis lancé sur la création d'un formulaire qui reprend par les
textbox toutes les données des diverses listes et une combobox (dans laquelle
j'ai listé les diverses feuilles) qui est censée diriger les informations
remplies vers la feuille qui aura été sélectionné dans la ComboBox.
et me voilà dans le flou le plus total pour la rédaction d'un code me permettant
cette instruction.
Après avoir parcouru les diverses questions, je n'ai pas trouver de solution à
mon problème.
Quelqu'un aurait il la possibilité d'orienter mes recherches ou de me guider
dans la rédaction du code.
merci à vous
bien cordialement

Michd

unread,
Aug 8, 2018, 10:39:18 AM8/8/18
to

Bonjour,

Un fichier exemple à cette adresse : https://www.cjoint.com/c/HHioLCGjJmi

Il y a plus d'une manière de procéder, cela dépend de ce que tu veux faire. L'exemple est simple!

MichD

Jacquouille

unread,
Aug 8, 2018, 11:55:15 AM8/8/18
to
Juste une question:
Quand on remplit le formulaire, il ne s'inscrit pas automatiquement sous la
dernière ligne, dans le tableau des datas?



Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Michd" a écrit dans le message de groupe de discussion :
pkevaj$1ig8$1...@gioia.aioe.org...

Michd

unread,
Aug 8, 2018, 3:48:26 PM8/8/18
to
Quand tu cliques sur le bouton du combobox, tu choisis l'item que tu désires et les 3 textbox se
remplissent automatiquement. Il n'est pas fait pour saisir de nouvelles données ou mettre à jour les
données du tableau. Cela se voulait un exemple simple pour un débutant...

MichD


Jacquouille

unread,
Aug 9, 2018, 4:08:08 AM8/9/18
to
Alors, je suis pré-débutant. -))
Merci



Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Michd" a écrit dans le message de groupe de discussion :
pkfhe6$jfh$1...@gioia.aioe.org...

raptorus1er

unread,
Aug 9, 2018, 5:22:50 AM8/9/18
to
Le mercredi 08 Août 2018 à 21:59 par Jacquouille :
> Alors, je suis pré-débutant. -))
> Merci
>
>
>
> Jacques
> " Le vin est au repas ce que le parfum est à la femme."
> .
> "Michd" a écrit dans le message de groupe de discussion :
> pkfhe6$jfh$
>
> Quand tu cliques sur le bouton du combobox, tu choisis l'item que tu
> désires
> et les 3 textbox se
> remplissent automatiquement. Il n'est pas fait pour saisir de nouvelles
> données ou mettre à jour les
> données du tableau. Cela se voulait un exemple simple pour un
> débutant...
>
> MichD
bonjour,
après avoir cherché encore et toujours, je me retrouve avec ceci

Private Sub ComboBox1_Click()
Sheets(ComboBox1.Value).Activate
End Sub

Private Sub ComboBox1_DropButtonClick()
ComboBox1.Clear
For Each vfeuille In ActiveWorkbook.Sheets
ComboBox1.AddItem vfeuille.Name
Next
End Sub

qui me permet de passer de feuille en feuille depuis mon formulaire via la
ComboBox1 mais lors de la validation,
un message d'erreur s'affiche en disant :"valeur de propriété non valide".

y a t'il une erreur ou quelque chose à rajouter?

merci à vous

Michd

unread,
Aug 9, 2018, 6:12:57 AM8/9/18
to
Bonjour

Ton code fonctionne bien, testé à l'aide d'un copier-coller dans un formulaire n'ayant qu'un
combobox.

Cependant, si tu désires que le nom de la feuille sélectionnée demeure dans le combobox, j'ai
modifié ton code comme ceci.

'Déclaration de la variable dans le haut du module du formulaire
Dim X As Long
'----------------------------------------------
Private Sub ComboBox1_Click()
Sheets(ComboBox1.Value).Activate
X = 1
End Sub
'----------------------------------------------
Private Sub ComboBox1_DropButtonClick()
If X = 0 Then
ComboBox1.Clear
Else: X = 0
Exit Sub
End If
For Each vFeuille In ActiveWorkbook.Sheets
ComboBox1.AddItem vFeuille.Name
Next
End Sub
'----------------------------------------------

MichD


raptorus1er

unread,
Aug 9, 2018, 7:54:24 AM8/9/18
to
Le jeudi 09 Août 2018 à 12:12 par Michd :
j'ai positionné la modification du code que tu m'as fourni mais je ne peux
toujours pas inscrire sur les autres feuilles malgré tout.

Je te mets le codage complet de mon formulaire pour que tu vois si une erreur
empêcherait la selection des données de la ComboBox1.

Dim X As Long
'----------------------------------------------
Private Sub ComboBox1_Click()
Sheets(ComboBox1.Value).Activate
X = 1
End Sub
'----------------------------------------------
Private Sub ComboBox1_DropButtonClick()
If X = 0 Then
ComboBox1.Clear
Else: X = 0
Exit Sub
End If
For Each vFeuille In ActiveWorkbook.Sheets
ComboBox1.AddItem vFeuille.Name
Next
End Sub

Private Sub CommandButton1_Click()
If Sheets("feuille1").Range("A3") = "" Then
Sheets("feuille1").Range("A3") = TextBox2
Else
Sheets("feuille1").ListObjects(1).ListRows.Add
End If
dlt = Sheets("feuille1").Range("d1000000").End(xlUp).Row
Sheets("feuille1").Range("A" & dlt) = TextBox2
Sheets("feuille1").Range("B" & dlt) = TextBox3
Sheets("feuille1").Range("C" & dlt) = TextBox8
Sheets("feuille1").Range("D" & dlt) = TextBox9
End Sub

Private Sub Label25_Click()
End Sub

'creation format de date et message d'erreur listing
Private Sub TextBox11_AfterUpdate()
On Error GoTo Messagerreur
TextBox11 = Format(TextBox11, "short date")
Exit Sub
Messagerreur:
MsgBox ("le format de la date n'est pas valide jj/mm/aaaa")
TextBox11 = Empty
End Sub

Private Sub TextBox11_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox11 = "" Then
TextBox11 = "jj/mm/aaaa"
End If
End Sub

'definition des caractères imposé pour la case listing
Private Sub TextBox11_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'suppression automatique du modèle de date imposé date des faits
Private Sub TextBox11_Enter()
If TextBox11 = "jj/mm/aaaa" Then
TextBox11 = ""
End If
End Sub

'creation format de date et message d'erreur date de départ feuille1
Private Sub TextBox8_AfterUpdate()
On Error GoTo Messagerreur
TextBox8 = Format(TextBox8, "short date")
Exit Sub
Messagerreur:
MsgBox ("le format de la date n'est pas valide jj/mm/aaaa")
TextBox8 = Empty
End Sub

Private Sub TextBox8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox8 = "" Then
TextBox8 = "jj/mm/aaaa"
End If
End Sub

'definition des caractères imposé pour la case date de départ feuille1
Private Sub TextBox8_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'suppression automatique du modèle de date imposé date de départ feuille1
Private Sub TextBox8_Enter()
If TextBox8 = "jj/mm/aaaa" Then
TextBox8 = ""
End If
End Sub

'creation format de date et message d'erreur listing
Private Sub TextBox9_AfterUpdate()
On Error GoTo Messagerreur
TextBox9 = Format(TextBox9, "short date")
Exit Sub
Messagerreur:
MsgBox ("le format de la date n'est pas valide jj/mm/aaaa")
TextBox9 = Empty
End Sub

Private Sub TextBox9_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox9 = "" Then
TextBox9 = "jj/mm/aaaa"
End If
End Sub

'definition des caractères imposé pour la case retour feuille 1
Private Sub TextBox9_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'suppression automatique du modèle de date imposé case retour feuille 1
Private Sub TextBox9_Enter()
If TextBox9 = "jj/mm/aaaa" Then
TextBox9 = ""
End If
End Sub

'demonstration format de date demandée case des dates
Private Sub UserForm_Initialize()
TextBox11.Text = "jj/mm/aaaa"
TextBox9.Text = "jj/mm/aaaa"
TextBox8.Text = "jj/mm/aaaa"

With ComboBox1
.AddItem " feuille1"
.AddItem " feuille 2"
.AddItem " feuille 3"
.AddItem " feuille 4"
.AddItem " feuille 5"
.AddItem " feuille 6"
.AddItem " feuille 7"
.AddItem " feuille 8"
End With

With ComboBox2
.AddItem "M."
.AddItem "Melle"
.AddItem "Mme"
End With

With ComboBox3
.AddItem "membre1"
.AddItem " membre2"
.AddItem " membre3"
.AddItem " membre4"
.AddItem " membre5"
End With

With ComboBox4
.AddItem "Actif"
.AddItem "Non Actif"
End With

With ComboBox5
.AddItem "dossier 1"
.AddItem " dossier 2"
.AddItem " dossier 3"
.AddItem " dossier 4"
.AddItem " dossier 5"
End With

End Sub

'definition des caractères imposé pour la case code postal logement
Private Sub TextBox26_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 47 And KeyAscii < 58)) Then KeyAscii = 0
End Sub


'definition des caractères imposé pour la case km liaison
Private Sub TextBox29_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 47 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'definition des caractères imposé pour la case numéro de téléphone fixe
Private Sub TextBox32_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'definition des caractères imposé pour la case code postal civilité
Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 47 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'definition des caractères imposé pour la case numéro de téléphone portable
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0
End Sub

Je pense que j'ai dû zapper pas mal de choses et avoir fait des bourdes!
mais bon jusque là tout fonctionne avec la feuille1 seulement.
merci à toi MichD en tout cas de te pencher sur mon cas.

raptorus1er

unread,
Aug 9, 2018, 11:05:56 AM8/9/18
to
Le jeudi 09 Août 2018 à 12:12 par Michd :
Me faudrait il dupliquer

Private Sub CommandButton1_Click()
If Sheets("feuille1").Range("A3") = "" Then
Sheets("feuille1").Range("A3") = TextBox2
Else
Sheets("feuille1").ListObjects(1).ListRows.Add
End If
dlt = Sheets("feuille1").Range("d1000000").End(xlUp).Row
Sheets("feuille1").Range("A" & dlt) = TextBox2
Sheets("feuille1").Range("B" & dlt) = TextBox3
Sheets("feuille1").Range("C" & dlt) = TextBox8
Sheets("feuille1").Range("D" & dlt) = TextBox9
End Sub

pour chaque feuille? avec evidemment le changement des nom des textBox?

Michd

unread,
Aug 9, 2018, 12:12:28 PM8/9/18
to
Dans le haut du module du formulaire, ajoute une variable :

Dim X As Long
Dim Feuille As String '<<<<=====

modifie cette procédure comme ceci :
'----------------------------------------
Private Sub ComboBox1_Click()
Feuille = ComboBox1.Value
Sheets(ComboBox1.Value).Activate
X = 1
End Sub
'----------------------------------------

Et dans cette procédure, ajoute une ligne de code :
'------------------------------------------------
Private Sub CommandButton1_Click()
if Feuille = "" then Exit sub ' <<<<<=====

'Le reste du code

'------------------------------------------------

MichD

Michd

unread,
Aug 9, 2018, 3:40:01 PM8/9/18
to


| pour chaque feuille? avec evidemment le changement des nom des textBox?

Je n'en sais rien. Je ne sais pas où sont ces textbox? De plus, rien n'empêche tes textbox d'avoir
le même nom s'ils sont dans des feuilles différentes. À toi de voir!

MichD

raptorus1er

unread,
Aug 23, 2018, 12:11:38 PM8/23/18
to
Le jeudi 09 Août 2018 à 21:39 par Michd :
bonjour,
après avoir fait les modifications que tu m'as donné (Michd),
donc au jour d'aujourd'hui, les informations s'inscrivent sur toutes les
feuilles en même temps peu importe la feuille que je sélectionne sur la
ComboBox1.

je reste donc dans la galère mais pas la même lol.
si quelqu'un a une solution je suis toujours preneur.

merci à tous

Michd

unread,
Aug 23, 2018, 4:06:26 PM8/23/18
to
Fichier exemple : : https://www.cjoint.com/c/HHxueYlupui

Tu sélectionnes la feuille que tu désires dans le textbox
Tu entres des données dans les textbox du formulaire
et tu cliques sur le bouton transfert.

MichD



"raptorus1er" a écrit dans le message de groupe de discussion :
EOWdnSYjnZokQePG...@giganews.com...

raptorus1er

unread,
Sep 6, 2018, 11:24:33 AM9/6/18
to
Le jeudi 23 Août 2018 à 22:06 par Michd :
> Fichier exemple : : https://www.cjoint.com/c/HHxueYlupui
>
> Tu sélectionnes la feuille que tu désires dans le textbox
> Tu entres des données dans les textbox du formulaire
> et tu cliques sur le bouton transfert.
>
> MichD
>
>
>
> "raptorus1er" a écrit dans le message de groupe de discussion
> :
>
>
> Le jeudi 09 Août 2018 à 21:39 par Michd :
>> | pour chaque feuille? avec evidemment le changement des nom des textBox?
>>
>> Je n'en sais rien. Je ne sais pas où sont ces textbox? De plus, rien
>> n'empêche tes textbox d'avoir
>> le même nom s'ils sont dans des feuilles différentes. À
>> toi
>> de voir!
>>
>> MichD
>>
> bonjour,
> après avoir fait les modifications que tu m'as donné (Michd),
> donc au jour d'aujourd'hui, les informations s'inscrivent sur toutes les
> feuilles en même temps peu importe la feuille que je sélectionne
> sur la
> ComboBox1.
>
> je reste donc dans la galère mais pas la même lol.
> si quelqu'un a une solution je suis toujours preneur.
>
> merci à tous
bonjour MichD et à tous,

j'ai testé les formules que tu as mis dans ton formulaire mais je ne peux pas le
mettre en place dans le mien car je n'ai pas de textbox dans mes feuilles mais
un tableau par feuille.

les cellules des tableaux sont remplies via:

Private Sub CommandButton1_Click()

'activation de commande de la 1ere textbox valide pour feuille1
If Sheets("feuille1").Range("A3") = "" Then
Sheets("feuille1").Range("A3") = TextBox2
Else
Sheets("feuille1").ListObjects(1).ListRows.Add
End If

'Détail des TextBox uilisé pour la feuille sélectionnée
dlt = Sheets("feuille1").Range("d1000000").End(xlUp).Row
Sheets("feuille1").Range("A" & dlt) = TextBox2
Sheets("feuille1").Range("B" & dlt) = TextBox3
Sheets("feuille1").Range("C" & dlt) = TextBox8
Sheets("feuille1").Range("D" & dlt) = TextBox9

du coup j'ai fait cela pour chaque feuille ce qui fonctionne au jour
d'aujourd'hui.
Malheureusement TextBox2 impacte également une colonne de la feuille 2, de la
feuille 3 etc.... et me les inscrit également.

tu me conseilles de coder:

Private Sub CmdTransfer_Click()

plutot que

Private Sub CommandButton1_Click()

ou cela importe peu?

quelqu'un aurait une idée pour le transfert des données des textbox sur une
feuille vers les cellules correspondantes?

Michd

unread,
Sep 6, 2018, 2:11:17 PM9/6/18
to
'--------------------------------------------------------------
tu me conseilles de coder:

Private Sub CmdTransfer_Click()

plutot que

Private Sub CommandButton1_Click()

'--------------------------------------------------------------

Si tu as remarqué, si tu affiches les propriétés (barre des menus / développeur / Mode création /
après sélectionne le bouton de commande et affiche les propriétés par la commande du même nom.
Remarque que la propriété "Name" a comme "NOM" CmdTransfer".

Si ce bouton est dans un formulaire, en mode création, sélectionne le bouton et regarde la propriété
"NAME" du bouton, il doit avoir comme nom "CmdTranfer". Le fait de donner un nom au bouton de
commande aide à reconnaître à quoi sert ces boutons lorsque vient le temps de CODER. Le nom lui-même
n'a aucun impact sur l'exécution du code. Après donner un nom, lorsque tu fais un double-clic pour
inscrire le code, au lieu d'avoir un bouton Private Sub CommandButton1_Click(), tu as Private Sub
CmdTransfer_Click()

MichD

?

raptorus1er

unread,
Sep 7, 2018, 4:07:24 AM9/7/18
to
Le jeudi 06 Septembre 2018 à 20:11 par Michd :
bonjour MichD et à tous!

je pensais que CmdTransfer_Click() étaitun bouton de commande particulier créé
à partir de la boite à outils comme l'est CommandButton1_Click() en fait c'est
juste le nom que tu as changé pour donner sa description.

du coup ça ne change pas mon problème! :)

je continue à chercher. bonne journée à tous

Michd

unread,
Sep 7, 2018, 5:39:36 AM9/7/18
to

| du coup ça ne change pas mon problème! :)

Et c'est quoi ton problème?

MichD

raptorus1er

unread,
Sep 7, 2018, 6:23:13 AM9/7/18
to
Le vendredi 07 Septembre 2018 à 11:39 par Michd :
> | du coup ça ne change pas mon problème! :)
>
> Et c'est quoi ton problème?
>
> MichD
ben lorsque j'inscris dans mes textbox, les informations vont sur toutes les
feuilles en même temps.

le formulaire que tu m'as montré permet de transférer des informations de
textbox vers des textbox, ce que je recherche c'est pour le transfert des
information de textbox vers les cellules du tableau (d'une feuille
préselectionnée auparavant depuis une combobox).
si tu veux je peux te faire parvenir mon projet par mp pour que tu le vois dans
son intégralité.

Michd

unread,
Sep 7, 2018, 8:12:03 AM9/7/18
to
Si tu veux ajouter des données (une nouvelle ligne) à un tableau des données, voici un exemple de
code.
Si tu veux simplement modifier une donnée existante du tableau, ceci est suffisant :

With Activesheet 'OU Worksheets("NomFeuille")
.Cells(3, 1) = "toto100"
End With

Ce code ajoute une ligne nouvelle de donnée au tableau.
'-------------------------------------
Sub Ajouter_New_Data_To_A_Table()
Dim Sh As Worksheet
Dim T As ListObject, Newrow As ListRow

Set Sh = ActiveSheet
Set T = Sh.ListObjects("Tableau1")

Set Newrow = T.ListRows.Add
With Newrow
.Range(1) = "...." 'Première colonne nouvelle ligne
.Range(2) = "......" 'Deuxième colonne ...
.Range(3) = "Ce que tu veux"
End With
End Sub
'-------------------------------------

Pour ce qui est des textbox, tu as déjà un exemple.

MichD

raptorus1er

unread,
Sep 11, 2018, 3:38:08 AM9/11/18
to
Le vendredi 07 Septembre 2018 à 14:12 par Michd :
bonjour,

voici mon fichier avec les problèmes qui se posent à moi, à savoir:

- enregistrement des informations sur toutes les feuilles de mon classeur

- lorsque l'on passe d'une donnée à une autre dans la combobox1, les textboxs
qui ont déjà été désactivées ne sont plus actives sans avoir redémarré le
formulaire.

c'est tout ce qui me pose problème du moins pour le moment :)

https://www.cjoint.com/c/HIlhAauYsFc

toutes modifications seront les bienvenues pour faciliter l'utilisation de mon
projet.

merci à vous et bonne journée

Michd

unread,
Sep 11, 2018, 1:39:58 PM9/11/18
to
Bonjour,

Dans ton formulaire, j'ai renommé tous les contrôles "Texte" et "Combobox" du nom de l'étiquette
au-dessus des contrôles respectifs. Lorsque ces étiquettes ont une appellation de plus d'un mot, le
nom (propriété name) des contrôles est le même que l'étiquette + un "_" remplaçant l'espace. Les
accents font aussi partie des noms des contrôles.

Dans tes feuilles, le nom des étiquettes de colonnes de la ligne 2, doit avoir la même appellation
que les étiquettes ou noms des contrôles du formulaire. Cependant, nul besoin d'utiliser le "_" pour
remplacer les espaces. Ces étiquettes de colonnes dans plusieurs feuilles ont des noms différents.
Je ne les ai pas modifiés, c'est ton travail.

Les contrôles "Combobx" ne sont jamais "touchés par la procédure".

Quand tu modifies le contenu du combobox "Listing" seulement les contrôles de la feuille contenant
le nom des étiquettes de la ligne 2 de la feuille sont activés dans le formulaire.

Ton fichier : https://www.cjoint.com/c/HIlrAWyQNdF

Observe, tous les noms des "Textbox" débutent par "Txt", celui des combobox par "Cmb" et celui des
boutons de commande par "Cmd". En prenant le temps de bien nommer les contrôles, c'est beaucoup plus
facile de s'y retrouver lorsque l'on désire insérer du code!

MichD



"raptorus1er" a écrit dans le message de groupe de discussion :
RKWdneGT1ctC7QrG...@giganews.com...

raptorus1er

unread,
Sep 14, 2018, 10:20:46 AM9/14/18
to
Le mardi 11 Septembre 2018 à 19:39 par Michd :
bonjour, MichD et bonjour à toutes et tous,

après modifications, le bouton de commande ne s'active pas.

je te fais suivre le fichier si tu peux me dire d'où vient le problème. Merci

https://www.cjoint.com/c/HIoopETxCJc

par contre as tu la possibilité de m'expliquer quel est le code pour que les
textbox soient activés selon le choix de la cmblisting pcq ça ne se fait pas.
sans doute une erreur de ma part.

Michd

unread,
Sep 17, 2018, 7:08:21 AM9/17/18
to
Bonjour,

Je joins un fichier que j'avais créé il y a quelques années afin de donner un exemple sur la manière
de gérer une plage de données sur une feuille de calcul à partir d'un formulaire. Le fait de gérer
ne change pas beaucoup la donne. Comme le nom s'affiche dans le combobox de ton formulaire, tu sais
toujours à quelle feuille de calcul il est fait référence. À chaque changement de feuille, il s'agit
de recharger le contenu du formulaire.

Mon formulaire montre comment retrouver des enregistrements de la feuille, modifier un ou des
enregistrements déjà enregistrés, supprimer l'un ou plusieurs enregistrements ou simplement ajouter
un nouvel enregistrement.

Si tu es débutant en VBA, la compréhension et la réalisation peuvent prendre plusieurs jours.

https://www.cjoint.com/c/HIrk3VA1Bz7

En ce qui me concerne, ta question est vague, de quel bouton de commande parles-tu? Qu'est-ce que ce
bouton de commande devrait faire? Je n'ai pas le temps ni l'envie de monter ton formulaire en pièce
détachée...Il va falloir que tu t'y mettes!

MichD

Michd

unread,
Sep 18, 2018, 10:28:44 AM9/18/18
to
Une suggestion, pour quoi ne pas utiliser une seule feuille de calcul pour entrer, modifier,
supprimer des données. Rien ne t'empêche de créer sur les autres feuilles, divers tableaux croisés
dynamiques avec les champs désirés. Dès que tu modifies la base de données de la première feuille,
tous les TDC se mettent à jour. C'est plus simple comme gestion.

MichD

raptorus1er

unread,
Sep 21, 2018, 10:05:57 AM9/21/18
to
Le mardi 18 Septembre 2018 à 16:28 par Michd :
bonjour MichD

la question que je te posais c'est pourquoi le cmdSave (bouton enregistrer bleu)
n'est pas actif lors de la sélection d'un des choix de la cmblisting?
le CmbSave se grise automatiquement et ne se réactive pas même lorsque tous les
champs sont remplis.

après il y avait la 2nde question qui était :
à quoi correspond cette commande et comment la réajuster car des txtbox sont
manquant?
je ne te demande pas de tout faire à ma place bien au contraire car j'ai envie
de tout faire moi même mais une petite explication me permettra de modifier ce
que je dois.
j'ai compris qu'il y a le changement de couleur des txtboxs non utilisés par la
sélection d'un élément de cmblisting mais comment intégrer les éléments
manquants? (txtdate_départ et txtdate_retour par exemple pour le choix OTV dans
cmbListing)


'désactivation des TextBoxs inutiles lors de la sélection de la feuille dans
CmbListing
Private Sub CmbListing_Change()
Dim Rg As Range, T As Variant, Elt As Variant
Dim C As Control, A As Long, B As Long, X As Long

If Me.CmbListing <> "" Then
With Worksheets(Me.CmbListing.Value)
.Activate
X = Range("A1").CurrentRegion.Columns.Count
T = .Range("A2").Resize(, X).Value
'T = Rg.Value

For A = 1 To UBound(T, 1)
For B = 1 To UBound(T, 2)
T(A, B) = Replace(T(A, B), " ", "_")
Select Case LCase(T(A, B))
Case Is = "Listing", "Agent", "Date_Des_Faits",
"Type_De_procédure", "Nature_De_La_Fourrière"
T(A, B) = "Cmb" & T(A, B)
Case Else
T(A, B) = Replace(T(A, B), "_", "")
T(A, B) = "Txt" & T(A, B)
End Select
Next
Next
End With
For Each C In Me.Controls
If Left(C.Name, 5) <> "Label" Then
If Not IsError(Application.Match(C.Name, T, 0)) Then
C.Enabled = True
C.BackColor = &H80000005
Else
If Left(C.Name, 3) <> "Cmb" Then
C.Enabled = False
C.BackColor = &HC0C0C0
End If
End If
End If
Next
End If
End Sub


merci à toi

Michd

unread,
Sep 21, 2018, 12:53:14 PM9/21/18
to
Voici le fichier modifié. https://www.cjoint.com/c/HIvqJduIXv7

J'ai modifié la macro pour exclure les boutons de commande, j'ai mis une note à cet effet dans le
module du formulaire.

| car des txtbox sont manquant?

**** Je sais. Tu n'as qu'à les ajouter. L'IMPORTANT, leur leur à ces textbox doit débuter par "Txt"
suivi du nom de champ que tu utilises dans la feuille de calcul où il apparaît. Tous les noms de tes
textbox portent un nom reflétant cela. Tu as suffisamment d'exemples sous les yeux pour constater
comment j'ai procédé. Tu n'as pas à modifier le code, il va s'adapter, peu importe le nombre de
textbox que tu ajouteras, et ce, pourvu que tu leurs données un nom tel que convenu.

Ce que je voulais lors du message précédent, ce n'est pas à moi de déterminer quels champs doivent
être ajoutés et dans quelle feuille.

Cette section du code s'occupe simplement du traitement des noms des contrôles afin qu'il y ait
concordance entre les noms des champs des feuilles de calcul et le nom donné aux contrôles.
Exemple :
a) Ajouter les "txt" au début des champs représentant un champ texte...
b) enlever les espaces de noms des champs dans la feuille de calcul...

Le but , boucler dans la deuxième section de la procédure sur tous les contrôles du textbox. Cette
ligne de code requiert le nom de chaque contrôle baptisé dans le formulaire.
If Not IsError(Application.Match(C.Name, T, 0)) Then

Voilà.


MichD


Michd

unread,
Sep 21, 2018, 12:56:19 PM9/21/18
to


"Michd" a écrit dans le message de groupe de discussion : po37lm$8ls$1...@gioia.aioe.org...
'--------------------------------------------------------
For A = 1 To UBound(T, 1)
For B = 1 To UBound(T, 2)
T(A, B) = Replace(T(A, B), " ", "_")
Select Case LCase(T(A, B))
Case Is = "Listing", "Agent", "Date_Des_Faits",
"Type_De_procédure", "Nature_De_La_Fourrière"
T(A, B) = "Cmb" & T(A, B)
Case Else
T(A, B) = Replace(T(A, B), "_", "")
T(A, B) = "Txt" & T(A, B)
End Select
Next
Next
'--------------------------------------------------------

MichD

0 new messages