Importer des noms d'une ListBox dans Excel Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
P
Peponne31
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 30 mars 2007

Message par Peponne31 » 15 septembre 2016, 19:49

Bonjour,

Je suis sous Windows 10 et Excel 2003.
J'ai créé un userform qui contient un combobox et un commandboutton et lorsque je clique sur le commandbutton, j'ai un message d'erreur.
Voici ce que j'ai fais:

Private Sub UserForm2_Initialize()
Dim ListeDéroulante As CboxPilotes
Dim vAdresseDernierPilote
vAdresseDernierPilote = Range("A20").Address.End(xlUp).Address
With CboxPilotes.ListeDéroulante
.RowSource = ("A13:") & vAdresseDernierPilote
.ListIndex = 0
End With
End Sub
Private Sub bAjout1_Click()
Dim vNouvelleCellule
vNouvelleCellule = Range("A13").End(xlDown).Offset(1, 0).Address
Range(vNouvelleCellule) = CboxPilotes.ListeDéroulante
End Sub

Merci si quelqu'un peut m'aider.
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 445
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 16 septembre 2016, 02:23

Bonjour,

Tu ne dis pas quelle est l'erreur.
Ni sur quelle ligne.
Tu ne précises pas la nature de tes éléments personnalisés : CboxPilotes, ListeDéroulante
Le code que tu fournis est probablement incomplet...
(NB- Un code indenté + utilisation de la balise code dans ton post auraient été bienvenus, moins brouillon)
Pas de fichier !
Bref, si tu fais le max pour ne pas avoir de réponse, ou pas de réponse efficace, c'est la bonne voie :D

Tu peux toujours supprimer un Address parasite intercalé à la 4e ligne...
A part ça...
P
Peponne31
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 30 mars 2007

Message par Peponne31 » 16 septembre 2016, 10:59

Bonjour MFerrand,
Window 10, Excel 2003.
Je joint le fichier en pièce jointe. Je souhaiterai lorsque je clique sur le bouton (Choix Pilotes) choisir un pilote dans la liste qui s'ouvre et par un clic sur(Ajouter) qu'il s'insère dans la cellule A14 et ainsi de suite jusqu'à A21 et en parallèle, incrémenter le compteur situé en B10.
J'ai trouvé ce code sur un livre d'Excel 2003.

Merci de prendre de ton temps pour m'aider.
Planing MRC Karting Muret.xls
(56.5 Kio) Téléchargé 20 fois
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 445
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 16 septembre 2016, 11:47

Je modifie légèrement ce que j'ai dit précédemment... Reprends ton livre et trouve les éléments que tu as oublié d'intégrer ou qui te sont passés inaperçus, et qui devraient permettre de définir les données manquantes (qui génèrent erreur parce qu'elles manquent dans ton fichier).
A défaut il sera plus sage de les virer pour construire simplement la procédure que tu souhaites.
P
Peponne31
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 30 mars 2007

Message par Peponne31 » 16 septembre 2016, 20:54

Re,

J'ai suivi ton conseil et j'ai réécris le programme en relisant le livre depuis le début, mais je bute sur une ligne d'inscription que voici:
Sheets("Feuil1").Cells(14, 1).Value = Me.Constructeur.Value
Elle inscrit bien le nom du pilote en A14 mais à la validation du second nom, elle efface le premier pour mètre le suivant à sa place.
Comment modifier cette ligne pour avoir le second nom en dessous du premier et ainsi de suite...
Merci encore.
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 445
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 17 septembre 2016, 00:51

N'ayant pas lu le livre, je ne sais ce qu'est Constructeur : si on est dans le Userform, c'est sans doute le nom donné à un contrôle.
Mes déductions s'arrêtent là !
P
Peponne31
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 30 mars 2007

Message par Peponne31 » 30 septembre 2016, 20:03

Bonjour,
Je suis sous Windows 10 Excel 2003.
De retour de vacances, je me permet de reprendre le fil de cette discussion. Comme MFerrand à supposé, c'est le nom d'un comboBox.
Par appuie sur le bouton OK, j'inscrit le nom d'un pilote dans A14, lors de la saisie d'un second pilote, je voudrai qu'il vienne s'inscrire en dessous du premier pilote donc en A15 et en suivant pour chaque ajout que j'écris au coup par coup mais je ni parviens pas. Je me permet de joindre le code que j'ai recréé parmi divers ouvrages.
C'est la ligne 40 que je ne parviens pas à modifier.
Merci encore pour votre aide.

Private Sub OK_Click()
10 ListeDeroulanteModifiable.Hide
20 Application.ScreenUpdating = False
' Constructeur est le nom donné au contrôle ComboBox
30 Marque = Constructeur.Value

' Stockage du choix effectué dans la liste déroulante en T6 qui viens s'inscrire à partir de A14
40 Range("A14").Value = Marque ' C'est sur cette ligne que je voudrais faire ma modification.
50 Columns("T:T").Select

60 On Error GoTo Ajoute
70 Selection.Find(What:=Marque, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
80 Range("T6").Select
90 Exit Sub
100 Ajoute:
' Une nouvelle marque étant ajoutée, ajout de celle-ci à la fin de la colonne T
110 Range("T6").End(xlDown).Offset(1, 0).Value = Marque
120 Range("T6").Select
End Sub
Private Sub Annuler_Click()
120 ListeDeroulanteModifiable.Hide
End Sub
Avatar du membre
grisan29
Membre impliqué
Membre impliqué
Messages : 1'265
Inscrit le : 26 janvier 2010
Version d'Excel : 2013 pro FR

Message par grisan29 » 30 septembre 2016, 20:54

bonsoir MFerrand, peponne
quand je poste un code je le sélectionne et j'appui sur le bouton "code " que l'on ne peux pas rater en écrivant une réponse
c'est écrit sur le 5ème bouton a partir de la gauche
je reprends donc ton code sans l'indenter
Private Sub OK_Click()
10 ListeDeroulanteModifiable.Hide
20 Application.ScreenUpdating = False
' Constructeur est le nom donné au contrôle ComboBox
30 Marque = Constructeur.Value

' Stockage du choix effectué dans la liste déroulante en T6 qui viens s'inscrire à partir de A14
40 Range("A14").Value = Marque ' C'est sur cette ligne que je voudrais faire ma modification.
50 Columns("T:T").Select

60 On Error GoTo Ajoute
70 Selection.Find(What:=Marque, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Activate
80 Range("T6").Select
90 Exit Sub
100 Ajoute:
' Une nouvelle marque étant ajoutée, ajout de celle-ci à la fin de la colonne T
110 Range("T6").End(xlDown).Offset(1, 0).Value = Marque
120 Range("T6").Select
End Sub
Private Sub Annuler_Click()
120 ListeDeroulanteModifiable.Hide
End Sub
et voila il est beaucoup plus lisible du coup
après pour indenter un code j'utilise ce site http://www.vbindent.com/?indent et ce qui donne
Private Sub OK_Click()
	10 ListeDeroulanteModifiable.Hide
	20 Application.ScreenUpdating = False
' Constructeur est le nom donné au contrôle ComboBox
	30 Marque = Constructeur.Value
	
' Stockage du choix effectué dans la liste déroulante en T6 qui viens s'inscrire à partir de A14
	40 Range("A14").Value = Marque ' C'est sur cette ligne que je voudrais faire ma modification.
	50 Columns("T:T").Select
	
	60 On Error GoTo Ajoute
	70 Selection.Find(What:=Marque, After:=ActiveCell, LookIn:=xlFormulas, _
	LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
	MatchCase:=False).Activate
	80 Range("T6").Select
	90 Exit Sub
	100 Ajoute:
' Une nouvelle marque étant ajoutée, ajout de celle-ci à la fin de la colonne T
	110 Range("T6").End(xlDown).Offset(1, 0).Value = Marque
	120 Range("T6").Select
End Sub
Private Sub Annuler_Click()
	120 ListeDeroulanteModifiable.Hide
End Sub
encore plus lisible n'est ce pas et plus facile de détecter les erreurs

bonsoir Peponne
le code indenter permets de voir déja que le screenupdating ne reviens pas en fin de code car il maque
Application.ScreenUpdating = True
a mettre au-dessus de
end sub
les 2
range ("T6").select
sont superflu et mis par l'enregistreur
P
Peponne31
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 30 mars 2007

Message par Peponne31 » 4 octobre 2016, 13:32

Re,

J'ai bien pris en compte vos remarques, et j'ai bien modifié les lignes comme conseillé mais je ne parviens toujours pas à mètre les pilotes les un au dessous des autres. Quelqu'un pourrait m'aider svp.
Cordialement
Avatar du membre
grisan29
Membre impliqué
Membre impliqué
Messages : 1'265
Inscrit le : 26 janvier 2010
Version d'Excel : 2013 pro FR

Message par grisan29 » 4 octobre 2016, 16:38

bonjour Peponne31
et est ce que comme ceci ça ira
Private Sub bAjout1_Click()
	Dim lig As Integer
	UserForm1.Hide
	With Sheets("feuil3")
		Application.ScreenUpdating = False
' Constructeur est le nom donné au contrôle ComboBox
		Marque = CBx_conxtructeur.Value
		
' Stockage du choix effectué dans la liste déroulante en T6 qui viens s'inscrire à partir de A14
		lig = .Range("A" & .Rows.Count).End(xlUp)(2).Row
		If lig < 14 Then lig = 14
		Range("A" & lig) = Marque ' C'est sur cette ligne que je voudrais faire ma modification.
'Range("A14").Value
		
		.Columns("T:T").Select
		
		On Error GoTo Ajoute
		Selection.Find(What:=Marque, After:=ActiveCell, LookIn:=xlFormulas, _
		LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
		MatchCase:=False).Activate
'Range("T6").Select
		Exit Sub
		Ajoute:
' Une nouvelle marque étant ajoutée, ajout de celle-ci à la fin de la colonne T
		
		.Range("T6").End(xlDown).Offset(1, 0).Value = Marque
'Range("T6").Select
		Application.ScreenUpdating = True
	End With
End Sub
dans ton code l'userform1 se nomme listedéroulante et donne un bug du a ce nom, pareil pour ta combobox
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message