Formulaire multipage - Combobox vide

Bonjour le forum,

Je suis nouveau et débutant en VBA. J'ai "tenté" la réalisation d'un formulaire multipage avec un grand nombre de champs (48). Je peux créer, récupérer les informations dans mon onglet intitulé "BD". Tout s'incrémente mais le hic c'est que la Combobox1 (N° CC) reste désespérément vide et ne récupère pas les informations des textbox. Je ne comprends pas d'où vient l'erreur. J'utilise LISTINDEX pour mon programme de liste déroulante. Cela fonctionnait bien avec moins de champs (nb limité de textbox sur VBA ?) J'ai parcouru le forum mais je n'ai pas réussi à modifier ce programme. Voir ci-joint le fichier en question. Vous remerciant par avance de votre aide et éclairage !

Bonjour

dans le code initialise, il faut enlever le 1 après USERFORm

puis dans for j=2 to, il manque un n a count

'PRG DU FORMULAIRE
Private Sub userform_initialize()
Dim J As Long
Dim i As Integer
Set ws = Sheets("BD")
With Me.ComboBox1
For J = 2 To ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem ws.Range("A" & J)
Next J
End With
For i = 1 To 48
Me.Controls("textbox" & i).Visible = True 'affiche les données dans les textbox
Next i
End Sub

Bonjour HAJIME37 et bienvenue sur le forum,

Après un rapide regard dans ton fichier, voilà quelques erreurs que j'ai repéré et qui empêchent ton programme de fonctionner:

1)Une simple erreur de syntaxe:

[barrer]ws.Range("A" & Rows.Cout).End(xlUp).Row[/barrer]

au lieu de

ws.Range("A" & Rows.Count).End(xlUp).Row

dans ton initialize

2)Tu as "mal" créé tes évènements. Pour créer un évènement, il suffit de sélectionner l'élément dans la barre du haut,

1

puis de cliquer sur l’événement que l'on souhaite créer/modifier,

2

et ensuite de taper ton code dans le code généré automatiquement.

3

@BOB71AU:

Chez moi le Initialize ne fonctionne absolument pas, d'où la réécriture dans mon code.

@HAJIME37, il y a d'autres erreurs dans ton code, là ce n'est que le début pour te débloquer sur ce point.

Merci à tous les 2 pour votre réactivité. En effet Je suis complétement passé à côté de l'erreur de syntaxe et je découvre qu'il est préférable de sélectionner les éléments pour écrire correctement le code. Du coup ma Combobox s'alimente bien (le nombre de champ n'est donc pas limitatif ?) mais je n'ai pas les données des Textbox correspondantes ! Encore une subtilité du programme formulaire qu'il me reste à comprendre....

Oui j'ai désactivé le code qui était censé modifier tes textbox, car il génère un message d'erreur:

Private Sub combobox1_change() 'Attention utilise bien la méthode que je t'ai proposé
Dim ligne As Long
Dim i As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'supprime la selection
ligne = Me.ComboBox1.ListIndex + 2
For i = 1 To 48
'la ligne suivante ne peut pas fonctionner à cause de la variable "ws"
Me.Controls("Textbox" & i) = ws.Cells(ligne, i + 1)
Next i
End Sub

Ton code ne fonctionne pas car, dans ta procédure(=combobox1_change), la variable n'est pas définie. En pensant bien faire, tu as créé et initialisé ta variable "ws" dans ta procédure _Initialize()

Set ws = Sheets("BD")

Afin de corriger et comprendre ton erreur, je t'invite à regarder sur Internet la différence entre variable locale et variable globale. Pour faire simple, tu as crée une variable locale, alors qu'une variable globale serait peut être plus pertinente.

'Variable globale
Dim ws As Worksheet 'écrit [u]au dessus[/u] de toutes les procédures et de toutes les fonctions
Sub uneProcedure()
Set ws = Sheets("BD")
End Sub
'Variable locale
Sub uneProcedure()
Dim ws As Worksheet
Set ws = Sheets("BD")
End Sub

