Creer des nouvelles feuilles a partir d'une feuille modele

Fermé
SueZollars Messages postés 10 Date d'inscription lundi 13 mai 2013 Statut Membre Dernière intervention 31 juillet 2013 - 13 mai 2013 à 20:36
 Sophie - 10 juil. 2013 à 18:15
Bonjour a tous,

Je suis nouvelle ici et j'ai lu quelques discussions mais je n'ai rien trouve qui puisse resoudre mon probleme (ou je n'ai peut etre rien compris).

Je voudrai creer un classeur excel dont la premiere feuille serait le modele des feuilles qui seront generees par la suite. Sur cette feuille, je compte extraire chaque jour des donnes d'un programme que j'utilise dans mon entreprise.

Voila ce que j'essaye de faire sur cette 1ere feuille :
1_ Rentrer la date dans la cellule A1, la je voudrait qu'une nouvelle feuille se creee automatiquement, avec la date comme nom, et le meme format que la feuille 1
2_ Faire mon extraction journaliere sur la nouvelle feuille.

La ou je bloque : je ne trouve pas comment creer une nouvelle feuille avec le meme format que la feuille modele. Et, au niveau de l'extraction journaliere, est ce je peux appliquerla meme macro sur mes nouvelles feuilles ou non?

Je suis novice en Excel/VBA donc j'ai vraiment besoin d'aide :( J'espere que j'ai ete claire, je ne suis meme pas sure de me comprendre moi meme...

Merci d'avance !
A voir également:

10 réponses

.Grincheux. Messages postés 211 Date d'inscription vendredi 10 mai 2013 Statut Membre Dernière intervention 22 octobre 2016 84
13 mai 2013 à 23:44
Bonjour,

Il te faudra en effet probablement passer par une macro, qui dupliquera ton 1er onglet (.Copy / .Paste) puis le renommera à partir du contenu de la cellule A1.
Ta 2ème feuille sera ainsi la copie conforme de la 1ère.

Par contre je ne suis pas sûr de comprendre ce que tu entends par "Et, au niveau de l'extraction journalière, est ce je peux appliquer la même macro sur mes nouvelles feuilles ou non? "

Bonne journée !
0
via55 Messages postés 14408 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 5 mai 2024 2 704
13 mai 2013 à 23:50
Bonsoir Sue

Le plus simple

Tu crées ta feuille modèle en Feuil 1 que tu appelles MODELE
Tu la masques
Tu mets l'enregistreur de macro en marche, tu donnes le nom et le raccourci que tu veux à ta macro puis :
Tu clic sur l'onglet de Feuil 2 puis Afficher et tu fais afficher MODELE
Tu clic sur l'onglet MODELE puis sur Deplacer Copier la feuille et tu coches bien l'option Copier
Tu clic à nouveau sur l'onglet MODELE et tu fais à nouveau cacher la feuille MODELE
ET tu arrêtes l'enregistreur de Macro

Chaque fois que tu lancera l'exécution de la macro une nouvelle feuille identique à MODELE sera créee qu'il te suffira de renommer comme tu veux

Cdlmnt
0
SueZollars Messages postés 10 Date d'inscription lundi 13 mai 2013 Statut Membre Dernière intervention 31 juillet 2013
14 mai 2013 à 17:26
Bonjour a tous,

Tout d'abord, merci beaucoup pour votre aide.

En etudiant vos reponses, je suis arrivee a quelque chose de plutot correct pour mon premier point. Je dupplique simplement la feuille 1 par une macro, que j'ai obtenu en parti par l'enregistreur.

Ce que je voulais dire par "Et, au niveau de l'extraction journalière, est ce je peux appliquer la même macro sur mes nouvelles feuilles ou non? " c'est qu'une fois ma feuille creee, je voudrais appliquer la macro qui extrait les donnees dont j'ai besoin. Mais est ce que la maccro que je vais creer va s'appliquer a toute ces nouvelles feuilles? J'ai cree un bouton associee a une macro sur la feuille 1 mais sur les autres feuilles qui sont dupliquee, la macro ne se lance pas lorque je clique sur ce bouton.

J'espere que je suis claire...

Merci encore
0
PHILOU10120 Messages postés 6371 Date d'inscription lundi 16 avril 2012 Statut Contributeur Dernière intervention 5 mai 2024 797
14 mai 2013 à 18:21
Bonjour

Le bouton qui lance la macro est actif après duplication d'une feuille, il faut faire attention dans la macro de lancer celle-ci sur feuille active et non sur le nom d'une feuille et comme cela la macro peu servir sur toutes les nouvelles feuilles et elle s'exécutera sur la feuille active
0

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

Posez votre question
SueZollars Messages postés 10 Date d'inscription lundi 13 mai 2013 Statut Membre Dernière intervention 31 juillet 2013
15 mai 2013 à 14:27
Effectivement, ca marche :)
Il ne me reste plus qu'a m'occuper de mon extraction...

Merci beaucoup en tout cas :)
0
SueZollars Messages postés 10 Date d'inscription lundi 13 mai 2013 Statut Membre Dernière intervention 31 juillet 2013
15 mai 2013 à 16:21
J'abuse de votre aide mais j'ai un souci...

