OVH Cloud OVH Cloud

combobox

6 réponses
Avatar
JEAN
Bonsoir,
je me suis mal expliqué tout à l'heure,donc je réecrit mon probleme.

AU fait j'ai une feuille qui se nomme test 1, et une autre test 2,sur celle
dans test 2 j'ai un bouton de commande,et sur ce bouton de commande est
affecter une macro qui permet de copier la feuille de test 2 sur une autre
feuille,qui prendra comme nom une date.

Mon souhait c'est d'avoir sur un userform, un combobox qui me permette a
chaque fois que j'ai cette nouvelle feuille qui se cree ,je voudrai que son
nom vienne alimenter mon combobox et ainsi de suite suivant les feuilles qui
vienne se rajouter à mon classeur.
et ainsi si

j'ai 10 feuilles qui se creent dans mon classeur, j'aurai donc une liste de
10 feuilles dans mon combobox


merci de votre aide.

6 réponses

Avatar
michdenis
Bonjour Jean,

Ta question est beaucoup plus claire. Je t'ai fait un exemple. Si tu es vraiment débutant en programmation, sans
personne ressource autour de toi, cela peut te prendre plusieurs heures, voir plusieurs jours à comprendre chacune des
lignes de ce code. Si tu pouvais t'inscrire à un programme de formation, cela aiderait grandement ta progression pour
acquérir les rudiments de base. Tout seul, ce n'est pas évident.!

Essaie ceci, et dis-moi si tu arrives à faire fonctionner cette exemple :

Pour exécuter ce code, tu dois avoir dans ton classeur un userform du nom de Userform1
Un combobox du nom de combobox1 dans ton userform1

Copie ce qui suit dans un module standard.

Tu attaches cette macro à un bouton de commmande issu de la
barre d'outils formulaire.

'----------------------------------------
Sub CopierUneFeuille()

'Déclaration des variables
Dim NomFeuille As String, Arr()
Dim Ok As Boolean, Chaine As String

'Pour baptiser ta feuille:
'Tu ne peux utiliser ces symboles dans le nom de
'ta feuille : /:[?]*

'Liste des caractères mis dans un tableau.
Arr = Array("", "/", ":", "[", "?", "]", "*")

Do
Ok = True
'Boite de message demandant le nom.
'NomFeuille=Variable qui va recevoir
'le nom de la feuille.
NomFeuille = Application.InputBox( _
"Entrer le nom de la feuille.", _
"Baptiser votre nouvelle feuille")

'Si tu cliques sur le bouton annuler,
'on va mettre fin à la procédure.
If NomFeuille = "Faux" Then Exit Sub

'********Cette section 1"********
'S'assure que le nom tu as choisi n'existe pas déjà.
'Ceci fait une boucle sur chacune des feuilles pour
'vérifier le nom de chacune et le comparer avec celui
'que tu as choisi.
For Each sh In Worksheets
aa = sh.Name
If UCase(sh.Name) = UCase(NomFeuille) Then
MsgBox "Le nom de cette feuille existe. " & _
"Choisissez un autre nom."
Ok = False
Exit For
End If
Next

'**********Cette section 2"***********
'Ceci est une autre boucle pour s'assure qu'aucun
'des symboles permis dans le nom d'une feuille fait
'parti du nom que tu as choisi.
If Ok = True Then
For Each elt In Arr
If InStr(1, NomFeuille, elt, vbTextCompare) <> 0 Then
MsgBox "Le nom de la feuille a un caractère " & _
"illégal : " & elt & " . Recommencer."
Ok = False
Exit For
End If
Next
End If

'Tant et aussi longtemps que la variable Ok n'est pas
'égale à true, ceci va tourner en rond... et redemander
'le nom de la feuille à l'usager.

Loop Until Ok = True


'**********Cette section 3"***********

'Maintenant que nous sommes sûrs que nous avons
'un bon nom pour la feuille, nous allons copier
'la feuille active(la feuille affichée à l'écran

'Pour copier la feuille , celle de ton bouton
'et mettre l'onglet de celle-ci à l'extrème droite
'de ton classeur (la dernière des feuilles de calcul)
'Plus d'information, place ton curseur sur Copy
'et tu fais F1, (appel de l'aide)
ActiveSheet.Copy After:=Worksheets(Worksheets.Count)

'Pour lui donner le nom que tu as défini plutôt :
ActiveSheet.Name = NomFeuille

'Pour ajouter le nom de ta feuille dans ton combobox
UserForm1.ComboBox1.AddItem ActiveSheet.Name

'Affiche ton formulaire dans une fenêtre non modale.

UserForm1.Show 0

End Sub
'----------------------------------------

Bon travail.


Salutations!


"JEAN" a écrit dans le message de news:

Bonsoir,
je me suis mal expliqué tout à l'heure,donc je réecrit mon probleme.

AU fait j'ai une feuille qui se nomme test 1, et une autre test 2,sur celle
dans test 2 j'ai un bouton de commande,et sur ce bouton de commande est
affecter une macro qui permet de copier la feuille de test 2 sur une autre
feuille,qui prendra comme nom une date.

Mon souhait c'est d'avoir sur un userform, un combobox qui me permette a
chaque fois que j'ai cette nouvelle feuille qui se cree ,je voudrai que son
nom vienne alimenter mon combobox et ainsi de suite suivant les feuilles qui
vienne se rajouter à mon classeur.
et ainsi si

j'ai 10 feuilles qui se creent dans mon classeur, j'aurai donc une liste de
10 feuilles dans mon combobox


merci de votre aide.
Avatar
JEAN
merci beaucoup pour ton programme, mais au fait j'ai déjà un programme qui me
permet quand j'appuie sur le bouton de commande de me créer une feuille avec
son nom dessus.

mais mon souci c'est d'avoir le nom de cette nouvelle feuille qui vient
alimenter mon combobox de l'userform 1
a chaque fois qu'une nvlle feuille se cree mon combobox s'aliment par
rapport au nom de cette nouvelle feuille.

