VBA Excel 2003 : valeur cellule dans TextBox
Fermé
Nospam54
Messages postés
152
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
15 novembre 2017
-
4 oct. 2011 à 13:10
Nospam54 Messages postés 152 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 novembre 2017 - 13 oct. 2011 à 16:49
Nospam54 Messages postés 152 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 novembre 2017 - 13 oct. 2011 à 16:49
A voir également:
- VBA Excel 2003 : valeur cellule dans TextBox
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
- Excel compter cellule couleur sans vba - Guide
5 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
4 oct. 2011 à 13:32
4 oct. 2011 à 13:32
Bonjour,
Il n'est pas utile de nommer vos cellules.
Au changement de valeur de la combobox, il suffit d'aller chercher le n° de la ligne ou se trouve la valeur, et de renvoyer le contenu des cellules voisines dans les textbox.
Un peu comme ceci [Code non testé]:
Cordialement,
Franck P
Il n'est pas utile de nommer vos cellules.
Au changement de valeur de la combobox, il suffit d'aller chercher le n° de la ligne ou se trouve la valeur, et de renvoyer le contenu des cellules voisines dans les textbox.
Un peu comme ceci [Code non testé]:
Private Sub Cbx_Frn_Nom_change() Dim Lign As Long 'évite l'erreur de la méthode find si la combobox est vide. If Cbx_Frn_Nom = "" Then Exit Sub With Sheets("Feuil1") 'A ADAPTER mettre ici le nom de la feuille ou vous cherchez vos valeurs 'A ADAPTER Columns(1) va chercher dans la colonne A le contenu de la Combo Lign = .Columns(1).Cells.Find(Cbx_Frn_Nom).Row Me.TextBox1 = .Cells(Lign, 2) 'textbox1 = contenu colonne B Me.TextBox2 = .Cells(Lign, 3) 'textbox2 = contenu colonne C 'etc... End With End Sub--
Cordialement,
Franck P
Nospam54
Messages postés
152
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
15 novembre 2017
13
4 oct. 2011 à 14:50
4 oct. 2011 à 14:50
Merci Franck !
Petit souci tout de même... Cependant ça bloque à "Lign = .Columns(1).Cells.Find(Cbx_Frn_Nom).Row"
Message d'erreur = "Erreur d'exécution 91:
Variable objet ou variable de bloc White non définie"
D'où ce la peut-il venir sachant que j'ai bien vérifié toutes les lignes de commande ?
Merci d'avance...
Petit souci tout de même... Cependant ça bloque à "Lign = .Columns(1).Cells.Find(Cbx_Frn_Nom).Row"
Message d'erreur = "Erreur d'exécution 91:
Variable objet ou variable de bloc White non définie"
D'où ce la peut-il venir sachant que j'ai bien vérifié toutes les lignes de commande ?
Merci d'avance...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
4 oct. 2011 à 14:55
4 oct. 2011 à 14:55
peux tu copier/coller tout ton code ici dans une réponse?
Nospam54
Messages postés
152
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
15 novembre 2017
13
4 oct. 2011 à 15:00
4 oct. 2011 à 15:00
Pas de souci, le voici :
Private Sub Cbx_Frn_Nom_change()
'
Dim Lign As Long
'
Windows("Tab_Saisie_Facture.xls").Activate
Sheets("Listes").Select
'
' Evite l'erreur de la méthode find si la combobox est vide.
If Cbx_Frn_Nom = "" Then Exit Sub
'
With Sheets("Listes")
Lign = .Columns(1).Cells.Find(Cbx_Frn_Nom).Row
Me.Cbx_Frn_Code = .Cells(Lign, 2)
Me.Zt_Frn_Index = .Cells(Lign, 3)
Me.Zt_Frn_Adr_Num = .Cells(Lign, 5)
Me.Zt_Frn_Adr_Voie = .Cells(Lign, 6)
Me.Zt_Frn_Adr_Compl = .Cells(Lign, 7)
Me.Zt_Frn_Adr_BP = .Cells(Lign, 8)
Me.Zt_Frn_Adr_CP = .Cells(Lign, 9)
Me.Zt_Frn_Adr_Ville = .Cells(Lign, 10)
End With
End Sub
Private Sub Cbx_Frn_Nom_change()
'
Dim Lign As Long
'
Windows("Tab_Saisie_Facture.xls").Activate
Sheets("Listes").Select
'
' Evite l'erreur de la méthode find si la combobox est vide.
If Cbx_Frn_Nom = "" Then Exit Sub
'
With Sheets("Listes")
Lign = .Columns(1).Cells.Find(Cbx_Frn_Nom).Row
Me.Cbx_Frn_Code = .Cells(Lign, 2)
Me.Zt_Frn_Index = .Cells(Lign, 3)
Me.Zt_Frn_Adr_Num = .Cells(Lign, 5)
Me.Zt_Frn_Adr_Voie = .Cells(Lign, 6)
Me.Zt_Frn_Adr_Compl = .Cells(Lign, 7)
Me.Zt_Frn_Adr_BP = .Cells(Lign, 8)
Me.Zt_Frn_Adr_CP = .Cells(Lign, 9)
Me.Zt_Frn_Adr_Ville = .Cells(Lign, 10)
End With
End Sub
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
4 oct. 2011 à 15:05
4 oct. 2011 à 15:05
Je ne vois aucune erreur dans ce code...
Essaye de remplacer (sans conviction), les 2 Cbx_Frn_Nom du code par Cbx_Frn_Nom.Value...
Sinon, peux tu nous passer une copie de ton classeur, sans données confidentielles, au format Xl97-2003 (.xls) via : https://www.cjoint.com/
Essaye de remplacer (sans conviction), les 2 Cbx_Frn_Nom du code par Cbx_Frn_Nom.Value...
Sinon, peux tu nous passer une copie de ton classeur, sans données confidentielles, au format Xl97-2003 (.xls) via : https://www.cjoint.com/
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
4 oct. 2011 à 15:22
4 oct. 2011 à 15:22
Essaye ceci peut être...
En passant, pour mettre du code dans ce forum, la balise à utiliser n'est pas italique (I) mais code : <>
Private Sub Cbx_Frn_Nom_change() Dim Lign As Long ' Evite l'erreur de la méthode find si la combobox est vide. If Cbx_Frn_Nom = "" Then Exit Sub With WorkBooks("Tab_Saisie_Facture.xls").Sheets("Listes") Lign = .Columns(1).Cells.Find(Cbx_Frn_Nom).Row Me.Cbx_Frn_Code = .Cells(Lign, 2) Me.Zt_Frn_Index = .Cells(Lign, 3) Me.Zt_Frn_Adr_Num = .Cells(Lign, 5) Me.Zt_Frn_Adr_Voie = .Cells(Lign, 6) Me.Zt_Frn_Adr_Compl = .Cells(Lign, 7) Me.Zt_Frn_Adr_BP = .Cells(Lign, 8) Me.Zt_Frn_Adr_CP = .Cells(Lign, 9) Me.Zt_Frn_Adr_Ville = .Cells(Lign, 10) End With End Sub
En passant, pour mettre du code dans ce forum, la balise à utiliser n'est pas italique (I) mais code : <>
Nospam54
Messages postés
152
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
15 novembre 2017
13
4 oct. 2011 à 15:53
4 oct. 2011 à 15:53
Super ta réactivité, pijaku !
J'ai essayé la seconde méthode, même message d'erreur...
Je joindrai donc mon fichier via Cjoint.com. Pour le moment la mise en place du lien ne fonctionne pas (problème de serveur du boulot semble-t-il). Je ferai donc cela ce soir depuis chez moi (ça marche mieux qu'à la boite !).
Petit détail quand même : ton code a fonctionné... Mais, mais j'ai glissé un "On error Goto" au cas où l'utilisateur entre un nom inexistant. En le lançant le code bouclait et je n'avais plus la main. J'ai donc fait un Ctr+Alt+Suppr... N'ayant pas sauvegardé (eh oui...), j'ai entré à nouveau le code et là... marche plus !
Ça a son importance ?
En attendant...
Merci
J'ai essayé la seconde méthode, même message d'erreur...
Je joindrai donc mon fichier via Cjoint.com. Pour le moment la mise en place du lien ne fonctionne pas (problème de serveur du boulot semble-t-il). Je ferai donc cela ce soir depuis chez moi (ça marche mieux qu'à la boite !).
Petit détail quand même : ton code a fonctionné... Mais, mais j'ai glissé un "On error Goto" au cas où l'utilisateur entre un nom inexistant. En le lançant le code bouclait et je n'avais plus la main. J'ai donc fait un Ctr+Alt+Suppr... N'ayant pas sauvegardé (eh oui...), j'ai entré à nouveau le code et là... marche plus !
Ça a son importance ?
En attendant...
Merci
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
Modifié par pijaku le 4/10/2011 à 16:00
Modifié par pijaku le 4/10/2011 à 16:00
1- quand tu n'as plus la main, avec VBA, la manip à faire est : CTRL+Pause (du côté de Impr Ecran)
2- On error Goto pourquoi pas...
Comme ceci :
Voir ce tutoriel pour la gestion des erreurs
2- On error Goto pourquoi pas...
Comme ceci :
Private Sub Cbx_Frn_Nom_change() Dim Lign As Long On Error goto Faute ' Evite l'erreur de la méthode find si la combobox est vide. If Cbx_Frn_Nom = "" Then Exit Sub With WorkBooks("Tab_Saisie_Facture.xls").Sheets("Listes") Lign = .Columns(1).Cells.Find(Cbx_Frn_Nom).Row Me.Cbx_Frn_Code = .Cells(Lign, 2) Me.Zt_Frn_Index = .Cells(Lign, 3) Me.Zt_Frn_Adr_Num = .Cells(Lign, 5) Me.Zt_Frn_Adr_Voie = .Cells(Lign, 6) Me.Zt_Frn_Adr_Compl = .Cells(Lign, 7) Me.Zt_Frn_Adr_BP = .Cells(Lign, 8) Me.Zt_Frn_Adr_CP = .Cells(Lign, 9) Me.Zt_Frn_Adr_Ville = .Cells(Lign, 10) End With Exit Sub Faute: MsgBox "La saisie dans la liste est obligatoire. Il convient de ne pas y ajouter d'autres noms" End Sub
Voir ce tutoriel pour la gestion des erreurs
Nospam54
Messages postés
152
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
15 novembre 2017
13
4 oct. 2011 à 16:44
4 oct. 2011 à 16:44
Voici le lien contenant mon fichier... https://www.cjoint.com/?3JeqRz1ELdo
Merci par avance de tes tests
Merci par avance de tes tests
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
4 oct. 2011 à 16:49
4 oct. 2011 à 16:49
t'es déjà rentré?
Eh ben c'est du beau....... ;-)
Eh ben c'est du beau....... ;-)
Nospam54
Messages postés
152
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
15 novembre 2017
13
4 oct. 2011 à 16:54
4 oct. 2011 à 16:54
Nan, nan !
Le serveur du boulot daigne enfin fonctionner convenablement... pfff
Le serveur du boulot daigne enfin fonctionner convenablement... pfff
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
4 oct. 2011 à 17:03
4 oct. 2011 à 17:03
Ouais c'est ce qu'on dit!!!
Bon en colonne A, tu as quoi?
Des valeurs? Des formules?
Des formules!! Ahhhh!!!!
Donc il manque un paramètre à la méthode Find.
Ce paramètre est : Regarde dans les valeurs. En VBA : Lookin:=XlValues.
Comme ceci :
Bon en colonne A, tu as quoi?
Des valeurs? Des formules?
Des formules!! Ahhhh!!!!
Donc il manque un paramètre à la méthode Find.
Ce paramètre est : Regarde dans les valeurs. En VBA : Lookin:=XlValues.
Comme ceci :
Private Sub Cbx_Frn_Nom_change() ' Dim Lign As Long 'On Error GoTo Erreur ' Evite l'erreur de la méthode find si la combobox est vide. If Cbx_Frn_Nom = "" Then Exit Sub With Workbooks("Saisie_Pièce_Cpta.xls").Sheets("Listes") Lign = .Columns(1).Cells.Find(Cbx_Frn_Nom, LookIn:=xlValues).Row Me.Cbx_Frn_Code = .Cells(Lign, 2) Me.Zt_Frn_Index = .Cells(Lign, 3) Me.Zt_Frn_Adr_Num = .Cells(Lign, 5) Me.Zt_Frn_Adr_Voie = .Cells(Lign, 6) Me.Zt_Frn_Adr_Compl = .Cells(Lign, 7) Me.Zt_Frn_Adr_BP = .Cells(Lign, 8) Me.Zt_Frn_Adr_CP = .Cells(Lign, 9) Me.Zt_Frn_Adr_Ville = .Cells(Lign, 10) End With 'Exit Sub 'Erreur: 'MsgBox "La saisie dans la liste est obligatoire. Il convient de ne pas y ajouter d'autres noms" End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
Modifié par pijaku le 12/10/2011 à 09:09
Modifié par pijaku le 12/10/2011 à 09:09
Salut,
Il est possible de "grouper" les codes. C'est ce que je te disais lorsque je t'ai dit que mon code n'était pas du tout optimisé.
Cependant, pour cela, il faudrait que tu nous communique ton classeur afin de voir quels sont les contrôles utilisés.
Un exemple de textbox "numérique" avec :
- séparateur de milliers
- saisie d'une virgule (celle du pavé numérque, donc le point en fait!) et d'une seule
- possibilité de saisie d'un signe - uniquement en premier caractère
- le remplacement du point par la virgule pour permettre le calcul dans un textbox2
Sources, l'excellet tuto de Didier Gonard
Code :
Cordialement,
Franck P
Il est possible de "grouper" les codes. C'est ce que je te disais lorsque je t'ai dit que mon code n'était pas du tout optimisé.
Cependant, pour cela, il faudrait que tu nous communique ton classeur afin de voir quels sont les contrôles utilisés.
Un exemple de textbox "numérique" avec :
- séparateur de milliers
- saisie d'une virgule (celle du pavé numérque, donc le point en fait!) et d'une seule
- possibilité de saisie d'un signe - uniquement en premier caractère
- le remplacement du point par la virgule pour permettre le calcul dans un textbox2
Sources, l'excellet tuto de Didier Gonard
Code :
Private Sub TextBox1_Change() TextBox1 = Format(TextBox1, "# ##0") End Sub Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox2 = Replace(TextBox1, ".", ",") End Sub Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If InStr("1234567890.-", Chr(KeyAscii)) = 0 Or TextBox1.SelStart > 0 And Chr(KeyAscii) = "-" _ Or InStr(TextBox1.Value, ".") <> 0 And Chr(KeyAscii) = "." Then KeyAscii = 0 End Sub
Cordialement,
Franck P
Nospam54
Messages postés
152
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
15 novembre 2017
13
13 oct. 2011 à 09:59
13 oct. 2011 à 09:59
Bonjour,
Et merci pour ce bout de code. D'autre part, j'ai parcouru le tuto de Didier Gonard et y ai trouvé pas mal de choses intéressantes pour l'immédiat et l'avenir de mon appli !
Je lui avais d'ailleurs déjà "piqué" quelques astuces...
Je peaufine en ce moment les points que j'avais laissés un peu en suspens...
Donc, un autre problème rencontré :
Mon UserForm contient un MultiPage. L'un des onglets de ce MultiPage sert à rentrer et/ou à modifier les paramètres de l'application. Lorsque je sélectionne celui-ci je veux que le programme garde en mémoire les différents paramètres actuels pour que, si l'utilisateur en a changé certains mais qu'il ne valide pas les changements, les anciens paramètres soient conservés.
Si coder pour mettre en mémoire les paramètres initiaux ne semble pas trop compliqué, je ne parviens pas à déclencher l'action à la sélection de l'onglet en question...
Si j'utilise le code "Private Sub MultiPage1_Change()", bien évidemment à chaque changement dans le MultiPage, il lance l'action. Ce qui ne me semble pas très... économique même si c'est transparent.
Je cherche donc la syntaxe pour que l'action de mise en mémoire ne se fasse qu'à la sélection de cet onglet en particulier...
Je ne sais pas si je suis bien clair, mais vois-tu une réponse à cela ?
Ce dont je te remercie par avance !
Dès que j'aurais terminé ce qui est en cours, je me permettrai donc de te faire parvenir mon classeur pour que tu vois là où j'en suis et, éventuellement, m'apporter ton opinion...
A bientôt !
Et merci pour ce bout de code. D'autre part, j'ai parcouru le tuto de Didier Gonard et y ai trouvé pas mal de choses intéressantes pour l'immédiat et l'avenir de mon appli !
Je lui avais d'ailleurs déjà "piqué" quelques astuces...
Je peaufine en ce moment les points que j'avais laissés un peu en suspens...
Donc, un autre problème rencontré :
Mon UserForm contient un MultiPage. L'un des onglets de ce MultiPage sert à rentrer et/ou à modifier les paramètres de l'application. Lorsque je sélectionne celui-ci je veux que le programme garde en mémoire les différents paramètres actuels pour que, si l'utilisateur en a changé certains mais qu'il ne valide pas les changements, les anciens paramètres soient conservés.
Si coder pour mettre en mémoire les paramètres initiaux ne semble pas trop compliqué, je ne parviens pas à déclencher l'action à la sélection de l'onglet en question...
Si j'utilise le code "Private Sub MultiPage1_Change()", bien évidemment à chaque changement dans le MultiPage, il lance l'action. Ce qui ne me semble pas très... économique même si c'est transparent.
Je cherche donc la syntaxe pour que l'action de mise en mémoire ne se fasse qu'à la sélection de cet onglet en particulier...
Je ne sais pas si je suis bien clair, mais vois-tu une réponse à cela ?
Ce dont je te remercie par avance !
Dès que j'aurais terminé ce qui est en cours, je me permettrai donc de te faire parvenir mon classeur pour que tu vois là où j'en suis et, éventuellement, m'apporter ton opinion...
A bientôt !
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
13 oct. 2011 à 10:05
13 oct. 2011 à 10:05
Bonjour,
Question multipage :
Question multipage :
Private Sub MultiPage1_Change() 'si la page concernée est la Page1 : If Me.MultiPage1.SelectedItem.Index = 0 Then MsgBox "Coucou" 'si la page concernée est la Page2 : 'If Me.MultiPage1.SelectedItem.Index = 1 Then MsgBox "Coucou" 'si la page concernée est la Page3 : 'If Me.MultiPage1.SelectedItem.Index = 2 Then MsgBox "Coucou" 'etc... End Sub
Nospam54
Messages postés
152
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
15 novembre 2017
13
13 oct. 2011 à 14:11
13 oct. 2011 à 14:11
C'est encore l'emm...eur ! ;-)
Merci pour l'exemple sur le chargement d'un onglet multipage...
Ok, maintenant je parviens sur ma page "Paramètres" et en modifie certains.
En cliquant sur le bouton "Valider", je veux récupérer les nouvelles données entrées et les mettre en dur dans le Text ou Value du TextBox modifié.
J'ai essayé de multiples façons... ça veut pô...
Si je fais le test avec un messagebox, il me retourne bien la nouvelle donnée, mais je ne parviens pas à la mémoriser dans les paramètres du TextBox.
Tu vois ce que je veux dire ?
En tout cas, quand j'aurais terminé cette appli, je pense que j'aurai fait un sacré tour du VBA !
Merci pour l'exemple sur le chargement d'un onglet multipage...
Ok, maintenant je parviens sur ma page "Paramètres" et en modifie certains.
En cliquant sur le bouton "Valider", je veux récupérer les nouvelles données entrées et les mettre en dur dans le Text ou Value du TextBox modifié.
J'ai essayé de multiples façons... ça veut pô...
Si je fais le test avec un messagebox, il me retourne bien la nouvelle donnée, mais je ne parviens pas à la mémoriser dans les paramètres du TextBox.
Tu vois ce que je veux dire ?
En tout cas, quand j'aurais terminé cette appli, je pense que j'aurai fait un sacré tour du VBA !
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
13 oct. 2011 à 14:27
13 oct. 2011 à 14:27
Tu vois ce que je veux dire ?
Oui mais je ne peux rien faire pour t'aider si tu ne m'en dit pas plus....
je veux récupérer les nouvelles données entrées Entrées ou? dans quoi?
et les mettre en dur dans le Text ou Value du TextBox modifié. Quel Textbox?
Tu sais, tu es le seul à disposer de ton appli...
En tout cas, quand j'aurais terminé cette appli, je pense que j'aurai fait un sacré tour du VBA ! Je ne voudrais pas être pessimiste, mais oh que non!!!
Oui mais je ne peux rien faire pour t'aider si tu ne m'en dit pas plus....
je veux récupérer les nouvelles données entrées Entrées ou? dans quoi?
et les mettre en dur dans le Text ou Value du TextBox modifié. Quel Textbox?
Tu sais, tu es le seul à disposer de ton appli...
En tout cas, quand j'aurais terminé cette appli, je pense que j'aurai fait un sacré tour du VBA ! Je ne voudrais pas être pessimiste, mais oh que non!!!
Nospam54
Messages postés
152
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
15 novembre 2017
13
13 oct. 2011 à 16:49
13 oct. 2011 à 16:49
* sourire *
Alors restons optimistes !
Bon... je finis ce que je peux faire (et qui fonctionne) et je t'envoie le classeur en te précisant ce qui me bloque...
A bientôt
Alors restons optimistes !
Bon... je finis ce que je peux faire (et qui fonctionne) et je t'envoie le classeur en te précisant ce qui me bloque...
A bientôt