Quand, dans ma feuille 1, je tape en A1 une date qui a deja ete utilisee, la macro bug car l'onglet existe deja.

J'ai essaye d'ajouter a ma macro existante un test qui affiche une message box type "cette date existe deja" pour pouvoir ensuite rentrer une autre date. Je suis passee par une fonction que j'ai trouvee dans un forum mais ca n'a pas l'air de fonctionner. La macro bug toujours, la message box s'affiche tout le temps, meme quand la date est correct. Bref je ne sais pas comment construire ma macro avec cette nouvelle condition.

J'espere que vous pourrez m'aider.

Merci d'avance !
0
.Grincheux. Messages postés 211 Date d'inscription vendredi 10 mai 2013 Statut Membre Dernière intervention 22 octobre 2016 84
15 mai 2013 à 21:12
Donne-nous le code que tu as utilisé pour le test, comme ça on pourra te dire ce qui ne va pas et tu apprendras de tes erreurs ;-)
0
SueZollars Messages postés 10 Date d'inscription lundi 13 mai 2013 Statut Membre Dernière intervention 31 juillet 2013
15 mai 2013 à 21:20
Salut Grincheux et les autres,

Voila mon "test", je l'ai modifiee entre temps pour resoudre mon probleme, mais il ne fonctionne toujours pas.


Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Byte

If Intersect(Target, [B1]) Is Nothing Then

Else

If Target.Value <> "" Then

For i = 1 To Sheets.Count

If Target.Value = Sheets(i).Name Then
MsgBox "La feuille existe déjà !!!"
Exit Sub

Next i

Else
ActiveWorkbook.Sheets(1).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = [B1]

End If

Else
MsgBox ("Rentrer la date")

End If

End If

End Sub
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
15 mai 2013 à 22:45
Bonjour,

avec ton if dans la boucle for et le else à l'extérieur de cette boucle ça ne risque pas de marcher.

avant la boucle met une variable boolean ok à true.
Si tu trouves ta feuille tu la mets à false, et après la boucle tu testes :
if ok then
'créer feuille'
else
' ce que tu veux
endif

eric
0
SueZollars Messages postés 10 Date d'inscription lundi 13 mai 2013 Statut Membre Dernière intervention 31 juillet 2013
16 mai 2013 à 16:22
Bonjour Eric,

J'ai essaye de prendre en compte tes remarques concernant mes erreurs d'ecriture sur les bouclesm les if... J'en arrive a la :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Integer

If Intersect(Target, [B1]) Is Nothing Then
    
Else
            
            For i = 1 To Sheets.Count
            
                If [B1] = Sheets(i).Name Then
                    MsgBox "La feuille existe déjà !!!"
                    Exit Sub
                    
                End If
            
            Next

             ActiveWorkbook.Sheets(1).Copy After:=Worksheets(Worksheets.Count)
             ActiveSheet.Name = [B1]
                
End If

End Sub


Par contre, je ne comprends pas trop ce que tu dis par rapport a la variable boolean, peux tu me donner plus d'explications stp ?

Merci d'avance
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
Modifié par eriiic le 16/05/2013 à 17:46
Bonjour,

sans tester ça donnerait ça :
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer, ok As Boolean
    If Not Intersect(Target, [B1]) Is Nothing Then
        ok = True
        For i = 1 To Sheets.Count
            If [B1] = Sheets(i).Name Then
                MsgBox "La feuille existe déjà !!!"
                ok = False
                Exit For
            End If
        Next
        If ok Then
            ActiveWorkbook.Sheets(1).Copy After:=Worksheets(Worksheets.Count)
            ActiveSheet.Name = [B1]
        End If
    End If
End Sub 


Sinon tu as une autre technique qui consiste à interroger la propriété .name ou .index de ta feuille.
Si elle n'existe pas tu as une erreur.
Tu sais si elle existe ou pas en gérant l'erreur générée si elle est absente, sans à avoir de boucle à faire sur toutes les feuilles.
Ex d'une fonction faisant ça :
Function existSheet(nomFeuille As String) As Long
    On Error Resume Next
    existSheet = Sheets(nomFeuille).Index
End Function

Si la feuille existe tu as son index, sinon 0 (Faux)

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
SueZollars Messages postés 10 Date d'inscription lundi 13 mai 2013 Statut Membre Dernière intervention 31 juillet 2013
20 mai 2013 à 14:22
Salut Eric,

Le test ne fonctionnais pas mais je suis parti de ton idee pour "trifouiller" un test. Il fonctionne donc j'en ai fini avec ca !

Merci a tous !
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
20 mai 2013 à 16:33
Bonjour,

par curiosité j'ai testé ce que je t'avais écrit, ça fonctionne très bien sans changer quoique ce soit.

eric
0
Bonjour,

Je viens d'utiliser votre méthode, c'est extra.
J'ai juste un soucis : à chaque nouvelle feuille créée, mes menus déroulant et mes liens hypertextes - présents dans la feuile 'MODELE' se bloquent.
Y a t'il une astuce ?
0