merci


"michdenis" wrote:

Bonjour Jean,

Ta question est beaucoup plus claire. Je t'ai fait un exemple. Si tu es vraiment débutant en programmation, sans
personne ressource autour de toi, cela peut te prendre plusieurs heures, voir plusieurs jours à comprendre chacune des
lignes de ce code. Si tu pouvais t'inscrire à un programme de formation, cela aiderait grandement ta progression pour
acquérir les rudiments de base. Tout seul, ce n'est pas évident.!

Essaie ceci, et dis-moi si tu arrives à faire fonctionner cette exemple :

Pour exécuter ce code, tu dois avoir dans ton classeur un userform du nom de Userform1
Un combobox du nom de combobox1 dans ton userform1

Copie ce qui suit dans un module standard.

Tu attaches cette macro à un bouton de commmande issu de la
barre d'outils formulaire.

'----------------------------------------
Sub CopierUneFeuille()

'Déclaration des variables
Dim NomFeuille As String, Arr()
Dim Ok As Boolean, Chaine As String

'Pour baptiser ta feuille:
'Tu ne peux utiliser ces symboles dans le nom de
'ta feuille : /:[?]*

'Liste des caractères mis dans un tableau.
Arr = Array("", "/", ":", "[", "?", "]", "*")

Do
Ok = True
'Boite de message demandant le nom.
'NomFeuille=Variable qui va recevoir
'le nom de la feuille.
NomFeuille = Application.InputBox( _
"Entrer le nom de la feuille.", _
"Baptiser votre nouvelle feuille")

'Si tu cliques sur le bouton annuler,
'on va mettre fin à la procédure.
If NomFeuille = "Faux" Then Exit Sub

'********Cette section 1"********
'S'assure que le nom tu as choisi n'existe pas déjà.
'Ceci fait une boucle sur chacune des feuilles pour
'vérifier le nom de chacune et le comparer avec celui
'que tu as choisi.
For Each sh In Worksheets
aa = sh.Name
If UCase(sh.Name) = UCase(NomFeuille) Then
MsgBox "Le nom de cette feuille existe. " & _
"Choisissez un autre nom."
Ok = False
Exit For
End If
Next

'**********Cette section 2"***********
'Ceci est une autre boucle pour s'assure qu'aucun
'des symboles permis dans le nom d'une feuille fait
'parti du nom que tu as choisi.
If Ok = True Then
For Each elt In Arr
If InStr(1, NomFeuille, elt, vbTextCompare) <> 0 Then
MsgBox "Le nom de la feuille a un caractère " & _
"illégal : " & elt & " . Recommencer."
Ok = False
Exit For
End If
Next
End If

'Tant et aussi longtemps que la variable Ok n'est pas
'égale à true, ceci va tourner en rond... et redemander
'le nom de la feuille à l'usager.

Loop Until Ok = True


'**********Cette section 3"***********

'Maintenant que nous sommes sûrs que nous avons
'un bon nom pour la feuille, nous allons copier
'la feuille active(la feuille affichée à l'écran

'Pour copier la feuille , celle de ton bouton
'et mettre l'onglet de celle-ci à l'extrème droite
'de ton classeur (la dernière des feuilles de calcul)
'Plus d'information, place ton curseur sur Copy
'et tu fais F1, (appel de l'aide)
ActiveSheet.Copy After:=Worksheets(Worksheets.Count)

'Pour lui donner le nom que tu as défini plutôt :
ActiveSheet.Name = NomFeuille

'Pour ajouter le nom de ta feuille dans ton combobox
UserForm1.ComboBox1.AddItem ActiveSheet.Name

'Affiche ton formulaire dans une fenêtre non modale.

UserForm1.Show 0

End Sub
'----------------------------------------

Bon travail.


Salutations!


"JEAN" a écrit dans le message de news:

Bonsoir,
je me suis mal expliqué tout à l'heure,donc je réecrit mon probleme.

AU fait j'ai une feuille qui se nomme test 1, et une autre test 2,sur celle
dans test 2 j'ai un bouton de commande,et sur ce bouton de commande est
affecter une macro qui permet de copier la feuille de test 2 sur une autre
feuille,qui prendra comme nom une date.

Mon souhait c'est d'avoir sur un userform, un combobox qui me permette a
chaque fois que j'ai cette nouvelle feuille qui se cree ,je voudrai que son
nom vienne alimenter mon combobox et ainsi de suite suivant les feuilles qui
vienne se rajouter à mon classeur.
et ainsi si

j'ai 10 feuilles qui se creent dans mon classeur, j'aurai donc une liste de
10 feuilles dans mon combobox


merci de votre aide.





Avatar
michdenis
Bonjour Jean,

2 situations peuvent se produire :

'***********SITUATION 1**************

