BOUCLER SUR UNE LISTE DEROULANTE

clemodoun Messages postés 32 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 21 novembre 2007 - 13 sept. 2007 à 10:56
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007 - 13 sept. 2007 à 17:32
Bonjour à tous,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





 





 Je viens solliciter votre génie. Je suis débutant en VBA Excel.





 





Voici mon problème. C'est un bel exemple de boucle VBA Excel.







J'ai un fichier dans lequel j'ai créé une fiche dite "fiche_imm" sur une feuille nommée "Fiche_imm".





Il y a une liste déroulante en cellule E4 de cette feuille qui permet de sélectionner un immeuble par son adresse. A la suite de cette sélection, toutes les autres cellules de la feuille se calculeront grâce à des formules et notamment la cellule E5 qui affichera le code de l'immeuble.


Voici ce sur quoi, j'aimerais faire appel à votre ingéniosité car je me suis mis à VBA Excel mais, je suis à des années lumière de ce que les génies de ce forum sont capables de faire.
 







J'aimerais que vous m'aidez à faire une macro qui boucle sur toutes les adresses de la liste déroulante en E4 et va créer dans un nouveau classeur nommé "CONSOLIDATION_FICHE_IM" par exemple une feuille par immeuble.







Je ne sais pas le nombre de feuilles qu'il y a dans un classeur Excel. Mais ce n'est pas grave si la liste déroulante dépasse le nombre de feuilles. Je me calerai sur le nombre de feuilles d'un classeur.







La cerise sur le gâteau serait que chaque feuille du classeur "CONSOLIDATION_FICHE_IM" soit nommée comme le code de l'immeuble qu'elle représente et qui se trouve en cellule E5. Exemple: la fiche créée pour le code immeuble "006" dans le classeur "CONSOLIDATION_FICHE_IM" se nommera "006".

 





Comme vous le voyez, c'est tout un programme. Mais je sais que vous en êtes câpable. J'ai besoin de résoudre le problème pour demain midi max.

 





Mille mercis d'avance à toutes les personnes qui s'intéresseront à ma demande.

Je reste à votre disposition pour des informations complémentaires.





 















 



Bien cordialement,

16 réponses

tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
13 sept. 2007 à 11:57
Salut,

je ne comprends pas ce que tu entends par "Il y a une liste déroulante en cellule E4"? A ce que j'en sais, une liste déroulante ne dépend pas d'une cellule...

De plus, si j'ai bien compris ton problème, tu veux créer automatiquement les feuilles correspondant à tous lesitems de ta liste, mais dasn ce cas là tu veux le faire juste une fois?

Tubafat  
Avant d'imprimer, pensez à l'environnement
0
clemodoun Messages postés 32 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 21 novembre 2007
13 sept. 2007 à 13:21
Salut Tubafat,


D'abord merci de t'intéresser à ma problématique.

Pour répondre à ta première question, en E4, j'ai fait "Données puis validation puis liste" avec une liste que j'avais déjà définie auparavant. C'est une fonction de Excel que tu connais à coup sûr. Cela m'a permis d'avoir ma liste déroulante en E4 et chaque fois qu'on fait un clic sur la cellule E4, on a la flêche de la liste déroulante permettant de sélectionner un des items.

 En ce qui concerne ta seconde question, tu as hyper bien compris mon problème. Je veux qu'en cliquant une fois sur un Command Button, je crée automatiquement les feuilles correspondant à tous les items de ma liste dans mon classeur "CONSOLIDATION_FICHE_IM". Mais attention, la macro doit perdurer dans le temps car comme tu t'en doutes, les fiches sont susceptibles d'êtres mises à jour à tout moment et alors, mon command Button doit pouvoir me permettre de mettre à jour automatiquement mon classeur "CONSOLIDATION_FICHE_IM". En espérant avoir été un peu plus clair, je te souhaite bon courage.

Je reste à ta disposition et encore une fois merci.
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
13 sept. 2007 à 13:53
Salut,
A ta question : "Je ne sais pas le nombre de feuilles qu'il y a dans un classeur Excel" = 255 ou 256

Par contre je ne suis pas certain que tu pourra faire une boucle sur une cellule contenent des données de validation ... Je suis même certain du contraire ... Sauf si ... Hum ... Non ... Là ça devient du bricolage d'artiste

Il va te falloiur créer une vrai liste déroulante

Pour le reste je pense que tu trouvera largement ce que tu veux sur ce site en ce qui concerne :
- Les bloucles
- L'utilisation des variables
- La gestion des feuilles (Nom, Création, Suppression, Copie, Déplacement, etc ...)

Cliquons "Réponse Acceptée" quand c'est le cas
JML. Partageons notre savoir et nos acquis

0
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
13 sept. 2007 à 14:04
OK je comprends mieux...
Donc en gros tu as une liste déroulante mais tes données sont répertoriées à un endroit de ta feuille par exemple à partir de la cellule I1...

Private Sub CommandButton1_Click()
Dim i As Integer
Dim j As Integer
Dim test As Boolean
'variable de test true=feuille existe, false=feuille n'existe pas
test = False
i = 1
'On boucle sur la totalité de la liste
'en testant chaque valeur de la liste
While Worksheets("Fiche_imm").Cells(i, 9).Value <> ""
'On test si la feuille correspondante existe ou non
For j = 1 To Sheets.Count
    If Sheets(j).Name = Worksheets("Fiche_imm").Cells(i, 9).Value Then
    'la feuille existe
    test = True
    Exit For
    End If
Next j
'si la feuille n'existe pas on la crée (en dernière position)
If test = False Then
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
'et on la renomme
Worksheets(Worksheets.Count).Name = Worksheets("Fiche_imm").Cells(i, 9).Value
End If
i = i + 1
Wend
End Sub

Je pense que certains diront qu'il n'est pas optimisé mais sinon ça marche...






Tubafat
 
Avant d'imprimer, pensez à l'environnement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
13 sept. 2007 à 14:14
Salut Tubafat Ce n'est pas une liste qu'il a mais une liste de données de validation ... On ne peut pas boucler la dessus

Cliquons "Réponse Acceptée" quand c'est le cas
JML. Partageons notre savoir et nos acquis

0
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
13 sept. 2007 à 14:24
Salut JM247L
Ben ... je l'ai fait!

Pour moi une liste de données de validation doit avoir une référence quelquepart dans la feuille... A moins bien sur qu'il rentre tout directement à la main et là c'est mort!!!

Tubafat  
Avant d'imprimer, pensez à l'environnement
0
clemodoun Messages postés 32 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 21 novembre 2007
13 sept. 2007 à 14:25
Rebonjour Tubafat,


Merci. Je pense que tu es en train de me donner un grand coup de pouce. Je n'ai pas encore tester ton code. Cependant, une première question me vient à l'esprit. Excuse moi d'ores et déjà si elle est bête. Pourquoi, tu veux créer les new sheets dans le activeworbook alors que je souhaite les créer dans un classeur existant qui s'appelle "CONSOLIDATION_FICHE_IM".
0
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
13 sept. 2007 à 14:31
J'avais pas compris...
Ben t'as juste qu'à modifier ça!!!
Et par la même occasion, fait les test sur les noms des feuilles en précisant le nom de ton workbook
En gros il faut remplacer
Activeworkbook par Workbook("CONSOLIDATION_FICHE_IM")
 et préciser le workbook devant chaque élément sheets ou worksheets...

Par exemple:
If test = False Then
Workbook("CONSOLIDATION_FICHE_IM").Sheets.Add After:=Workbook("FICHE_IM").Worksheets(Worksheets.Count)

A toi d'adapter ton code en fonction du nom de tes classeurs...

N'oublie pas d'accepter les posts qui t'ont aidés...

Tubafat  
Avant d'imprimer, pensez à l'environnement
0
clemodoun Messages postés 32 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 21 novembre 2007
13 sept. 2007 à 15:02
Tubafat,

Je viens de tester ton code dans un nouveau classeur vide. J'ai fait dans le new classeur sur la feuille 1 en cellule I1 une liste de données de validation a,b,c,d,e,f,g,h,i.

J'ai modifié le code comme suit:

Private Sub CommandButton1_Click()


Dim i As Integer
Dim j As Integer
Dim test As Boolean
'variable de test true=feuille existe, false=feuille n'existe pas
test = False
i = 1
'On boucle sur la totalité de la liste
'en testant chaque valeur de la liste
'While Worksheets("Fiche_imm").Cells(i, 9).Value <> ""
While Worksheets("Feuil1").Cells(i, 9).Value <> ""
'On test si la feuille correspondante existe ou non
For j = 1 To Sheets.Count
    'If Sheets(j).Name = Worksheets("Fiche_imm").Cells(i, 9).Value Then
    If Sheets(j).Name = Worksheets("Feuil1").Cells(i, 9).Value Then
    'la feuille existe
    test = True
    Exit For
    End If
Next j
'si la feuille n'existe pas on la crée (en dernière position)
If test = False Then
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
'et on la renomme
'Worksheets(Worksheets.Count).Name = Worksheets("Fiche_imm").Cells(i, 9).Value
Worksheets(Worksheets.Count).Name = Worksheets("Feuil1").Cells(i, 9).Value
End If
i = i + 1
Wend


End Sub

Mais hélas, en l'exécutant, rien ne se passe dans mon classeur. Ai-je fait une grosse connerie ou n'ai-je rien compris?
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
13 sept. 2007 à 15:16
Tubafat

Au risque de paraître borné, il a écrit ce qui suit :
   cellule I1 une liste de données de validation a,b,c,d,e,f,g,h,i.
Ca me parait clair, ce n'est pas une liste de données contenu dans une suite de cellule mais une liste de données de validation contenu dans une cellule
Cliquons "Réponse Acceptée" quand c'est le cas
JML. Partageons notre savoir et nos acquis
0
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
13 sept. 2007 à 15:18
Houlà...

Alors, premièrement où as tu mis le bouton etl a macro?
Je suppose que c'est dans le classeur "FICHE_IMM" sinon c'est pas bon...

Ensuite je ne comprends pas l'intérêt de cette ligne:
While Worksheets("Feuil1").Cells(i, 9).Value <> ""
Car je ne crois pas que tu ais besoin d'avoir la même liste de validation dans ton classeur de destination?
De plus, tu imbriques 2 boucles While, mais tu ne mets qu'un seul Wend, donc ça ne peut pas marcher.

Enfin, tu ne précises à aucun moment le workbook comme précisé dans mon post précédent...

Tubafat  
Avant d'imprimer, pensez à l'environnement
0
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
13 sept. 2007 à 15:24
1017721

JM247L
>> Tu ne me parais pas borné vu que tu as tout à fait raison!!

clemodoun>> Comme l'a judicieusement fait remarqué JM247L là macro ne marche pas si tu fais ta liste déroulante de cette façon...

càd valeur de la cellule I1 = a, b, c, d, ...Mais seulement si I1 a, I2 b, I3 = c, ...

Tubafat  
Avant d'imprimer, pensez à l'environnement
0
clemodoun Messages postés 32 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 21 novembre 2007
13 sept. 2007 à 16:10
Alors est-ce la fin de mes rêves? N'avez-vous pas une idée de génie à me proposer pour contourner la difficulté? Et si je remplaçais ma liste de données de validation par un combobox? Pouvez-vous m'aider à réaliser alors mon rêve. Et si oui, quelle sera alors la macro adaptable à ce combobox?


MILLE MERCIS.
0
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
13 sept. 2007 à 16:21
Salut ce que je t'ai proposé peut marcher si ut remplis un élément de liste par cellule. Par exemple:

I1 = a
I2 = b
I3 = c
I4 = d
...
La boucle que j'ai mis dans le code boucle de la cellule I1 à la dernière cellule remplis de la colonne I...

Après bien sur tu peux aussi utiliser un combobox mais la syntaxe sera différente.

Tubafat  
Avant d'imprimer, pensez à l'environnement
0
clemodoun Messages postés 32 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 21 novembre 2007
13 sept. 2007 à 17:26
Tubafat,


En effet ton code marche si je fais
I1 = a
I2 = b
I3 = c
I4 = d

Mais alors, comment faire pour que chaque feuille créée me reprenne pil poil les informations lui correspondant sachant que ces infos sont automatiquement crées sur la même et unique feuille "FICHE_IMM" en fonction de l'immeuble sélectionné dans la liste de validation de données?   
0
tubafat Messages postés 79 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 25 septembre 2007
13 sept. 2007 à 17:32
Pour ça je pense que tu peux t'aider de l'enristreur de macro, lance le, copie tes cellules à la main et tu auras la syntaxe à utiliser...

Tubafat  
Avant d'imprimer, pensez à l'environnement
0
Rejoignez-nous