bonsoir d3d9x, BOB71AU? HAJIME37 et le forum

je voudrais bien ajouter un calendriers autonome qui passerai bien d'un pc a un autre sans soucis mais sur un multipage pas encore fait où tous les textbox sont reliées, tel que celui ci

OK Je viens de rajouter au début de mon formulaire :

Option Explicit

Dim ws As Worksheet

Sub uneProcedure()

Set ws = Sheets("BD")

End Sub

Cela me permet dorénavant d'utiliser correctement mes boutons modifier, supprimer (alors que ce n'était pas le cas dans la précédente version) mais je ne récupère toujours pas les valeurs des textbox dans la Combobox. Je n'ai pas du comprendre les explications ou bien je place mal une instruction....

Dans ton cas, il faut placer le

Set ws = Sheets("BD")

à l'intérieur de ton _Initialize() Mon exemple était un exemple pas personnalisé qui servait à illustrer la différence variable locale/globale

C'est bien le cas (ou j'ai loupé un truc ??) :

'PRG DU FORMULAIRE

Private Sub userform_initialize()

Dim J As Long

Dim i As Integer 'variable pour incrémenter les données

Set ws = Sheets("BD")

With Me.ComboBox1

For J = 2 To ws.Range("A" & Rows.Count).End(xlUp).Row

.AddItem ws.Range("A" & J)

Next J

End With

For i = 1 To 48

Me.Controls("textbox" & i).Visible = True 'affiche les données dans les textbox

Next i

End Sub

Oui tkt le code est bien placé dans ce que tu m'as copié/collé C'est moi qui n'ai pas saisi ta question! Qu'es-ce que tu entends par:

mais je ne récupère toujours pas les valeurs des textbox dans la Combobox

De quelles txtbox parles-tu? et de quelles combobox?

PS:Merci de mettre les lignes de code dans les balises prévues à cet effet =) ça reste les message vraiment plus lisibles.

bonjour d3d9x et le forum

dans mon post de 19 Juin 2016, 18:44 je ne parlais pas pour moi mais pour le classeur de HAJIME37 dans la page2 il y a 2 textbox un pour début et un pour fin et j'ai penser que le calendrier de rolandM aurais fait l'affaire

si le classeur doit être partage

Bonsoir D3D9X, je me suis mal exprimé. Ma liste déroulante fonctionne bien (ouf !). Maintenant je voudrai tout simplement pouvoir récupérer dans le userform les valeurs de mes textbox (Champs SUIVI BC, DPT etc...) en fonction de la sélection de ma Combobox (N° CC).

Ex : Je sélectionne dans le menu déroulant le N° CC "TEST1" et je peux voir afficher les données associées dans les différents champs de mon formulaire. Voir Capture écran. Aujourd'hui, j'ai beau sélectionner un N° CC, mes champs restent à blanc....

27capture-ecran.xlsx (37.26 Ko)

Voilà une proposition:

Je viens de trouver réponse à ma question . J'avais oublié une ligne de code importante dans le programme de ma liste déroulante.

Me.Controls("textbox" & i) = ws.Cells(ligne, i + 1)

Maintenant cela fonctionne et je récupère bien toutes les données associées.

Je vois que tu viens de m'envoyer aussi une proposition de formulaire. Je vais de ce pas voir si ce que j'ai écris est correct. A tout de suite !


Merci beaucoup d3d9x pour ta patience et ton aide précieuse . Je vais pouvoir continuer à développer ce formulaire et me concentrer sur sa finalité. Je souhaiterai mettre au format numérique quelques TXBOX uniquement. Existe t il une procédure pour écrire autrement ce type de condition en évitant de répéter autant de lignes de codes que de champs concernés ? On peut faire une boucle ?

With Ws.Range("G2:G1000")

.NumberFormat = "0.00"

.Value = .Value

End With

Encore merci.

Rechercher des sujets similaires à "formulaire multipage combobox vide"