Ton formulaire est déjà ouvert (c'est à dire en mémoire vive)

la commande suivante place le formulaire en mémoire vive en initilant toutes les variables du formulaire sans rendre
visible le formulaire

Load Userform1

Au moment jugé opportun, tu passes la commande suivante pour afficher le formulaire. Comme il est déjà en mémoire vive,
c'est très rapide ...
Userform1.Show 0 '0 = fenêtre non modale
Userform1.Show = fenêtre non modale

Je te fais remarquer que pour utiliser la commande Userform1.Show, tu n'es pas obligé d'utiliser la méthode Load
userform1 avant.

Si tu veux masquer ton formulaire : emploie la commande :
Userform1.Hide

Si tu veux décharger de la mémoire vive ton formulaire :
unLoad Userform1

AU MOMENT DE CRÉER TA FEUILLE, si ton formulaire est déjà en mémoire vive, tu utilises cette ligne de commande :

Userform1.Combobox1.AddItem "NomDeTaNouvelleFeuille


'***********SITUATION 2**************

Si ton formulaire n'est pas en mémoire vive durant la création de tes feuilles, tu vas devoir utiliser ce type de code
que tu places dans la feuille du module formulaire :


Cette procédure va charger dans ton combobox, le nom de toutes les feuilles de ton classeur sauf ceux qui s'appellent
"Test" et "Test1". (évidemment ces feuilles peuvent avoir les noms que tu désires )
'----------------------
Private Sub UserForm_Initialize()
'S'assure que le combobox est vide
Combobox.Clear
'Chargement du combobox
For Each sh In Worksheets
If sh.Name <> "test" And sh.Name <> "test1" Then
ComboBox1.AddItem sh.Name
End If
Next
End Sub
'----------------------



Si tu veux charger toutes les feuilles sans exception :
'----------------------
Private Sub UserForm_Initialize()
'S'assure que le combobox est vide
Combobox.Clear
'Chargement du combobox
For Each sh In Worksheets
ComboBox1.AddItem sh.Name
Next
End Sub
'----------------------


En résumé :

Si tu combines les 2 situations, cela devrait répondre à tous les cas possibles

1)
Dans ta procédure sur ton bouton feuille tu ajoutes la ligne de code suivante à la fin de la procédure de ce bouton :

"NomDeTaNouvelleFeuille" = Nom de la feuille ajoutée

Userform1.Combobox1.AddItem "NomDeTaNouvelleFeuille"

2) tu copies l'une des procédures mentionnées ci-haut dans ta feuille module formulaire.


Salutations!


"JEAN" a écrit dans le message de news:

merci beaucoup pour ton programme, mais au fait j'ai déjà un programme qui me
permet quand j'appuie sur le bouton de commande de me créer une feuille avec
son nom dessus.

mais mon souci c'est d'avoir le nom de cette nouvelle feuille qui vient
alimenter mon combobox de l'userform 1
a chaque fois qu'une nvlle feuille se cree mon combobox s'aliment par
rapport au nom de cette nouvelle feuille.

merci


"michdenis" wrote:

Bonjour Jean,

Ta question est beaucoup plus claire. Je t'ai fait un exemple. Si tu es vraiment débutant en programmation, sans
personne ressource autour de toi, cela peut te prendre plusieurs heures, voir plusieurs jours à comprendre chacune des
lignes de ce code. Si tu pouvais t'inscrire à un programme de formation, cela aiderait grandement ta progression pour
acquérir les rudiments de base. Tout seul, ce n'est pas évident.!

Essaie ceci, et dis-moi si tu arrives à faire fonctionner cette exemple :

Pour exécuter ce code, tu dois avoir dans ton classeur un userform du nom de Userform1
Un combobox du nom de combobox1 dans ton userform1

Copie ce qui suit dans un module standard.

Tu attaches cette macro à un bouton de commmande issu de la
barre d'outils formulaire.

'----------------------------------------
Sub CopierUneFeuille()

'Déclaration des variables
Dim NomFeuille As String, Arr()
Dim Ok As Boolean, Chaine As String

'Pour baptiser ta feuille:
'Tu ne peux utiliser ces symboles dans le nom de
'ta feuille : /:[?]*

'Liste des caractères mis dans un tableau.
Arr = Array("", "/", ":", "[", "?", "]", "*")

Do
Ok = True
'Boite de message demandant le nom.
'NomFeuille=Variable qui va recevoir
'le nom de la feuille.
NomFeuille = Application.InputBox( _
"Entrer le nom de la feuille.", _
"Baptiser votre nouvelle feuille")

'Si tu cliques sur le bouton annuler,
'on va mettre fin à la procédure.
If NomFeuille = "Faux" Then Exit Sub

'********Cette section 1"********
'S'assure que le nom tu as choisi n'existe pas déjà.
'Ceci fait une boucle sur chacune des feuilles pour
'vérifier le nom de chacune et le comparer avec celui
'que tu as choisi.
For Each sh In Worksheets
aa = sh.Name
If UCase(sh.Name) = UCase(NomFeuille) Then
MsgBox "Le nom de cette feuille existe. " & _
"Choisissez un autre nom."
Ok = False
Exit For
End If
Next

'**********Cette section 2"***********
'Ceci est une autre boucle pour s'assure qu'aucun
'des symboles permis dans le nom d'une feuille fait
'parti du nom que tu as choisi.
If Ok = True Then
For Each elt In Arr
If InStr(1, NomFeuille, elt, vbTextCompare) <> 0 Then
MsgBox "Le nom de la feuille a un caractère " & _
"illégal : " & elt & " . Recommencer."
Ok = False
Exit For
End If
Next
End If

'Tant et aussi longtemps que la variable Ok n'est pas
'égale à true, ceci va tourner en rond... et redemander
'le nom de la feuille à l'usager.

Loop Until Ok = True


'**********Cette section 3"***********

'Maintenant que nous sommes sûrs que nous avons
'un bon nom pour la feuille, nous allons copier
'la feuille active(la feuille affichée à l'écran

'Pour copier la feuille , celle de ton bouton
'et mettre l'onglet de celle-ci à l'extrème droite
'de ton classeur (la dernière des feuilles de calcul)
'Plus d'information, place ton curseur sur Copy
'et tu fais F1, (appel de l'aide)
ActiveSheet.Copy After:=Worksheets(Worksheets.Count)

'Pour lui donner le nom que tu as défini plutôt :
ActiveSheet.Name = NomFeuille

'Pour ajouter le nom de ta feuille dans ton combobox
UserForm1.ComboBox1.AddItem ActiveSheet.Name

'Affiche ton formulaire dans une fenêtre non modale.

UserForm1.Show 0

End Sub
'----------------------------------------

Bon travail.


Salutations!


"JEAN" a écrit dans le message de news:

Bonsoir,
je me suis mal expliqué tout à l'heure,donc je réecrit mon probleme.

AU fait j'ai une feuille qui se nomme test 1, et une autre test 2,sur celle
dans test 2 j'ai un bouton de commande,et sur ce bouton de commande est
affecter une macro qui permet de copier la feuille de test 2 sur une autre
feuille,qui prendra comme nom une date.

Mon souhait c'est d'avoir sur un userform, un combobox qui me permette a
chaque fois que j'ai cette nouvelle feuille qui se cree ,je voudrai que son
nom vienne alimenter mon combobox et ainsi de suite suivant les feuilles qui
vienne se rajouter à mon classeur.
et ainsi si

j'ai 10 feuilles qui se creent dans mon classeur, j'aurai donc une liste de
10 feuilles dans mon combobox


merci de votre aide.





Avatar
JEAN
merci, je pense que tu m'a etait d'une aide précieuse.
en tout les cas je te remercie, et je pense que ton programme fonctionne
merci beaucoup, quand tu met met sh, cela veut dire quoi?
le "sh" correspond a quoi

"michdenis" wrote:

Bonjour Jean,

2 situations peuvent se produire :

'***********SITUATION 1**************

Ton formulaire est déjà ouvert (c'est à dire en mémoire vive)

la commande suivante place le formulaire en mémoire vive en initilant toutes les variables du formulaire sans rendre
visible le formulaire

Load Userform1

Au moment jugé opportun, tu passes la commande suivante pour afficher le formulaire. Comme il est déjà en mémoire vive,
c'est très rapide ...
Userform1.Show 0 '0 = fenêtre non modale
Userform1.Show = fenêtre non modale

Je te fais remarquer que pour utiliser la commande Userform1.Show, tu n'es pas obligé d'utiliser la méthode Load
userform1 avant.

Si tu veux masquer ton formulaire : emploie la commande :
Userform1.Hide

Si tu veux décharger de la mémoire vive ton formulaire :
unLoad Userform1

AU MOMENT DE CRÉER TA FEUILLE, si ton formulaire est déjà en mémoire vive, tu utilises cette ligne de commande :

Userform1.Combobox1.AddItem "NomDeTaNouvelleFeuille


'***********SITUATION 2**************

Si ton formulaire n'est pas en mémoire vive durant la création de tes feuilles, tu vas devoir utiliser ce type de code
que tu places dans la feuille du module formulaire :


Cette procédure va charger dans ton combobox, le nom de toutes les feuilles de ton classeur sauf ceux qui s'appellent
"Test" et "Test1". (évidemment ces feuilles peuvent avoir les noms que tu désires )
'----------------------
Private Sub UserForm_Initialize()
'S'assure que le combobox est vide
Combobox.Clear
'Chargement du combobox
For Each sh In Worksheets
If sh.Name <> "test" And sh.Name <> "test1" Then
ComboBox1.AddItem sh.Name
End If
Next
End Sub
'----------------------



Si tu veux charger toutes les feuilles sans exception :
'----------------------
Private Sub UserForm_Initialize()
'S'assure que le combobox est vide
Combobox.Clear
'Chargement du combobox
For Each sh In Worksheets
ComboBox1.AddItem sh.Name
Next
End Sub
'----------------------


En résumé :

Si tu combines les 2 situations, cela devrait répondre à tous les cas possibles

1)
Dans ta procédure sur ton bouton feuille tu ajoutes la ligne de code suivante à la fin de la procédure de ce bouton :

"NomDeTaNouvelleFeuille" = Nom de la feuille ajoutée

Userform1.Combobox1.AddItem "NomDeTaNouvelleFeuille"

2) tu copies l'une des procédures mentionnées ci-haut dans ta feuille module formulaire.


Salutations!


"JEAN" a écrit dans le message de news:

merci beaucoup pour ton programme, mais au fait j'ai déjà un programme qui me
permet quand j'appuie sur le bouton de commande de me créer une feuille avec
son nom dessus.

mais mon souci c'est d'avoir le nom de cette nouvelle feuille qui vient
alimenter mon combobox de l'userform 1
a chaque fois qu'une nvlle feuille se cree mon combobox s'aliment par
rapport au nom de cette nouvelle feuille.

merci


"michdenis" wrote:

Bonjour Jean,

Ta question est beaucoup plus claire. Je t'ai fait un exemple. Si tu es vraiment débutant en programmation, sans
personne ressource autour de toi, cela peut te prendre plusieurs heures, voir plusieurs jours à comprendre chacune des
lignes de ce code. Si tu pouvais t'inscrire à un programme de formation, cela aiderait grandement ta progression pour
acquérir les rudiments de base. Tout seul, ce n'est pas évident.!

Essaie ceci, et dis-moi si tu arrives à faire fonctionner cette exemple :

Pour exécuter ce code, tu dois avoir dans ton classeur un userform du nom de Userform1
Un combobox du nom de combobox1 dans ton userform1

Copie ce qui suit dans un module standard.

Tu attaches cette macro à un bouton de commmande issu de la
barre d'outils formulaire.

'----------------------------------------
Sub CopierUneFeuille()

'Déclaration des variables
Dim NomFeuille As String, Arr()
Dim Ok As Boolean, Chaine As String

'Pour baptiser ta feuille:
'Tu ne peux utiliser ces symboles dans le nom de
'ta feuille : /:[?]*

'Liste des caractères mis dans un tableau.
Arr = Array("", "/", ":", "[", "?", "]", "*")

Do
Ok = True
'Boite de message demandant le nom.
'NomFeuille=Variable qui va recevoir
'le nom de la feuille.
NomFeuille = Application.InputBox( _
"Entrer le nom de la feuille.", _
"Baptiser votre nouvelle feuille")

'Si tu cliques sur le bouton annuler,
'on va mettre fin à la procédure.
If NomFeuille = "Faux" Then Exit Sub

'********Cette section 1"********
'S'assure que le nom tu as choisi n'existe pas déjà.
'Ceci fait une boucle sur chacune des feuilles pour
'vérifier le nom de chacune et le comparer avec celui
'que tu as choisi.
For Each sh In Worksheets
aa = sh.Name
If UCase(sh.Name) = UCase(NomFeuille) Then
MsgBox "Le nom de cette feuille existe. " & _
"Choisissez un autre nom."
Ok = False
Exit For
End If
Next

'**********Cette section 2"***********
'Ceci est une autre boucle pour s'assure qu'aucun
'des symboles permis dans le nom d'une feuille fait
'parti du nom que tu as choisi.
If Ok = True Then
For Each elt In Arr
If InStr(1, NomFeuille, elt, vbTextCompare) <> 0 Then
MsgBox "Le nom de la feuille a un caractère " & _
"illégal : " & elt & " . Recommencer."
Ok = False
Exit For
End If
Next
End If

'Tant et aussi longtemps que la variable Ok n'est pas
'égale à true, ceci va tourner en rond... et redemander
'le nom de la feuille à l'usager.

Loop Until Ok = True


'**********Cette section 3"***********

'Maintenant que nous sommes sûrs que nous avons
'un bon nom pour la feuille, nous allons copier
'la feuille active(la feuille affichée à l'écran

'Pour copier la feuille , celle de ton bouton
'et mettre l'onglet de celle-ci à l'extrème droite
'de ton classeur (la dernière des feuilles de calcul)
'Plus d'information, place ton curseur sur Copy
'et tu fais F1, (appel de l'aide)
ActiveSheet.Copy After:=Worksheets(Worksheets.Count)

'Pour lui donner le nom que tu as défini plutôt :
ActiveSheet.Name = NomFeuille

'Pour ajouter le nom de ta feuille dans ton combobox
UserForm1.ComboBox1.AddItem ActiveSheet.Name

'Affiche ton formulaire dans une fenêtre non modale.

UserForm1.Show 0

End Sub
'----------------------------------------

Bon travail.


Salutations!


"JEAN" a écrit dans le message de news:

Bonsoir,
je me suis mal expliqué tout à l'heure,donc je réecrit mon probleme.

AU fait j'ai une feuille qui se nomme test 1, et une autre test 2,sur celle
dans test 2 j'ai un bouton de commande,et sur ce bouton de commande est
affecter une macro qui permet de copier la feuille de test 2 sur une autre
feuille,qui prendra comme nom une date.

Mon souhait c'est d'avoir sur un userform, un combobox qui me permette a
chaque fois que j'ai cette nouvelle feuille qui se cree ,je voudrai que son
nom vienne alimenter mon combobox et ainsi de suite suivant les feuilles qui
vienne se rajouter à mon classeur.
et ainsi si

j'ai 10 feuilles qui se creent dans mon classeur, j'aurai donc une liste de
10 feuilles dans mon combobox


merci de votre aide.










Avatar
michdenis
Bonjour Jean,


Dans une bouche comme celle-ci

For each Sh in Worksheets
'Travail à accomplir
Next

Si je te la traduit en francais, ça se lirait comme suit :

Pour chaque Feuille (sh) dans la collection "Feuilles" de ce classeur. Sh est une variable OBJET . En fait, ce type de
boucle s'adresse seulement aux collections d'objets d'excel. (Oublions les tableaux pour l'instant) . Lorsque les objets
ne sont pas des collections d'objets, il y a d'autres types de boucle que tu peux utiliser. Chaque bon livre de
programmation, les définis car ces boucles sont très importantes ... notions de base.

Le principe est simple : La collection représente toujours un mot au pluriel comme "Worksheets (feuilles) , Workbooks
(classeurs), Shapes (contrôles dans une feuille, Rows (ligne dans une plage de cellules, Columns(colonne dans une plage
de cellules)... . Pour écrire un objet particulier de cette collection, l'objet est singulier (Worksheet, Workbook,
column, row ...)

Il y a au moins une exception importante, c'est Range. Il ne prend jamais de "S" et pourtant on peut boucler sur chacune
des cellules définies par la plage

For each C in Range("A1:B2")
Msgbox C.Address
next

On pourrait raffiner la procédure comme ceci pour certaines procédures :

Pour le plaisir, essaie ceci
'-------------------------
Sub Boucle_Sur_Cellule()

'Déclaration des variables objet
Dim R As Range
Dim C As Range

'Première Boucle sur chaque ligne de la plage de cellule
For Each R In Range("A1:B2").Rows
'Pour chaque cellule dans chaque ligne de
'la plage de cellules Range("A1:B2")
For Each C In R.Cells
'Affichage de l'adresse de la cellule.
MsgBox C.Address
Next
Next
End Sub
'-------------------------


L'avantage de déclarer la variable pour toi, c'est que tu as accès à tous les méthodes, propriétés de l'objet Worksheet.

Fait le test suivant, dans la procédure précédente, remplace "Travail à accomplir" par ceci : Msgbox Sh.name Dès que
tu vas taper le point après Sh, excel va afficher la liste déroulante des méthodes et propriétés disponibles... Sans
déclaration de la variable, tu n'as rien.



Salutations!





"JEAN" a écrit dans le message de news:

merci, je pense que tu m'a etait d'une aide précieuse.
en tout les cas je te remercie, et je pense que ton programme fonctionne
merci beaucoup, quand tu met met sh, cela veut dire quoi?
le "sh" correspond a quoi

"michdenis" wrote:

Bonjour Jean,

2 situations peuvent se produire :

'***********SITUATION 1**************

Ton formulaire est déjà ouvert (c'est à dire en mémoire vive)

la commande suivante place le formulaire en mémoire vive en initilant toutes les variables du formulaire sans rendre
visible le formulaire

Load Userform1

Au moment jugé opportun, tu passes la commande suivante pour afficher le formulaire. Comme il est déjà en mémoire
vive,
c'est très rapide ...
Userform1.Show 0 '0 = fenêtre non modale
Userform1.Show = fenêtre non modale

Je te fais remarquer que pour utiliser la commande Userform1.Show, tu n'es pas obligé d'utiliser la méthode Load
userform1 avant.

Si tu veux masquer ton formulaire : emploie la commande :
Userform1.Hide

Si tu veux décharger de la mémoire vive ton formulaire :
unLoad Userform1

AU MOMENT DE CRÉER TA FEUILLE, si ton formulaire est déjà en mémoire vive, tu utilises cette ligne de commande :

Userform1.Combobox1.AddItem "NomDeTaNouvelleFeuille


'***********SITUATION 2**************

Si ton formulaire n'est pas en mémoire vive durant la création de tes feuilles, tu vas devoir utiliser ce type de code
que tu places dans la feuille du module formulaire :


Cette procédure va charger dans ton combobox, le nom de toutes les feuilles de ton classeur sauf ceux qui s'appellent
"Test" et "Test1". (évidemment ces feuilles peuvent avoir les noms que tu désires )
'----------------------
Private Sub UserForm_Initialize()
'S'assure que le combobox est vide
Combobox.Clear
'Chargement du combobox
For Each sh In Worksheets
If sh.Name <> "test" And sh.Name <> "test1" Then
ComboBox1.AddItem sh.Name
End If
Next
End Sub
'----------------------



Si tu veux charger toutes les feuilles sans exception :
'----------------------
Private Sub UserForm_Initialize()
'S'assure que le combobox est vide
Combobox.Clear
'Chargement du combobox
For Each sh In Worksheets
ComboBox1.AddItem sh.Name
Next
End Sub
'----------------------


En résumé :

Si tu combines les 2 situations, cela devrait répondre à tous les cas possibles

1)
Dans ta procédure sur ton bouton feuille tu ajoutes la ligne de code suivante à la fin de la procédure de ce bouton :

"NomDeTaNouvelleFeuille" = Nom de la feuille ajoutée

Userform1.Combobox1.AddItem "NomDeTaNouvelleFeuille"

2) tu copies l'une des procédures mentionnées ci-haut dans ta feuille module formulaire.


Salutations!


"JEAN" a écrit dans le message de news:

merci beaucoup pour ton programme, mais au fait j'ai déjà un programme qui me
permet quand j'appuie sur le bouton de commande de me créer une feuille avec
son nom dessus.

mais mon souci c'est d'avoir le nom de cette nouvelle feuille qui vient
alimenter mon combobox de l'userform 1
a chaque fois qu'une nvlle feuille se cree mon combobox s'aliment par
rapport au nom de cette nouvelle feuille.

merci


"michdenis" wrote:

Bonjour Jean,

Ta question est beaucoup plus claire. Je t'ai fait un exemple. Si tu es vraiment débutant en programmation, sans
personne ressource autour de toi, cela peut te prendre plusieurs heures, voir plusieurs jours à comprendre chacune
des
lignes de ce code. Si tu pouvais t'inscrire à un programme de formation, cela aiderait grandement ta progression
pour
acquérir les rudiments de base. Tout seul, ce n'est pas évident.!

Essaie ceci, et dis-moi si tu arrives à faire fonctionner cette exemple :

Pour exécuter ce code, tu dois avoir dans ton classeur un userform du nom de Userform1
Un combobox du nom de combobox1 dans ton userform1

Copie ce qui suit dans un module standard.

Tu attaches cette macro à un bouton de commmande issu de la
barre d'outils formulaire.

'----------------------------------------
Sub CopierUneFeuille()

'Déclaration des variables
Dim NomFeuille As String, Arr()
Dim Ok As Boolean, Chaine As String

'Pour baptiser ta feuille:
'Tu ne peux utiliser ces symboles dans le nom de
'ta feuille : /:[?]*

'Liste des caractères mis dans un tableau.
Arr = Array("", "/", ":", "[", "?", "]", "*")

Do
Ok = True
'Boite de message demandant le nom.
'NomFeuille=Variable qui va recevoir
'le nom de la feuille.
NomFeuille = Application.InputBox( _
"Entrer le nom de la feuille.", _
"Baptiser votre nouvelle feuille")

'Si tu cliques sur le bouton annuler,
'on va mettre fin à la procédure.
If NomFeuille = "Faux" Then Exit Sub

'********Cette section 1"********
'S'assure que le nom tu as choisi n'existe pas déjà.
'Ceci fait une boucle sur chacune des feuilles pour
'vérifier le nom de chacune et le comparer avec celui
'que tu as choisi.
For Each sh In Worksheets
aa = sh.Name
If UCase(sh.Name) = UCase(NomFeuille) Then
MsgBox "Le nom de cette feuille existe. " & _
"Choisissez un autre nom."
Ok = False
Exit For
End If
Next

'**********Cette section 2"***********
'Ceci est une autre boucle pour s'assure qu'aucun
'des symboles permis dans le nom d'une feuille fait
'parti du nom que tu as choisi.
If Ok = True Then
For Each elt In Arr
If InStr(1, NomFeuille, elt, vbTextCompare) <> 0 Then
MsgBox "Le nom de la feuille a un caractère " & _
"illégal : " & elt & " . Recommencer."
Ok = False
Exit For
End If
Next
End If

'Tant et aussi longtemps que la variable Ok n'est pas
'égale à true, ceci va tourner en rond... et redemander
'le nom de la feuille à l'usager.

Loop Until Ok = True


'**********Cette section 3"***********

'Maintenant que nous sommes sûrs que nous avons
'un bon nom pour la feuille, nous allons copier
'la feuille active(la feuille affichée à l'écran

'Pour copier la feuille , celle de ton bouton
'et mettre l'onglet de celle-ci à l'extrème droite
'de ton classeur (la dernière des feuilles de calcul)
'Plus d'information, place ton curseur sur Copy
'et tu fais F1, (appel de l'aide)
ActiveSheet.Copy After:=Worksheets(Worksheets.Count)

