[VBA-E] Adaptation avec des listbox ou combobox
Bonjour,
J'ai voulu adapter cette exemple en remplacant les textbox par des listbox mais sans succes quelqu'un pourrait m'aider.
Je voudrais obliges des utilisateurs à choisir les donnes à saisir dans des listes déroulantes.
contributions VBA
[Sources]Utiliser un Userform pour Lire et écrire facilement ds 1 feuille de calculs
merci par avance.
Adaptation avec des listbox
Bonjour,
J'ai essaye avec des listbox ou des combobox sans succes.
voici le fichier donc je parle. il a ete fait par ouskel'n'or.
http://cjoint.com/?ennpvfYnxx
à la place des textbox, je voudrais utiliser des listes déroulantes soit listbox ou combobox ( differentes ? ).
merci
Adaptation avec des listbox
Bonjour,
Voici le fichier excel que j'ai crée. Tu pourras voir se que j'ai fait. Par contre, je ne peux divulger les donnes du tableau c'est pour cela que j'ai mis des X.
http://cjoint.com/?enoBd4DUKx
Je voudrais exploiter ton exemple pour remplir mon tableau.
Soit avec listbox ou combobox ( quel est le plus pratique ? ) mais donnes sont par fixer en nombre, il fait que je puisse en rajouter => je croix que le plus pratique dans mon cas est le combobox.
ici dans mon exemple, je copie un tableau dans chaqu'une de mes feuilles. J'ai crée des validations en listes deroulantes allant chercher les donnees dans le tableau copie.
Ce qui m'a pose des problemes de selection de cellules d'ailleurs. Ce n'est pas encore robuste car je dois de temps en temps bidouille le numéro de selection de cellule. Et je ne sais pourquoi ? ( ici cela doit etre 5 jusqu'à detection de la derniere ). Mais j'ai des cas ou je dois mettre 3 ou autre car il me decale ma selection. C'est problématique dans mon tableau global car il y a des lignes qui disparaissent .
On m'a demandé si on pouvait copier un ligne pour eviter de redocumenter une ligne entierement. J'ai teste on peut copier manuellemnt la ligne et renommer le numero de la colonne A pour continuer mon incrémentation de ligne. Je n'ai trouve que cette maniere pour inserer une ligne et copier.
C'est pas facile à expliquer ce que l'on voudrais. En te donnant mon tableau, tu vas comprendre ce que j'ai essaye de faire.
J'espere que tu va mieux comprendre ce que j'ai essaye de faire. Je debute en vba. Et ma maniere de proceder est la suivante : je recupere des bouts de code à droite et à gauche et je teste . Et c'est pas evident.
merci.
Adaptation avec des listbox
Donnees d'une combobox ou listbox
j'ai deux possibilite soit je pointe sur une zone d'une feuille soit je met mes donnes dans mon code ?
Adaptation avec des listbox
desole pour protection je l'avais pas ote sur cette version .
Je vais t'expliquer comment fonctionne mon tableau....
La feuille 25 est copie sur feuille 2 à 21.
Si tu prends feuille 2 , REP 1 ( LIGNE 5 ) tu peux choisir des donnees dans une liste deroulante, j'ai fait cela pour chaque colonne etc...
En cliquant sur copie ligne tu copie REP 1 puis cela renomme REP 2 ETC...
Tu peux faire cela sur toutes les feuilles.
Mon tableau global recopie tableau feuille 2 avec titre puis mes lignes documentes pour feuille 3 à 21.
Voici un peu plus d'explication sur le fonctionnement de mon tableau .
Je n'y ai pas encore integrer ton bout de code avec useform car je n'arrive pas à l'adapter avec des combobox....
La finalite est de pouvoir inserer ou copie une ligne, en effacer et modifier une, "voir en supprimer sauf si cela me supprime des donnees de mon deuxieme tableau" , mettre des protections.
Adaptation avec des listbox ou combobox
j'ai travaille un peu sur ce que j'aimerais faire. Mais je bloque sur la verification des lignes cela bug, insertion de mes donnees de mes combobox avec le ScrollBar cela bug... Pour le reste cela marche j'ai pu reprendre ce qui avait ete fait.
http://cjoint.com/?eoaW2jOUaX
erreur execution '-24470248809(800700057)':
bonjour,
je n'arrive pas à resoudre cette erreur ( objet specifie introuvable ).
Il bloque sur la ligne en rouge.
Code:
1 2 3 4 5 6 7
|
Function verifligne() 'Vérifie si la ligne est vide
Dim NoCol As Integer, NomControle As String
For NoCol = 1 To NbreColonnes
NomControle = "Textbox" & NoCol
verifligne = verifligne Or Me.Controls(NomControle).Text <> "" Next
End Function |
Adaptation avec des combobox
J'ai essayer d'utiliser plutot des combobox.
J'ai remplace tous les textbox par des combobox.
J'avais remplacer
Code:
NomControle = "Textbox" & NoCol
par
Code:
NomControle = "Combobox" & NoCol
cela n'a rien resolu.
De plus, mon tableau que je veux remplir à 19 colonnes dont trois possibilite de rentrer des valeurs manuellement. ( A - S )
Mes 16 combobox vont chercher les donnees à choisir en AA - AM.
Je pense qu'avoir deux tableaux sur la meme feuille pertube la verification sur le tableau à remplir. Je suis en train de regarder pour utiliser additem.
Mais cela ne resoud pas mon probleme sur ses quelques lignes de code.
J'ai besion un peu plus d'explication sur ce bout de programme.
Adaptation avec des combobox
bon j'ai pas mal avance. J'ai resolu un grand nombre de mes problemes.
J'arrive à inserer mon choix de comobobox sur une ligne et puis une autre ...,
effacer une ligne et detruire, par contre j'ai un probleme lorsque je quitte userforme.
Code:
1 2 3 4 5 6 7 8
| Sub Init() 'Renseigne les combobox pour la ligne NoLigne
Dim NoCol As Integer, NomControle As String
For NoCol = 1 To NbreColonnes
NomControle = "Combobox" & NoCol
Me.Controls(NomControle) = fl.Cells(NoLigne, NoCol).Value
Me.NuméroLigne = " Ligne " & NoLigne 'Affichage du N° de ligne
Next
End Sub |
il me met erreur execution 380 ( impossible de definir la propriete value. valuer de propropriete non valide .
avant j'avais Me.Controls(NomControle).text = fl.Cells(NoLigne, NoCol).Value
mais cela bloque sur text est rien ne marchait par contre.
Je ne sais pas faire apparaitre les bug par un code... desole
Adaptation avec des listbox ou combobox
J'ai utiliser msgbox : la reponse un FAUX sur ma derniere erreur
Je ne comprends pas trop le resultat ?????
mais si cela te parle ....
Adaptation avec des listbox ou combobox
Code:
1 2 3 4 5 6 7 8
| Sub Init() 'Renseigne les combobox pour la ligne NoLigne
Dim NoCol As Integer, NomControle As String
For NoCol = 1 To NbreColonnes
NomControle = "Combobox" & NoCol
Msgbox Me.Controls(NomControle) = fl.Cells(NoLigne, NoCol).Value
Me.NuméroLigne = " Ligne " & NoLigne 'Affichage du N° de ligne
Next
End Sub |
Je l'ai place devant la ligne souligne en jaune lors du debogage
Par contre, c'est pas pratique. Cela m'a tout bloque. Impossible de reprendre la main.
J'ai aussi essayer avec debug.print mais rien ne s'est passe. Cela imprime sur imprimante ? ( la mien est en rade ).
Adaptation avec des listbox ou combobox
Voici le resultat
NomControle = Combobox1
cellule = Véhicule
Merci pour les explications. C'est plus clair maintenant.
Est que cela te parle car pour moi je n'ai pas encore tout compris au niveau du code.
Adaptation avec des listbox ou comobobox
oui il existe bien ainsi que les 19 autres.
Adaptation avec des listbox ou combobox
voici le code du bouton quitter
Code:
1 2 3 4 5
| Private Sub QUITTER_Click()
ScrollBar1.Min = 1
ScrollBar1.Value = 1 'Ecrit les dernières modifs avant de quitter
End
End Sub |
puis cela renvoie au code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Private Sub ScrollBar1_Change() ''Ecrit les données dans la feuille de calculs
Dim NoCol As Integer, NomControle As String
If Not Initialisation Then
If Not verifligne() Then 'Ligne vide, accès à la suivante inhibé
If NoLigne < ScrollBar1.Value Then
ScrollBar1.Value = NoLigne
Exit Sub
End If
End If
'Ecriture dans la feuille de calculs des données affichées
For NoCol = 1 To NbreColonnes
NomControle = "combobox" & NoCol
fl.Cells(NoLigne, NoCol).Value = Me.Controls(NomControle).Value
Next
End If
NoLigne = ScrollBar1.Value
Call ScrollBarMax 'Nouvelle valeur de ScrollBar.max
Call Init 'Init des champs
Initialisation = False
End Sub |
C'est dans cette fonction que l'on renvoie à la fonction init
Adaptation avec des listbox
Si je comprend mieux ta fonction init.
Dans mon cas, je n'en aurais pas besoin ?
Mon nombre de colonne sera toujours egale à 19 .
colonne A est remplit par combobox1
colonne B est remplit par combobox2
colonne C est remplit par combobox3
colonne D est remplit par combobox4
colonne E est remplit par combobox5
colonne F est remplit par combobox6
colonne G est remplit par combobox7
colonne H est remplit par combobox8
colonne I est remplit par combobox9
colonne J est remplit par combobox10
colonne K est remplit par combobox11
colonne L est remplit par combobox12
colonne M est remplit par combobox13
colonne N est remplit par combobox14
colonne O est remplit par combobox15
colonne P est remplit par combobox16
colonne Q est remplit par combobox17
colonne R est remplit par combobox18
colonne S est remplit par combobox19
J'ai utilisé additem pour remplir chaque combobox 1 à 12 et 17 à 19 les donnes sont differentes.
Seul les combobox 13,14,15 ET 16 les donnes sont identique ( date du type 01/01/2007 ... 31/12/2007 )
J'ai pas trop compris pourquoi le bouton quitter pointe sur scollbar ?
Je cherche à sortir de l'userform.
Adaptation avec des listbox ou combobox
Voici ou j'en suit. J'adapterais cela apres pour remplir une 20 de page.
http://cjoint.com/?eptFMYuHVb
Il y a forcement le moyen d'optimiser le code mais j'en suis pas la. Je cherche à le faire fonctionner.
J'ai essayer avec ton code modifier tjs la meme erreurs 380.
Je n'ai pas encore dechiffrer toute la finesse de ton code.
dur dur :arf:
Je sais le resultat que je veux optenir mais comment l'expliquer avec des bouts de code ?????.
Je veux reproduire une insertion de ligne avec des donnees imposees.
Supprimer une ligne, l'effacer, copier une ligne existante et la modifier.
Et sortir de l'usrform. voila ce que je veux faire.
J'y suis preque mais cela plante en sortant. IL y a peut-etre des ligne de codes en trop, inutile...
Adaptation avec des listbox ou combobox
Peux-tu regarder si tu trouves des failles à mon code. Et me donner des conseils pour optimiser mon code. Merci.
Je sais c'est pas la bonne facon de proceder mais avec un exemple c'est plus facile pour moi .
http://cjoint.com/?epuFXZzScX
J'ai supprimer les deux lignes dont tu me parler et cela à resolu mon probleme erreur 380. Par contre j'ai quand meme garder init sinon cela me fait pas ce que j'aurait voulu dans la fonction supprimer ligne et pour inserer mes donnes sur une ligne avec le scrollbar.
Je pense que j'y suis arrive avec un peu de mal et sans trop avoir compris ton code de depart.
Adaptation avec des listbox ou combobox
Bonjour,
As-tu dechiffrer mon code ? Et vu comment marchait mon essai.
Je vais essayer de l'utiliser pour remplir mes 20 feuilles.
Puis essayer de resoudre mon probleme de selection de cellule :
Mon tableau commence ligne 3 ( 1 et 2 etant vide pour y place des boutons )
Ligne 3 et 4 ( titre )
Code:
ActiveSheet.UsedRange.Rows("5:" & ActiveSheet.UsedRange.Rows.Count).Select
Je suis oblige de tricher de temps en temps en mettant :
3 ald 5
Car il me decale ma selection. Et je me retrouve avec des lignes vides ou il me manque une ligne remplit.
Je pense que cela provient du deuxieme tableau sur une meme feuille.
Je pense resoudre cela avec cette essai.
:yaisse2: :king:
Adaptation avec des listbox
Slt,
Merci pour ta reponse
J'ai bien rajouter le bouton validation.
Part contre, j'ai pas bien compris si tu avais gardé le scrollbar.
Alors j'ai tester deux choses :
1°) sans scrollbar . Il me remplit la ligne 3 ald de commencer en 2 .
Et le bouton effacer et supprimer du coup ne sont plus utilisable car je choissit la ligne à effacer ou supprimer par le scrollbar.
2°) avec scrollbar et en supprimant la partie copie sur la ligne selectionner ( je crois si j'ai bien sélectionner la bonne partie du code )
Et la c'est la panique, Lorsque je lance l'usr si je pointe sur ligne 7 et je me positionne sur ligne 2 avec le scrollbar. Je valide mes selections pour remplir ligne 2 et la suprise est la suivant il me copie en ligne 7.
Je ne comprends pas trop ce que tu as améliorer ...
Peux tu me renvoyer ton fichier test.
Merci
[VBA-E] Adaptation avec des listbox et combobox
Bonjour,
Merci pour tes explications.
Je testerais tout cela quand j'aurais un peu plus de temps en fin de semaine ou ce week-end.
Si à partir de ce que tu m'as expliqué cela n'aboutit pas.
Il y a peut-etre une autre approche.
Suppression du scrollbar et demande à l'utilisateur le numéro de ligne à effacer, detruire ou modifier avec selection de celle-ci.
Il remplit ou modifit avec les valeurs du combo et valide. Je mets une routine pour supprimer les lignes vides . Et le tour est joué. :yaisse2: