Remplir des cellules à partir d'une combobox

Bonjour,

j'ai fait un planning d'activité, avec des listes déroulantes pour saisir les quelques 38 activités possibles.

Cette procédure n'est pas top, car les listes sont très petites, donc peu lisible, pas de sélection par touche...

1- J'ai donc rappatrié la liste dans une Combobox (lB1_Activités - appartenant à un UserForm / Barre d'outils). Seulement je ne sais pas écrire la procédure pour qu'une fois l'utilisateur ayant sélectionné des cellules (ex C5:F6) il aille dans la combobox choisir la saisie. j'ai essayé

'COLLER LE CHOIX DE LA COMBOBOX Activités SUR LES CELLULES SELECTIONNES
Private Sub lB1_Activités_Click()
Dim Val As Integer
    Val = lB1_Activités.Value   'attribue la valeur sélectionnée
End Sub

mais ça ne fonctionne pas - pire, ça bug si l'utilisateur tape une lettre pour arriver au type d'activité recherché...

Peut-être faut-il créer un bouton Ok dans le frame ?

2- je voudrais également choisir les plages où l'on peut utiliser la combobox (il s'agit d'un planning 1 ligne pour saisir l'activité du matin, une pour celle de l'après-midi et la 3ème pour les commentaires - il ne faut pas pouvoir saisir d'activité sur la 3ème ligne).

3- pour remplir ma combobox, j'ai rempli la propriété RowSource (AI9:AJ47 la liste présente 2 colonnes, mais seule la colonne 1 AI doit être saisie

Pour éviter d'avoir des lignes blanches dans la combobox (futures Activités possibles) j'ai écrit :

' Dimensionner la combobox selon le nb d'activités
Sub Nb_Activ()
Dim nb_Enreg As Integer
Me.lB1_Activités.Clear
With F_Menu
    .lB1_Activités.RowSource = "AI9:AI47"
    nb_Enreg = .lB1_Activités.ListCount
    .lB1_Activités.ListIndex = nb_Enreg
    .Show
End With
End Sub

Mais cela ne fonctionne pas

Je vous joins mon fichier - PS pour ouvrir la barre d'outil, j'ai affecter le racourci Ctrl + e

Je suis débutante - Merci d'expliciter vos réponses afin que je comprenne.

Bonjour,

Pour ta question 1 ce tuto devrait déjà te donner une idée

Tu peu employé un combo normal et gérer avec ListIndex.

Si ça te convient et que tu ne comprend pas le code tu dis, je verrais pour te l'adapter

A+

