Copier un feuille de calcul modèle à partir d'une date donnée

yubstart

XLDnaute Nouveau
Copier une feuille de calcul modèle à partir d'une date, à l'ouverture du classeur

Bonjour à tous,

Je cherche à copier automatiquement (dès que j'ouvre le classeur) une feuille de calcul pour le mois à venir, en donnant le nom du mois en question à la nouvelle feuille. Je dois avouer que je n'ai aucune piste.

Ex. :
Déjà fabriquée : la feuille modèle nommée "modele" où il ne reste qu'à mettre quelques chiffres, les formules sont prêtes, la feuille "modele" est masquée

Nous sommes le 29 mai 2008 :j'ouvre le classeur, à cet instant, deux cas de figure
  • la feuille nommée "juin 2008" a déjà été créé et dans ce cas, il n'y a rien à faire
  • la feuille "juin 2008" n'existe pas, et alors il faut la créer et y copier le contenu de la feuille modèle
Pourriez vous me dépanner, svp?

J'utilise Office 2007 pro plus

La seule chose que j'ai jamais faite sur Excel, c'est faire des formules à gogo, je n'ai jamais fait de VBA, mais j'ai l'intuition que c'est l'outil le plus adapté.

P.S. je suis newbies, si vous avez des remarques sur ma manière de procéder pour faire la demande, n'hésitez pas.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Copier un feuille de calcul modèle à partir d'une date donnée

Bonsoir,
Je vois que personne ne vous a encore répondu ! Je vais donc le faire bien que possédant seulement Excel 2003.
En effet, il vous faut une macro, et donc utiliser VBA. En fait ce n'est pas très compliqué.
1) Accédez à VBA (onglet développeurs du ruban)
2) Afficher l'explorateur de projets
3) Dans ThisWorkbook, entrez le code suivant (la macro se déclenche à l'ouverture du fichier) :

Private Sub Workbook_Open()
Worksheets(Sheets(1).Name).Activate
If Now > DateValue("28 " & Sheets(1).Name) Then
Sheets.Add
Worksheets("modele").Range("1:1048576").Copy _
Destination:=Worksheets(Sheets(1).Name).Range("A1")
Sheets(1).Name = Format(Now + 15, "mmm yyyy")
End If
End Sub

Bon courage et A+
 

job75

XLDnaute Barbatruc
Re : Copier un feuille de calcul modèle à partir d'une date donnée

J'ai été un peu vite pour la dernière ligne, entrez plutôt le code suivant :

Private Sub Workbook_Open()
Worksheets(Sheets(1).Name).Activate
x = DateValue("28 " & Sheets(1).Name)
If Now > x Then
Sheets.Add
Worksheets("modele").Range("1:1048576").Copy _
Destination:=Worksheets(Sheets(1).Name).Range("A1")
Sheets(1).Name = Format(x + 4, "mmm yyyy")
End If
End Sub

A+
 

yubstart

XLDnaute Nouveau
Re : Copier un feuille de calcul modèle à partir d'une date donnée

Bonsoir,

merci pour la réponse.
J'ai tenté de tester la première macro tapée sur mon pc, malheureusement, il n'y a pas moyen de l'exécuter, une alerte de sécurité :eek: que je n'arrive pas à contourner :
"Les macros ont été désactivées"
je clique donc sur option et...
"ce fichier contient des macros non chiffrées qui ont été désactivées car aucun logiciel antivirus n'est installé pour les analyser. Pour exécuter ces macros, supprimez le chiffrement ou les restrictions d'autorisation sur le fichier"
incompréhensible j'ai bien un antivirus mais je ne vois pas comment le faire comprendre à Excel:confused:


Donc je cherche maintenant à pouvoir tester cette fameuse macro, pour ensuite comprendre comment elle fonctionne

@+
 

yubstart

XLDnaute Nouveau
Re : Copier un feuille de calcul modèle à partir d'une date donnée

Apparemment c'est un problème seulement du à mon fichier, puisque si je crée un fichier test.xls ça fonctionne.

je teste donc la macro sur un classeur qui contient une feuille "modele" et "mai 2008" et feuil2
mais il y a une "erreur d'éxecution 13 , incompatibilité de type" à l'ouverture du fichier, je lance le débogueur qui me surligne :
x = DateValue("28 " & Sheets(1).Name)

pas de bol.
je suis persuadé que c'est du à un tout petit rien
je joins le fichier en question ce sera peut être plus clair, peut être ai je commis une erreur
 

Pièces jointes

  • test.xls
    31.5 KB · Affichages: 124
  • test.xls
    31.5 KB · Affichages: 124
  • test.xls
    31.5 KB · Affichages: 127
Dernière édition:

job75

XLDnaute Barbatruc
Re : Copier un feuille de calcul modèle à partir d'une date donnée

Sur Excel 2003, tout est OK. Il faut que la feuille mai 2008 soit la 1ère (à gauche). Pour tester sans changer la date système, remplacer 28 par 18 et le 4 par 14. Ne pas oublier de réinitialiser à chaque fois. Merci de me tenir au courant.
 

yubstart

XLDnaute Nouveau
Re : Copier un feuille de calcul modèle à partir d'une date donnée

Merci,
mais comment peut on faire pour que ça fonctionne si la feuille "mai 2008" est à droite, c'est plus commode pour la gestion de mon classeur.
Explication : mon classeur sert pour ma compta
feuille n°1 : bilan de tous les comptes
feuille n°2 : PEL
feuille n°3 : Emprunts
etc...
puis on poursuit par
feuille n°7 : avril 2008
feuille n°8 : mai 2008
etc... (donc succession de mois, et si le dernier mois est le mois en cours, je crée la feuille pour le mois suivant si ça n'a pas déjà été fait)

Nota, pour que ça fonctionne j'ai du changer "1:1048576" en "1:500"

@+
 
Dernière édition:

yubstart

XLDnaute Nouveau
Re : Copier un feuille de calcul modèle à partir d'une date donnée

Bizarre,

Je viens de trouver pourquoi les macro étaient bloquées sur mon premier classeur, c'est parce que j'enregistrai mon document avec un mot de passe. Une fois celui ci supprimé plus de problème.

Voilà un problème de réglé, ça peut toujours servir de le savoir.
 

job75

XLDnaute Barbatruc
Re : Copier un feuille de calcul modèle à partir d'une date donnée

Voici donc le code que vous souhaitez. Cette fois la feuille "modele" doit être la dernière (à droite) et "mai 2008" l'avant-dernière.

Private Sub Workbook_Open()
Worksheets("modele").Activate
x = DateValue("28 " & Sheets(Sheets.Count - 1).Name)
If Now > x Then
Sheets.Add
Worksheets("modele").Range("1:500").Copy _
Destination:=Worksheets(Sheets(Sheets.Count - 1).Name).Range("A1")
Sheets(Sheets.Count - 1).Name = Format(x + 4, "mmm yyyy")
End If
End Sub

A+
 

yubstart

XLDnaute Nouveau
Re : Copier un feuille de calcul modèle à partir d'une date donnée

Merci,

c'est parfait.
Pour pofiner un peu la chose, existe-t-il un moyen de copier aussi les dimensions des lignes et colonnes et éventuellement les graphiques?

Pour le dépannage, vraiment un grand merci. Vous avez été efficace et rapide.

Au fait comment montre-t-on que le problème est résolu sur le forum?

Maintenant, je vais essayer de décortiquer ce code pour pouvoir à l'avenir en construire un moi même (quels documents pourraient m'aider pour apprendre à faire cela d'après vous?)
 

job75

XLDnaute Barbatruc
Re : Copier un feuille de calcul modèle à partir d'une date donnée

Voici une dernière mouture, plus élégante :

Private Sub Workbook_Open()
Sheets("modele").Activate
x = DateValue("28 " & Sheets(Sheets.Count - 1).Name)
If Now > x Then
Sheets.Add
Sheets("modele").Range("1:500").Copy _
Destination:=Sheets(Sheets.Count - 1).Range("A1")
Sheets(Sheets.Count - 1).Name = Format(x + 4, "mmm yyyy")
End If
End Sub

En fait je programme des macros sur VBA occasionnellement depuis 2 ou 3 ans. Comme doc, je me sers uniquement de l'aide VBA, et particulièrement des exemples qui sont donnés.

Je suis heureux d'avoir pu vous aider.
Au revoir
 

job75

XLDnaute Barbatruc
Re : Copier un feuille de calcul modèle à partir d'une date donnée

Désolé yubstart, je n'ai pas répondu à l'une de vos questions, qui est importante.
Pour copier les dimensions des lignes et colonnes, il faut impérativement copier TOUTE la feuille "modele", donc pour Excel 2007 écrire "1:1048576".
Si un graphique est incorporé dans cette feuille , il faut revoir la macro en utilisant Paste, et voici ce que cela donne :

Private Sub Workbook_Open()
x = DateValue("28 " & Sheets(Sheets.Count - 1).Name)
If Now > x Then
Sheets("modele").Activate
Sheets("modele").Range("1:1048576").Copy
Sheets.Add
ActiveSheet.Paste Destination:=ActiveSheet.Range("A1")
Sheets(Sheets.Count - 1).Name = Format(x + 4, "mmm yyyy")
End If
End Sub

Dites-moi si celà marche pour vous.

A+
 

yubstart

XLDnaute Nouveau
Re : Copier un feuille de calcul modèle à partir d'une date donnée

Merci,

mais grâce à toutes les infos que vous m'avez fait parvenir, j'ai pu comprendre comment ça fonctionnait et j'ai donc tapé ceci, qui fonctionne impeccablement.

PHP:
Private Sub Workbook_Open()
    dernier_mois = DateValue("18 " & Sheets(Sheets.Count - 1).Name)
    nouveau_mois = Format(dernier_mois + 14, "mmm yyyy")
    If Now > dernier_mois Then
        Sheets("modele").Copy before:=Sheets("modele")
        Sheets(Sheets.Count - 1).Name = nouveau_mois
        Sheets(nouveau_mois).Visible = True
    End If
   Sheets(Format(Now, "mmm yyyy")).Activate
    
End Sub
Et j'apprécie les gens qui vont au bout des choses, merci pour les précisions:)
Et à charge de revanche, j'espère en apprendre un peu plus sur excel afin de pouvoir vous apporter une aide un jour. En tout cas, je vais sérieusement me mettre au VBA, c'est plutot intuitif (du moins pour le peu que j'en ai vu)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 202
Messages
2 086 180
Membres
103 152
dernier inscrit
Karibu