'Pour lui donner le nom que tu as défini plutôt :
ActiveSheet.Name = NomFeuille

'Pour ajouter le nom de ta feuille dans ton combobox
UserForm1.ComboBox1.AddItem ActiveSheet.Name

'Affiche ton formulaire dans une fenêtre non modale.

UserForm1.Show 0

End Sub
'----------------------------------------

Bon travail.


Salutations!


"JEAN" a écrit dans le message de news:

Bonsoir,
je me suis mal expliqué tout à l'heure,donc je réecrit mon probleme.

AU fait j'ai une feuille qui se nomme test 1, et une autre test 2,sur celle
dans test 2 j'ai un bouton de commande,et sur ce bouton de commande est
affecter une macro qui permet de copier la feuille de test 2 sur une autre
feuille,qui prendra comme nom une date.

Mon souhait c'est d'avoir sur un userform, un combobox qui me permette a
chaque fois que j'ai cette nouvelle feuille qui se cree ,je voudrai que son
nom vienne alimenter mon combobox et ainsi de suite suivant les feuilles qui
vienne se rajouter à mon classeur.
et ainsi si

j'ai 10 feuilles qui se creent dans mon classeur, j'aurai donc une liste de
10 feuilles dans mon combobox


merci de votre aide.










Avatar
jps
dans une bouche? mon Dieu, pourvu que Sh ne veuille pas dire Shit...
jps

"michdenis" a écrit dans le message de
news:us2V$
Bonjour Jean,


Dans une bouche comme celle-ci

For each Sh in Worksheets
'Travail à accomplir
Next

Si je te la traduit en francais, ça se lirait comme suit :

Pour chaque Feuille (sh) dans la collection "Feuilles" de ce classeur. Sh
est une variable OBJET . En fait, ce type de

boucle s'adresse seulement aux collections d'objets d'excel. (Oublions les
tableaux pour l'instant) . Lorsque les objets

ne sont pas des collections d'objets, il y a d'autres types de boucle que
tu peux utiliser. Chaque bon livre de

programmation, les définis car ces boucles sont très importantes ...
notions de base.


Le principe est simple : La collection représente toujours un mot au
pluriel comme "Worksheets (feuilles) , Workbooks

(classeurs), Shapes (contrôles dans une feuille, Rows (ligne dans une
plage de cellules, Columns(colonne dans une plage

de cellules)... . Pour écrire un objet particulier de cette collection,
l'objet est singulier (Worksheet, Workbook,

column, row ...)

Il y a au moins une exception importante, c'est Range. Il ne prend jamais
de "S" et pourtant on peut boucler sur chacune

des cellules définies par la plage

For each C in Range("A1:B2")
Msgbox C.Address
next

On pourrait raffiner la procédure comme ceci pour certaines procédures :

Pour le plaisir, essaie ceci
'-------------------------
Sub Boucle_Sur_Cellule()

'Déclaration des variables objet
Dim R As Range
Dim C As Range

'Première Boucle sur chaque ligne de la plage de cellule
For Each R In Range("A1:B2").Rows
'Pour chaque cellule dans chaque ligne de
'la plage de cellules Range("A1:B2")
For Each C In R.Cells
'Affichage de l'adresse de la cellule.
MsgBox C.Address
Next
Next
End Sub
'-------------------------


L'avantage de déclarer la variable pour toi, c'est que tu as accès à tous
les méthodes, propriétés de l'objet Worksheet.


Fait le test suivant, dans la procédure précédente, remplace "Travail à
accomplir" par ceci : Msgbox Sh.name Dès que

tu vas taper le point après Sh, excel va afficher la liste déroulante des
méthodes et propriétés disponibles... Sans

déclaration de la variable, tu n'as rien.



Salutations!





"JEAN" a écrit dans le message de news:

merci, je pense que tu m'a etait d'une aide précieuse.
en tout les cas je te remercie, et je pense que ton programme fonctionne
merci beaucoup, quand tu met met sh, cela veut dire quoi?
le "sh" correspond a quoi

"michdenis" wrote:

Bonjour Jean,

2 situations peuvent se produire :

'***********SITUATION 1**************

Ton formulaire est déjà ouvert (c'est à dire en mémoire vive)

la commande suivante place le formulaire en mémoire vive en initilant
toutes les variables du formulaire sans rendre


visible le formulaire

Load Userform1

Au moment jugé opportun, tu passes la commande suivante pour afficher le
formulaire. Comme il est déjà en mémoire


vive,
c'est très rapide ...
Userform1.Show 0 '0 = fenêtre non modale
Userform1.Show = fenêtre non modale

Je te fais remarquer que pour utiliser la commande Userform1.Show, tu
n'es pas obligé d'utiliser la méthode Load


userform1 avant.

Si tu veux masquer ton formulaire : emploie la commande :
Userform1.Hide

Si tu veux décharger de la mémoire vive ton formulaire :
unLoad Userform1

AU MOMENT DE CRÉER TA FEUILLE, si ton formulaire est déjà en mémoire
vive, tu utilises cette ligne de commande :



Userform1.Combobox1.AddItem "NomDeTaNouvelleFeuille


'***********SITUATION 2**************

Si ton formulaire n'est pas en mémoire vive durant la création de tes
feuilles, tu vas devoir utiliser ce type de code


que tu places dans la feuille du module formulaire :


Cette procédure va charger dans ton combobox, le nom de toutes les
feuilles de ton classeur sauf ceux qui s'appellent


"Test" et "Test1". (évidemment ces feuilles peuvent avoir les noms que
tu désires )


'----------------------
Private Sub UserForm_Initialize()
'S'assure que le combobox est vide
Combobox.Clear
'Chargement du combobox
For Each sh In Worksheets
If sh.Name <> "test" And sh.Name <> "test1" Then
ComboBox1.AddItem sh.Name
End If
Next
End Sub
'----------------------



Si tu veux charger toutes les feuilles sans exception :
'----------------------
Private Sub UserForm_Initialize()
'S'assure que le combobox est vide
Combobox.Clear
'Chargement du combobox
For Each sh In Worksheets
ComboBox1.AddItem sh.Name
Next
End Sub
'----------------------


En résumé :

Si tu combines les 2 situations, cela devrait répondre à tous les cas
possibles



1)
Dans ta procédure sur ton bouton feuille tu ajoutes la ligne de code
suivante à la fin de la procédure de ce bouton :



"NomDeTaNouvelleFeuille" = Nom de la feuille ajoutée

Userform1.Combobox1.AddItem "NomDeTaNouvelleFeuille"

2) tu copies l'une des procédures mentionnées ci-haut dans ta feuille
module formulaire.