Bonsoir, ce tuto est très sympa, mais il ne correspond à mon besoin, j'ai une sélection multiple pour une saisie unique pas l'inverse ; quant à modifier le code pour le rendre compatible j'en suis bien incapable. Comme je l'ai dit, je suis débutante (c'est mon 1er projet).

A chaque fois que j'ai essayé l'aide, pour comprendre ce tuto, Excel répond" mot introuvable"...

Je préférerai rester sur mon projet.

Je ne vois pas ce que tu entends par combo 'normal', le mien me parait normal

il me faudrait qq chose de simple.

Merci

En utilisant le code du tuto, j'ai écris ça :

Private Sub CmdBut39_Ok_Click()
Dim i As Integer
Dim sVar As String
    For i = 0 To lB1_Activités.ListCount - 1
        If lB1_Activités.Selected(i) Then
            sVar = sVar & lB1_Activités.List(i)
        End If
    Next i
    If sVar <> "" Then
        ActiveCell.Offset(0,0) = sVar    'là il faudrait prendre une sélection multiple
    End If
End Sub

Maintenant, je peux choisir une activité et quand je clique sur Ok, l'activité s’inscrit, mais la sélection multiple ne fonctionne pas

Re,

J'ai eu un peu plus de temps pour examiner ton classeur.

Effectivement ma prem!ère réponse ne correspond pas.

Mais le contrôle dont tu parle n'est pas un comboBox mais une listeBox avec plusieur colonnes.

Le code pour remplir la liste

'/////////////////lB1_Activités
' Dimensionner la ListBox avec les activités, mise à jour automatique si ajouter activité
'dans la feuille Modèle
Sub Nb_Activ()
Dim nb_Enreg As Integer
    nb_Enreg = Sheets("Modèle").Cells(Rows.Count, "AI").End(xlUp).Row
    lB1_Activités.Clear
    lB1_Activités.RowSource = "Modèle!AI9:AJ" & nb_Enreg
    lB1_Activités.ListIndex = 0 'mettre le curseur en première ligne
End Sub

Tu dois supprimer les zéro qui se balade aux environs de la ligne 1776

Et supprimer la valeur que tu a mis dans la propriété RowSource de la listeBox.

Pour savoir ce qu'ont clic sur la ListBox..

'COLLER LE CHOIX DE LA COMBOBOX Activités SUR LES CELLULES SELECTIONNES
Private Sub lB1_Activités_Click()
Dim ChoixActivite As String
    If NoAction Then Exit Sub
    'Je comprend pas ce que tu veux faire
    ChoixActivite = lB1_Activités.List(lB1_Activités.ListIndex)   'attribue la valeur sélectionnée
End Sub

Vois déjà ça.

A+

Bonsoir

Regardes si cela peut convenir

Bonjour

J'avais commencé à regarder ce fichier et me suit résigné lorsque j'ai vu que l'on avait déjà posté.

Lhermite , Banzai avez vous le même souci d'ouverture, le fichier pédale pas mal à son ouverture

Pour Mouftie, évite le Rowssource qui pose souvent des soucis. Vois ce lien par exemple --> https://forum.excel-pratique.com/post156637.html

Amicalement

Bonjour,

Merci Banzai, c'est exactement ce que j'aurai voulu faire

Il n'y a plus qu'une chose, c'est la sélection multiple qui ne fonctionne pas.

Il faut que sur la feuille du mois de saisie, l'utilisateur va sélectionner, par exemple la plage E12:L13 (ce que j'appelle sélection multiple), pour saisir "l'activité" Abs.

Or actuellement seule la première cellule E12 prend l'activité Abs ; il faut donc faire de la recopie ou du copier/ coller.

Merci une nouvelle fois pour tes explications claires et pertinente.s ;

@ si tu as des explications / sur la lourdeur n'hésite pas. Pour moi, ça s'ouvre très rapidement, par contre, hier soir, je travaillais chez moi, sur une petit portable qui n'arrêtait pas de "me" dire "Mémoire insuffante" quand je cliquais dans la liste déroulante.

Merci à tous

Bonjour

Pour une sélection multiple, remplaces ta macro existante par celle-ci

'COLLER LE CHOIX DE LA COMBOBOX Activités SUR LES CELLULES SELECTIONNES
Private Sub lB1_Activités_Click()
Dim Ligne As Long
Dim Colonne As Integer
Dim Cel As Range

  Application.ScreenUpdating = False
  For Each Cel In Selection
    Colonne = Cel.Column     ' Plus facile à manipuler
    Ligne = Cel.Row          ' Plus facile à manipuler
    ' Tests de l'éligibilité de la cellule séléctionnée
    ' Ligne entre 12 et 88
    ' Seulement les lignes 1 et 2 du groupe de 3
    ' Colonne entre 3 et 33
    If (Ligne > 11) And (Ligne < 89) And ((Ligne - 12) Mod 3 < 2) And (Colonne > 2) And (Colonne < 34) Then
      Cel = Me.lB1_Activités
    End If
  Next Cel
End Sub

@Dan : Pas de soucis de lenteur, juste un affichage lorsque je bascule dans l'éditeur, je fais ok et puis après ça roule

memoire insuffisante

Re tous,

Ce qui donne cette erreur...

Private Sub workook_open()
    Load UserForm   ' Mise en mémoire tampon du userForm F_Menu
    UserForm.Show  ' Affiche F_Activités
End Sub

Et chez moi ça ralenti drôlement Excel.

A+

Bonjour à tous,

