Ma ComboBox ne se met plus à jour
Bonjour,
J'ai effectué qq modifs à mon projet (suite aux ddes des utilisateurs) au niveau des activités et de la mise en forme du 'Modèle', donc rien au niveau de ma comboBox qui met à jour les onglets créés.
Pourtant, depuis ces modifications, la combobox ne se met plus à jour automatiquement ; elle ne se met à jour que lorsqu'on ferme le UserForm et qu'on le rouvre.
Voici le code qui fonctionnait avant et qui ne fonctionne plus :
Private Sub UserForm_Initialize()
Dim dlg As Long, tablo
Dim i As Byte
Encours = True
...
With Me.CB5_F4_MoisOnglet
'.Clear ' On efface la liste existante AVEC OU SANS, ça ne change rien
For i = 1 To Sheets.Count ' Pour toutes les pages du classeur
Select Case Sheets(i).Name
Case "Menu", "Modèle" ' La liste des pages que l'on ne veut pas afficher
Case Else
.AddItem Sheets(i).Name ' On ajoute le nom
End Select
Next i
End With
Encours = False
End Sub
' PARAMETRES DE LA BOITE F4_Onglets
Private Sub CB5_F4_MoisOnglet_Change()
' Lors du changement dans la ComboBox
If Me.CB5_F4_MoisOnglet.ListIndex = -1 Then Exit Sub ' Si l'entrée n'est pas dans la liste on quitte
'Encours = True 'AVEC OU SANS, ça ne change rien
Sheets(Me.CB5_F4_MoisOnglet.Value).Select ' Sélection de la page
End SubJe vous joins mon fichier.
J'ai également une question à poser : on m'a demandé d'ajouter 6 lignes libres avant le tableau de saisie d'activités. il a donc fallu que je modifie le code svt :
Private Sub lB1_Activités_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim Ligne As Long
Dim Colonne As Integer
Dim Cel As Range
Dim i
'If Encours = True Then Exit Sub
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
' QUE J'AI MODIFIE PAR
If (Ligne > 17) And (Ligne < 95) And ((Ligne - 3) Mod 3 < 2) And (Colonne > 2) And (Colonne < 34) Then
Cel = Me.lB1_Activités
End If
Next Cel
End Selectça fonctionne bien , mais ce que je ne comprends pas c'est la partie : ((Ligne - 3) Mod 3 < 2) pour garder les lignes 1 & 2 sur 3 (pourquoi le signe négatif et pourquoi 12 ou 3 pour le même résultat ?), pourquoi utiliser l'opérateur Mod ?
PS : Merci de bien vouloir détailler vos réponses, je suis débutante (c'est mon premier projet)
Bonjour,
Pourtant, depuis ces modifications, la combobox ne se met plus à jour automatiquement ; elle ne se met à jour que lorsqu'on ferme le UserForm et qu'on le rouvre.
Voici le code qui fonctionnait avant et qui ne fonctionne plus :
De quel combo parles-tu ? de celle-ci --> Me.CB5_F4_MoisOnglet
Merci d'expliquer
Edit : je pense avoir compris le souci
Dans l'USF remplace le code Private Sub CmdB25_F3_Creer_Click par celui ci-après
Private Sub CmdB25_F3_Creer_Click()
'Mise à jour du Modèle avant affichage
Call CopyDuModele
Me.CB5_F4_MoisOnglet.AddItem ActiveSheet.Name
End SubBonjour Dan,
oui en effet, c'est bien celle-ci qui gère les onglets créésDan a écrit :De quel combo parles-tu ? de celle-ci --> Me.CB5_F4_MoisOnglet
.
Dan a écrit :Dans l'USF remplace le code Private Sub CmdB25_F3_Creer_Click par celui ci-après :
Me.CB5_F4_MoisOnglet.AddItem ActiveSheet.Name
Catastrophe, il se passe n'importe quoi, quand je cré un nouvel onglet, il me dit à tort que l'onglet est déjà créé, dans la combobox, il affiche n'importe quoi, dans n'importe quel ordre...
Bref ce n'est pas la solution.
Merci quand même, il faut trouver autre chose ; sion, si je reprends un fichier vierge et que je recommence tout, tu crois que ça peut solutionner le pb ?
re,
Catastrophe, il se passe n'importe quoi, quand je cré un nouvel onglet, il me dit à tort que l'onglet est déjà créé, dans la combobox, il affiche n'importe quoi, dans n'importe quel ordre...
Bref ce n'est pas la solution.
Merci quand même, il faut trouver autre chose ; sion, si je reprends un fichier vierge et que je recommence tout, tu crois que ça peut solutionner le pb ?
Recommencer tout ... ben non c'est qu'une question d'arranger le code. J'ai tutilisé le fichier posté mais bon les feuilles étaient cachées apparement.
re,
Au fait la feuille AIDE doit apparaitre dans la combo ou pas ??
Dan,
Dan a écrit :J'ai tutilisé le fichier posté mais bon les feuilles étaient cachées apparement
Non, seule la feuille modèle est masquée (clic dt / afficher), pour les autres, il suffit de les créer (Ctl + e) ou cliquer sur le bouton 'Barre de Menu' de l'onglet 'Menu' pour ouvrir le UserForm ; mais cette feuille n'est pas utile à ma question.
A partir du UserForm (Barre de Menu), tu cliques sur le bouton 'créer un nouveau mois de saisie' ensuite, tu choisis un autre mois et tu recliques sur le bouton ;
à chaque fois, la combobox CB5_F4_MoisOnglet devrait se mettre à jour, donner la liste des onglets sauf les onglets Menu et Modèle et permettre leur activation.
Merci
Re,
Essaie comme ceci :
- Dans l’USF supprime Dim encours as boolean
- Dans l’USF remplace le code que j’ai donné dans mon post précédent par celui-ci
Private Sub CmdB25_F3_Creer_Click()
'Mise à jour du Modèle avant affichage
' MajModèle A ACTIVER
Sheets("Modèle").Activate ' Est-il nécessaire de l'activer ?
Call CopyDuModele
If encours <> True Then Me.CB5_F4_MoisOnglet.AddItem ActiveSheet.Name
encours = False
End Sub- Dans le Module en entête juste en dessous de Option Explicit, mets Public Dim encours as boolean
- Dans le module – code Sub CopyDuModele() remplace l’instruction
MsgBox "Mois déjà existant"Par
MsgBox "Mois déjà existant": encours = TrueAmicalement
Bonjour Dan,
Ca va beaucoup mieux en effet.
Il y a encore un petit truc qui me chiffonne : que je mette
.Clearou pas dans les instructions :
' PARAMETRES DE LA BOITE F4_Onglets
Private Sub CB5_F4_MoisOnglet_Change()
.Clear ' On efface la liste existante
' Lors du changement dans la ComboBox
If Me.CB5_F4_MoisOnglet.ListIndex = -1 Then Exit Sub ' Si l'entrée n'est pas dans la liste on quitte
'Encours = True
Sheets(Me.CB5_F4_MoisOnglet.Value).Select ' Sélection de la page
End Subet
Private Sub UserForm_Initialize()
Dim dlg As Long, tablo
Dim i As Byte
encours = True
'....
'Instructions POUR FAIRE APPARAITRE LE NOM DE L ONGLET CHOISI DANS LA COMBOBOX MOIS/ONGLET
With Me.CB5_F4_MoisOnglet
.Clear ' On efface la liste existante
For i = 1 To Sheets.Count ' Pour toutes les pages du classeur
Select Case Sheets(i).Name
Case "Menu", "Modèle" ' La liste des pages que l'on ne veut pas afficher
Case Else
.AddItem Sheets(i).Name ' On ajoute le nom
End Select
Next i
End With
encours = False
End Subil n'y a pas de remise à zéro.
C'est à dire qu'il ne reprend pas la liste des onglets tels qu'ils sont : si on a déplacer un onglet, si on a supprimé un onglet, la combobox ne prend pas en compte ces changements.
Pour les prendre en compte, il faut fermer / ouvrir le UserForm.
De plus, jusqu'à présent, les onglets s'ouvraient entre les feuilles Menu et Aide (ce qui permettait d'avoir toujour la feuille d'aide visible), maintenant ils se créent à la fin. Je ne comprends vraiment pas ce qui se passe, je n'ai pas touché à ces instructions...
En tout cas merci déjà beaucoup ; il va falloir que j'assimile ces 'histoires' d'encours True / False, j'ai pas bien compris quand il est nécessaire de les ouvrir ou de les fermer...
Re,
il n'y a pas de remise à zéro.
C'est à dire qu'il ne reprend pas la liste des onglets tels qu'ils sont : si on a déplacer un onglet, si on a supprimé un onglet, la combobox ne prend pas en compte ces changements.
Pour les prendre en compte, il faut fermer / ouvrir le UserForm.
Pour t'expliquer. La private sub Initialize n'agit qu'à l'ouverture de ton USF. Donc cette Sub USFinitialise ne sert que à l'ouverture et nom à des changements que tu faire après.
Dans le principe VBA l'initialize est utilisée pour la mise en place des différents objets Combo, textbox et ce de manière à ce que tu puisses utiliser ton USF.
Précédemment dans ton fichier tu avais une Sub USFactivate qui comme son nom l'indique agissait à chaque activation de l'USF. j'avais remarqué tout une série d'instructions étaient inutilement exécutées d'où notamment le changement que je t'ai proposé.
Maintenant lorsque tu parles de supprimer un onglet. Dans ton premier fichier il n'y avait pas cette option que je sache
De plus, jusqu'à présent, les onglets s'ouvraient entre les feuilles Menu et Aide (ce qui permettait d'avoir toujour la feuille d'aide visible), maintenant ils se créent à la fin. Je ne comprends vraiment pas ce qui se passe, je n'ai pas touché à ces instructions...
Il n'y pas de raison là. Dans le fichier dont je dispose je n'ai pas cette situation. La feuille Aide est toujours bien placée en dernier ?
A te relire
Dans la version V4.1, avec la Private Sub UserForm_Activate, les feuilles étaient Menu, Modèle, Aide ; Chaque planning créé se plaçaient de gauche à droite entre les feuilles Menu et Modèle ; Si une feuille planning était supprimée, elle n'apparaissait plus dans la combo 'CB5_F4_MoisOnglet - par contre si on supprimait l'onglet 10-12 après avoir créer le 11-12 et qu'on re créait le 10-12, il se positionnait après le 11-12 (je n'ai jamais réussi à les classer automatiquement à cause des années à la française...)
Par contre, à l'époque, la procédure de mise à jour de la CB5_F4_MoisOnglet n'était pas incluse dans la UserForm_Activate.
A toute fin utile, je joins cette version périmée.
Re,
Le positionnement des feuilles ne devrait pas poser de souci si la feuille Aide est positionnée en dernière feuille.
Par contre face à ton souci de combo, j'ai dû apporter quelques changements dans quelques codes.
Si ton fichier est identique à la version Planning AT V4.2.2Q que tu as postée avant, je peux te donner le fichier sur lequel j'ai apporté les modifications. Dans le cas contraire, je te donnerai les 3 codes qui sont à changer
A te relire
Bonjour Dan
Dan a écrit :Le positionnement des feuilles ne devrait pas poser de souci si la feuille Aide est positionnée en dernière feuille.
Oui tu as raison, il n'y a plus de pb avec le positionnement, c'était hier, j'ai eu bcp de pb avec mon ordi, j'ai redémarré plusieurs fois...
Oui, avec plaisir, j'ai fait quelques modifs à la marge (ajout d'un quadrillage de bordures, car la fonction "coller que les bordures" n'existe pas...)Dan a écrit :Si ton fichier est identique à la version Planning AT V4.2.2Q que tu as postée avant, je peux te donner le fichier sur lequel j'ai apporté les modifications.
Merci encore
Bonjour,
Voici en retour le fichier avec les modifications
Amicalement
Bonjour Dan,
Tout est "presque" parfait.
Merci beaucoup pour ton aide, à la prochaine...