Remplir des cellules à partir d'une combobox
Re
Le bouton ‘Barre de Menu’ y est d’ailleurs bien affecté. Parles-tu d’autre chose ?
Ta sub n'est pas bien placée. Je voulais dire qu'il faut la déplacer dans un module. Celui existant ou un nouveau.
Une fois fait, il faut réassocier ton bouton se trouvant dans la feuille MENU car le fait d'avoir déplacé le code, fait perdre le lien entre ton bouton et le code.
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 ?
Pas d'incidence sur le poids mais sur la compréhension.
Pour ma part moins tu mets de code dans tes objets moins tu risques de perdre tes codes en cas par exemple d'une erreur de suppression d'une feuille ou d'un userform.
Exemple si tu veux changer une feuille ou une userform et supprimer l'ancienne puis que tu sors de ton fichier et que tu as un code qui enregistre automatiquement ton fichier à la fermeture. Patratra tu perdras tous les codes qui étaient dans ton objet....
Chacun fais comme il veut mais, d'une manière générale pour mes applis, je mets le max dans les modules et le min dans les objets. Ensuite je fais appel aux codes par l'instruction CALL.
Pour ton fichier, j'ai enfin trouvé ce qui ne fonctionne pas. En fait sur les deux feuilles 09-12 et Modèle, tu as 2011 objets
Fais ceci pour les supprimer :
- Sélectionne la feuille 09-12
- clique sur le bouton RECHERCHE dans la barre d'outils
- choisis l'option "sélectionner les cellules"
- Coche la case "Objets" puis clique sur ok (cela va te sélectionner les objets cachés en A3)
- Appuie sur la touche DELETE
- Refais les mêmes opérations pour la feuille MODELE
- Enregistre ton fichier
Réouvre le pour voir la différence
Si ok, je te donnerai les autres modifs à faire.
A te relire
Dan, là tu m'impressionne !
Comment sais-tu qu'il y a 2011 objets ?
Avant, j'avais un fichier de 214 Ko
Après, j'ai un fichier de 145 Ko. à la première recherche, Excel m'a fait supprimer mes images de titre Planning, au second passage, il me semble qu'Excel a sélectionné 2 nouveaux objets seulement ? 3ème passagre plus rien.
J'ai remis les images dans le titre du planning, je passe à 153 Ko.
Quels procédures doit-on écrire dans ThisWorkbook ? par différence avec Module ?
re
Comment sais-tu qu'il y a 2011 objets ?
J'ai passé ton fichier à la moulinette avec un code.
Chez moi le poids de ton fichier est passes de 1.54 Mo à 120 ko !
Quels procédures doit-on écrire dans ThisWorkbook ? par différence avec Module ?
Les procédures dans Thisworkbook sont des procédures événementielles. Elles agissent sur tout le fichier. Exemple des actions demandées à l'ouverture ou fermeture du fichier ou sur toutes les feuilles en même temps ou par exemple lorsque l'on veut qu'un même code soit répété sur activation des feuilles se trouvant dans le classeur
Les procédures sont de type PRIVATE lorsque pour construire tes codes tu utilises les menus dans VBA.
Les procédures dans les modules sont de type PUBLIC et sont utilisables dans tout le fichier mais tu peux les appeler depuis tes objets feuilles, thisworkbook, un bouton ou une barre de menu spécifique. Attention que l'on peut aussi rendre des macros Private depuis un module.
En gros tu mets dans un objet un petit code qui appelle un autre placé dans un module et que tu peux appeler depuis un autre objets Feuille, USForm etc...
Au final tout est question de gestion et d'organisation personnelle du fichier.
Reste quelques modifications à mettre dans l'USF mais il faudrait peut être me donner ton dernier fichier modifié à la suite des codes de Banzai et Lhermite.
A te relire
Re tous,
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é…
Excel considère que la sélection est faite et empêche une deuxième sélection.
Si tu tape ENTER au lieu de clic la sélection se fait mais le focus est passer à la liste suivante.
Tu peu simuler ça en modifiant le ListIndex
'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
Colonne = ActiveCell.Column ' Plus facile à manipuler
Ligne = ActiveCell.Row ' Plus facile à manipuler
If (Ligne > 11) And (Ligne < 89) And ((Ligne - 12) Mod 3 < 2) And (Colonne > 2) And (Colonne < 34) Then
ActiveCell = Me.lB1_Activités
End If
If lB1_Activités.ListIndex < lB1_Activités.ListCount Then
lB1_Activités.ListIndex = lB1_Activités.ListIndex + 1
Else
lB1_Activités.ListIndex = lB1_Activités.ListIndex - 1
End If
End SubA+
Bonsoir,
@ Dan, je ne comprends pas ton fichier à 154 Mo, ma plus grosse version n'atteint pas 400 Ko.
Merci pour tes leçons de "code"
@ Lermitte,
Je pars en WE, je modifierai le code selon tes conseils demain (mais je ne suis pas sur d'avoir de la connexion).
Sinon bon WE à tous et je vous tiens au courant dès que possible.
PS je joins ma dernière version
Bonsoir Lermite,
j'ai eu un peu de rab, j'ai essayé ton code, mais j'ai une erreur, peut-être l'ai-je mal inserré, on n'avait pas la même version :
'COLLER LE CHOIX DE LA ListeBox des Activités SUR LES CELLULES SELECTIONNES HORS CTN FEUILLES
Private Sub lB1_Activités_Click()
Dim Ligne As Long
Dim Colonne As Integer
Dim Cel As Range
Select Case ActiveSheet.Name ' Select case = si case vraie on sort.
Case "Menu", "Modèle", "Aide" ' Toutes les feuilles à exclure
Case Else
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
' Dégogage de l'impossibilité de sélectionner 2 fois la même activité
If lB1_Activités.ListIndex < lB1_Activités.ListCount Then
lB1_Activités.ListIndex = lB1_Activités.ListIndex + 1 'ERREUR 380 SUR CETTE LIGNE
Else
lB1_Activités.ListIndex = lB1_Activités.ListIndex - 1
End If
Next Cel
End Select
End Sub
Visual renvoie l'erreur d'exécution '380' Impossible de définir la propriété ListIndex. Valeur de propriété non valide.
Merci
Tu dois mettre le code APRES End Select
Mais même comme ça ça ne devrait pas mettre d'erreur.
Quel est le libellé de l'erreur
J'avais essayé, mais ça ne change rien - Même erreur
''////////////////////////////////////lB1_Activités
'INTERDIT LA SAISIE D ACTIVITE SUR LES ZONES COMMENTAIRES PAR LA LISTEBOX lB1_Activités.
'COLLER LE CHOIX DE LA ListeBox des Activités SUR LES CELLULES SELECTIONNES HORS CTN FEUILLES
Private Sub lB1_Activités_Click()
Dim Ligne As Long
Dim Colonne As Integer
Dim Cel As Range
Select Case ActiveSheet.Name ' Select case = si case vraie on sort.
Case "Menu", "Modèle", "Aide" ' Toutes les feuilles à exclure
Case Else
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 Select
' Dégogage de l'impossibilité de sélectionner 2 fois la même activité
If lB1_Activités.ListIndex < lB1_Activités.ListCount Then
lB1_Activités.ListIndex = lB1_Activités.ListIndex + 1 'ERREUR 380 SUR CETTE LIGNE
Else
lB1_Activités.ListIndex = lB1_Activités.ListIndex - 1
End If
End SubRe,
En chargeant le fichier V4, je viens de voir qu'il y a une liaison avec un fichier "copie de jc-Planning",.
C'est quoi ce fichier là ?? Je n'avais pas cela dans les précédentes versions.
A te relire
Désolé,
J'emploi Le système avec Listindex en Visual Basic mais Excel (VBA) ne le supporte pas.
Faudra trouver une autre astuce.
C'est le fichier que j'ai téléchargé pour commencer.
Comme je l'ai dis plus haut je n'ai gardé que le calendrier et j'ai fait ma feuille modèle à partir du fichier mais dans garder grand chose...
Je suis désolée si ça parasite.
Je croyais avoir bien nettoyer...
Merci quand même Lermite.
Bon WE
Merci quand même Lermite.
Bon WE
Re,
Je viens de voir que la version 4 -1 que tu as postée, comporte des modifications au niveau des noms de combo dans l'USF.
Merci de me dire si d'autres modifications sont faites depuis cette version car si je te propose un code ce que j'avais fait sur la version 3, cela pourrait te donner des bugs si nos versions de travail sont différentes.
A te relire
Bonjour Dan,
La version 4.1 est la dernière version.
Merci
Re,
Ci-joint le fichier modifié en version 4-2.
Les modifications sont essentiellement :
- Suppression de la macro Private Sub UserForm_Activate() au profit de Private Sub UserForm_Initialize()
- Suppression de la macro Private Sub CB5_F4_MoisOnglet_DropButtonClick. Instruction incorporées dans Userform Intialize
- Suppression d'une liaison (cf mon post précédent)
- Ajout de variable Encours dans d'autres macros
A te relire
Bonjour Dan,
TROP FORT !
J'ai créé 25 mois complètements remplis d'activités pour 22 personnes (ça n'arrivera jamais dans la réalité) je n'ai aucun ralentissement, aucun message de mémoire insuffisante...
Super fluide.
La présentation s'est très bien déroulée, mes collègues n'on pas l'habitude qu'on leur fasse des petits outils pour tous les jours.
J'espère qu'on m'en demandera encore et que j'aurais moins besoin de vous...
Il reste plus que le petit pb de saisie à rafraîchir :
quand on est sur une feuille de saisie d'activité, (dans une plage autorisée bien sûr), qu'on a cliqué sur une activité X, qu'on se déplace sur une autre cellule et qu'on clique sur la même activité X, il ne se passe rien. Il faut choisir une autre activité Y puis recliquer sur l'activité X pour qu'elle s'affiche.
Ce n’est pas grave mais c'est moins bien.
PS : j'ai ajouté un "masquage" par défaut de la feuille modèle - on peut l'activer par un bouton sur la feuille Menu (en N55). Elle se déverrouille pdt l'exécution de la macro de création d'onglet et se déverrouille.
Re
Il reste plus que le petit pb de saisie à rafraîchir :
quand on est sur une feuille de saisie d'activité, (dans une plage autorisée bien sûr), qu'on a cliqué sur une activité X, qu'on se déplace sur une autre cellule et qu'on clique sur la même activité X, il ne se passe rien. Il faut choisir une autre activité Y puis recliquer sur l'activité X pour qu'elle s'affiche.
Ce n’est pas grave mais c'est moins bien.
Oui j'avais remarqué cela en utilisant l'appli mais aussi (si j'ai bien compris) en lisant le post précédent de Lhermite.
En fait, tu n'as pas de choix car le click est plutôt à voir comme une sélection dans ton userform qui est à confirmer par un bouton.
Dans ce cas il te faudrait rajouter un bouton sur ton USF pour la confirmation du choix effectué.
Par contre tu peux contourner ton problème par le double click dans cette listebox
Si cela ne te gêne pas, fais comme ceci :
Remplace
Private Sub lB1_Activités_Click() Par :
Private Sub lB1_Activités_DblClick(ByVal Cancel As MSForms.ReturnBoolean)Une fois effectué, relance l'Userform puis fais tes choix par double click dans la listbox
Si ok merci de cloturer le fil
Amicalement
Re,
Finalement ma première réponse n'était pas tellement à côté de la question.
Dés lors j'avais commencer de finaliser une appli en ce sens mais Dan à été plus rapide que moi.
Mais bon, j'explique quand même..
Faire une sélection sur la grille affiche la barre d'outils à côté de la cellule sélectionnée.
Cliquer sur un bouton cache la barre d'outils et (pas encore finaliser) les jours concernés par la sélection sont inscrit.
Avantage :
Pas de barre outils en permanence sur l'écran
Pas besoin de dérouler la liste pour trouver le type souhaité
Plus de problème pour recliquer sur le même type.
Si intéresser je posterais le classeur quand fini.
A+
Bonsoir Dan,
Je sors du bureau du Directeur, qui vient de nous féliciter Excel-Pratique et moi...
Tout est donc ok, juste une dernière question dans tes modifs, tu mets tout au début
Dim Encours As Booleanpuis au cours du code, tu précises dans certaines procédures
Encours = True
'....
'Parfois mais pas toujours
Encours = FalseJe ne comprends à quoi ça sert, ni comment on doit l'utiliser. Qu'est-ce qui est encours ?
si tu veux bien me l'expliquer, ce serait sympa.
De toute façon Merci à tous et j'espère à bientôt pour un prochain projet...
Bonsoir Lermite,
Oui, je suis aussi intéressée par cette solution.
Maintenant que mon directeur est content, je suis chargée de faire la concaténation des plannings...
Et puis de toute façon, j'apprends, donc toutes les subtilités sur un même projet sont très formatrices.
Donc si tu veux bien le faire, je t'en remercie d'avance.
re,
Je ne comprends à quoi ça sert, ni comment on doit l'utiliser. Qu'est-ce qui est encours ?
Exemple Dans le code de ton userform, l'instruction --> CB3_F3_Année.Text = Range("ChoixAn").Value va charger la combobox CB3_F3 et donc changer la valeur de cette Combo.
Ce changement va déclencher automatiquement le code Private Sub CB3_F3_Année_Change().
Pour cette raison on met cette variable Encours à True dans la Private Sub Initialize et on ajoute dans le code Private CB3...change () une instruction IF encours = True Then Exit sub qui permet au code de ne pas être exécuté (Intruction Exit Sub).
A la fin du code on met cette variable à False évidemment, sinon elle restera à true et si tu veux choisir une valeur dans ta combobox C3_F3, rien ne se passera.
Vois ce lien avec une explication que je donnais à Yvouille au travers d'un exemple --> Variable Boolean - Flag
La variable étant nommée Flag au lieu de Encours dans ton cas
Amicalement
Merci Dan,
C'est un peu plus clair, effectivement.
J'y reviendrais dans quelque temps histoire de voir si j'ai bien compris, je l'ai noté...
A Bientôt