Merci Dan, mais que proposes-tu ? stp Parce que tout à l'heure à chaque fois que je cliquais dans la userForm, j'avais droit au message de mémoire insuffisante.

J'ai supprimé,

Private Sub workook_open()
    Load UserForm   ' Mise en mémoire tampon du userForm F_Menu
   UserForm.Show  ' Affiche F_Activités
End Sub

on peut toujours faire remonter le UserForm avec le raccourci ou avec le bouton. Ce qui suffit parfaitement. Je teste pour voir si je n'ai plus de message de mémoire insuffisante ; je vous tiens au courant.

Pour remplir ma listebox, j'ai choisi la solution de Lermite, qui remplit ma listeBox sur 2 colonnes (je n'ai pas réussi à modifier le code de Bonzai - mais j'y arriverai un jour... ).

Pour la saisie à partir de la listeBox sur une sélection multiple tout en interdisant l'accès à certaines cellules, le code Bonzai fonctionne parfaitement, Je ne suis pas encore capable de l'écrire de moi-même, mais là encore les explications sont bonnes, j'y arriverai - il faut que j'approfondisse l'opérateur Mod que je n'ai jamais utilisé.

ENCORE UN GRAND MERCI A VOUS TOUS.

Bonjour

lermite a écrit :

Re tous,

Ce qui donne cette erreur...

Code: Tout sélectionner

Private Sub workook_open()

Load UserForm ' Mise en mémoire tampon du userForm F_Menu

UserForm.Show ' Affiche F_Activités

End Sub

Ce code n'est jamais exécuté, je ne comprends pas pourquoi il provoque le message d'erreur

Un mystère de plus (pour moi)

Si tu veux l'UF au démarrage tu peu mettre..

Private Sub workook_open()
      F_Menu.Show  
End Sub

A+

Bonjour

lermite a écrit :

Si tu veux l'UF au démarrage tu peu mettre..

Code: Tout sélectionner

Private Sub workook_open()

F_Menu.Show

End Sub

Rectification il faut WorkBook et non Workook

Pour cela que j'ai dit que cette macro n'était pas en cause

Je l'ai enlevé et toujours le même problème

je n'avais pas détecter l'erreur de syntaxe

Effectivement ce code n'est pas utiliser.

Mais j'ai rectifier avec WorkBook et bizarrement je n'ai plus de ralentissement. ??

A+

Re,

Merci Dan, mais que proposes-tu ? stp Parce que tout à l'heure à chaque fois que je cliquais dans la userForm, j'avais droit au message de mémoire insuffisante.

Bon je me suis un peu penché sur le souci de lenbeur à l'ouverture. On peut amélirore en modifiant quelques macros dans l'USF. Mais comme je vois que le fil est cloturé merci de me dire si je propose quelque chose.

Banzai, l'accès à VBE n'est pas lent chez moi. Seule l'ouverture du fichier.

Lhermite, j'ai toujours le ralentissement.

Amicalement

re,

Si, Si, Dan, je suis toujours intéressée par l'amélioration du code .

Surtout que c'est un problème important.

J'ai simplement cloturé ma demande : "Remplir des cellules à partir d'une combobox" (qui est d'ailleurs une ListeBox...)

Il ne fallait pas ?

Désolée je ne connais pas bien les pratiques du site.

Faut-il ouvrir une nouvelle question ? ou peut-on finir celle-ci ?

Bonsoir,

j'ai enlevé la coche "Résolu", car j'ai trouvé un gros pb.

En effet, qq soit la feuille ou la cellule où l'on se trouve, quand on ouvre le UserForm, cela copie l'activité sur la cellule ou on se trouve. Ex: je suis sur la feuille 'menu' en S:12 et que je clique sur le bouton qui affiche la barre (ou ctrl + e), ma cellule prend la valeur RiPre

   If (Ligne > 11) And (Ligne < 89) And ((Ligne - 12) Mod 3 < 2) And (Colonne > 2) And (Colonne < 34) Then
      Cel = Me.lB1_Activités
    End If