Salutations!


"JEAN" a écrit dans le message de news:

merci beaucoup pour ton programme, mais au fait j'ai déjà un programme
qui me


permet quand j'appuie sur le bouton de commande de me créer une feuille
avec


son nom dessus.

mais mon souci c'est d'avoir le nom de cette nouvelle feuille qui vient
alimenter mon combobox de l'userform 1
a chaque fois qu'une nvlle feuille se cree mon combobox s'aliment par
rapport au nom de cette nouvelle feuille.

merci


"michdenis" wrote:

Bonjour Jean,

Ta question est beaucoup plus claire. Je t'ai fait un exemple. Si tu
es vraiment débutant en programmation, sans



personne ressource autour de toi, cela peut te prendre plusieurs
heures, voir plusieurs jours à comprendre chacune



des
lignes de ce code. Si tu pouvais t'inscrire à un programme de
formation, cela aiderait grandement ta progression



pour
acquérir les rudiments de base. Tout seul, ce n'est pas évident.!

Essaie ceci, et dis-moi si tu arrives à faire fonctionner cette
exemple :




Pour exécuter ce code, tu dois avoir dans ton classeur un userform du
nom de Userform1



Un combobox du nom de combobox1 dans ton userform1

Copie ce qui suit dans un module standard.

Tu attaches cette macro à un bouton de commmande issu de la
barre d'outils formulaire.

'----------------------------------------
Sub CopierUneFeuille()

'Déclaration des variables
Dim NomFeuille As String, Arr()
Dim Ok As Boolean, Chaine As String

'Pour baptiser ta feuille:
'Tu ne peux utiliser ces symboles dans le nom de
'ta feuille : /:[?]*

'Liste des caractères mis dans un tableau.
Arr = Array("", "/", ":", "[", "?", "]", "*")

Do
Ok = True
'Boite de message demandant le nom.
'NomFeuille=Variable qui va recevoir
'le nom de la feuille.
NomFeuille = Application.InputBox( _
"Entrer le nom de la feuille.", _
"Baptiser votre nouvelle feuille")

'Si tu cliques sur le bouton annuler,
'on va mettre fin à la procédure.
If NomFeuille = "Faux" Then Exit Sub

'********Cette section 1"********
'S'assure que le nom tu as choisi n'existe pas déjà.
'Ceci fait une boucle sur chacune des feuilles pour
'vérifier le nom de chacune et le comparer avec celui
'que tu as choisi.
For Each sh In Worksheets
aa = sh.Name
If UCase(sh.Name) = UCase(NomFeuille) Then
MsgBox "Le nom de cette feuille existe. " & _
"Choisissez un autre nom."
Ok = False
Exit For
End If
Next

'**********Cette section 2"***********
'Ceci est une autre boucle pour s'assure qu'aucun
'des symboles permis dans le nom d'une feuille fait
'parti du nom que tu as choisi.
If Ok = True Then
For Each elt In Arr
If InStr(1, NomFeuille, elt, vbTextCompare) <> 0 Then
MsgBox "Le nom de la feuille a un caractère " & _
"illégal : " & elt & " . Recommencer."
Ok = False
Exit For
End If
Next
End If

'Tant et aussi longtemps que la variable Ok n'est pas
'égale à true, ceci va tourner en rond... et redemander
'le nom de la feuille à l'usager.

Loop Until Ok = True


'**********Cette section 3"***********

'Maintenant que nous sommes sûrs que nous avons
'un bon nom pour la feuille, nous allons copier
'la feuille active(la feuille affichée à l'écran

'Pour copier la feuille , celle de ton bouton
'et mettre l'onglet de celle-ci à l'extrème droite
'de ton classeur (la dernière des feuilles de calcul)
'Plus d'information, place ton curseur sur Copy
'et tu fais F1, (appel de l'aide)
ActiveSheet.Copy After:=Worksheets(Worksheets.Count)

'Pour lui donner le nom que tu as défini plutôt :
ActiveSheet.Name = NomFeuille

'Pour ajouter le nom de ta feuille dans ton combobox
UserForm1.ComboBox1.AddItem ActiveSheet.Name

'Affiche ton formulaire dans une fenêtre non modale.

UserForm1.Show 0

End Sub
'----------------------------------------

Bon travail.


Salutations!


"JEAN" a écrit dans le message de
news:




Bonsoir,
je me suis mal expliqué tout à l'heure,donc je réecrit mon probleme.

AU fait j'ai une feuille qui se nomme test 1, et une autre test 2,sur
celle



dans test 2 j'ai un bouton de commande,et sur ce bouton de commande
est



affecter une macro qui permet de copier la feuille de test 2 sur une
autre



feuille,qui prendra comme nom une date.

Mon souhait c'est d'avoir sur un userform, un combobox qui me permette
a



chaque fois que j'ai cette nouvelle feuille qui se cree ,je voudrai
que son



nom vienne alimenter mon combobox et ainsi de suite suivant les
feuilles qui



vienne se rajouter à mon classeur.
et ainsi si

j'ai 10 feuilles qui se creent dans mon classeur, j'aurai donc une
liste de



10 feuilles dans mon combobox


merci de votre aide.