Je suppose qu'il faut interdire l'éligibilité aux feuilles Menu et Aide ?

Bonsoir

A essayer

Re,

Si, Si, Dan, je suis toujours intéressée par l'amélioration du code . Surtout que c'est un problème important.

Faut-il ouvrir une nouvelle question ? ou peut-on finir celle-ci ?

Ok. Pas besoin d'ouvrir une nouvelle question car de toute façon on a besoin du fichier.

Voici déjà quelques remarques

  • Déplace la SUB MENU dans thisworkbook et mets dans un module. Oublie pas ensuite de réassocier le bouton qui se trouve sur ta feuille Menu à cette macro.
  • Les couleurs grises inutiles dans tes feuilles sont à supprimer.
- sélectionne une colonne entière (AM)

- sur ton clavier CTRL + SHIFT + flèche droite pour sélectionner le reste de la feuille

- click droite, choisis "Supprimer".

- Pour les lignes, sélectionner une ligne (86 en menu et 93 dans modèle, puis CTRM + SHIFT + flèche vers le bas, ensuite choisir Supprimer

- Dans la feuille Modèle et 09-12 en A3, il y un objet parasite (un petit F), clqiue dessus puis supprimer les

A noter que dans chaque feuille en ligne 1176, il y avait des chiffres 000 (???). Il seront supprimé si tu appliques les suggestions ci-avant.

J'ai aussi testé le fichier sous excel 2000, il fonctionne plus vite

Je regarde pour le reste.

Amicalement

Bonjour,

Je ne sais pas ce qui se passe, mais depuis ce matin, je n'arrive pas à envoyer mes messages, j'ai un rafraichissement de l'écran qui vide ma réponse, au moment où je clique sur envoyer...

Je recommence donc pour la 3ème fois.

@ Dan

J’avais déjà commencé un nettoyage du fichier et du code, vu qu’au départ je suis parti d’une application téléchargée sur Excelabo, dont je n’ai finalement gardé que le calendrier perpétuel, l’UserForm et la feuille modèle que j’ai complètement modifiée…

J’ai également supprimé quelque mise en forme conditionnelle devenue inutile.

Il y a qq chose que je ne suis pas sure d’avoir bien compris, tu dis :

Déplace la SUB MENU dans thisworkbook et mets dans un module. Oublie pas ensuite de réassocier le bouton qui se trouve sur ta feuille Menu à cette macro.

Or j’ai bien dans thisworkbook
Sub VoirMnu()
Range("C5").Select  'évite la copie sur des cellules actives
F_Menu.Show
End Sub

Le bouton ‘Barre de Menu’ y est d’ailleurs bien affecté. Parles-tu d’autre chose ?

J’en profite pour te poser une question de novice.

Est il préférable d’écrire la procédure directement dans la feuille UserForm ou dans un module et y faire appel (par Call) dans le urserForm_click (ou autre change) ?

Y a-t-il une incidence sur le poids, la compréhension, le déroulement ou autre ?

@ Bonzai,

Merci, j’ai du mal à penser à select case , c’est le manque d’expérience.

Cependant, je pense qu’il va falloir passer par un bouton Ok dans la ListBox ‘Activités’, en effet, il y a un gros risque d’effacer toute une saisie par mégarde.

Notamment si on est sur une feuille de saisie avec une sélection active et que l’on ouvre la barre de menu ; toute la sélection s’efface pour prendre la saisie de la 1ère activité de la liste…

J’ai bidouillé, en forçant la sélection de la cellule « C5 » à l’ouverture de la barre (C5 étant interdite à la saisie), mais ce n’est pas terrible.

J’ai également un problème que je ne comprends pas si j’ai sélectionné une cellule, que je click sur l’activité, je change de cellule, je reclique sur la même activité, cette dernière n’est pas collée, je dois choisir une autre activité, puis recliqué sur la bonne activité…

Merci encore pour votre compréhension et votre bénévolat. (ps, je ne me relis pas... j'envoie)

Rechercher des sujets similaires à "remplir partir combobox"