Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Erreur de code

15 réponses
Avatar
Patrick Bastard
Bonsoir à toutes et tous.

J'ai tenté de modifier ce code provenant de Denis Michon, Rural Thierry et
de Frédéric Sigonneau pour, qu'à partir de la feuille de départ sur laquelle
je le lance, un duplicata se crée pour chaque jour du mois (mêmes formules,
mêmes mises en forme sur les 5 premières colonnes).

********************************
Extrait :
'Ajoute les feuilles.
Err = 0
For A = LastDay To 1 Step -1
Columns("A:E").Select.Copy
Sheets.Add.Paste
Set Sh = Sheets.Add
Sh.Name = Format(DateSerial(Annee, LeMois, A), "dd-mm-yyyy")
If Err <> 0 Then
Application.DisplayAlerts = False
Sh.Delete
Err = 0
End If
Next
Application.DisplayAlerts = True
Set Sh = Nothing
End Sub
*******************************
Qui peut me dire ce qui cloche ?

Merci et bon WE à vous.


--
Bien cordialement,
=====================================
P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse

Une foule de conseils utiles sur le site de Misange :
http://www.excelabo.net

5 réponses

1 2
Avatar
Patrick Bastard
Bonsoir, *Denis*.

Le code que te m'adresses est celui que j'avais récupéré, et adapté, car il
ne correspondait pas exactement à mon besoin :
Insertion entre une feuille "Total" et une feuille "Premier" de manière à ce
que je puisse récupérer dans "Total "des calculs (principalement totaux et
nbval) sur l'ensemble des feuilles du mois.

Merci de ton aide, et bien entendu s'il te vient une autre idée...


--
Bien cordialement,
==================================== P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse



Bonjour Patrick,

Ce code génère un nouveau classeur ayant toutes les feuilles du mois
basé sur une feuille "Modèle" existant dans le classeur où tu mettras
cette macro.

'----------------------------------------
Sub AjouterFeuille()

'Définition des variables
Dim Wk As Workbook, NewWk As Workbook
Dim MaDate As Variant
Dim LastDay As Integer, Annee As Integer
Dim LeMois As Integer, A As Integer
Dim AcName As String

Application.ScreenUpdating = False

'Demande à l'usager le mois.
Do
MaDate = InputBox("Entrez une date du mois pour " & _
"lequel il faut créer une feuille pour " & _
"chacun des jours." & vbLf & vbLf & _
"Exemple : 1/2/2001", "Une feuille par jour")
'Si l'usager annule l'opération
If MaDate = "" Then Exit Sub
If Not IsDate(MaDate) Then
MsgBox "La donnée saisie ne représente " & _
"pas un format date reconnu par excel."
End If
Loop Until IsDate(MaDate) Or MaDate = "" = True

MaDate = Format(MaDate, "dd-mm-yy")
Annee = Year(MaDate)
LeMois = Month(MaDate)
'Détermine la dernière journée du mois choisi.
LastDay = Day(DateSerial(Annee, LeMois + 1, 0))

AcName = ThisWorkbook.Name

Set Wk = ThisWorkbook
Set NewWk = Workbooks.Add(-4167)
'Ajoute les feuilles.
For A = 1 To LastDay
With NewWk
Wk.Worksheets("Modèle").Copy _
after:=NewWk.Worksheets(NewWk.Worksheets.Count)
.ActiveSheet.Name = Format(DateSerial(Annee, _
LeMois, A), "dd-mm-yyyy")
End With
Next
Application.DisplayAlerts = False
With NewWk
.Worksheets("Feuil1").Delete
.Worksheets(1).Activate
End With

Workbooks(AcName).Activate
Application.DisplayAlerts = False

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


Salutations!




"Patrick Bastard" <bastardp"chez"free.fr> a écrit dans le message de
news: % Bonjour à tous

Je m'en sors petit à petit, tant bien que mal :

Créer un classeur mensuel avec une feuille par jour à partir d'un
modèle en
reprenant mise en forme, validation, objets etc...

Mon classeur de départ : 3 onglets : "Premier", "Modèle" et "Total"
"Premier "est la solution que j'ai trouvée pour consolider dans "Total
"toutes les feuilles qui seront créées : =(SOMME(Premier:Modèle!A3) ou
=(NBVAL(Premier:Modèle!A3)

Le bout de code ci-dessous fonctionne :-) quand les feuilles Premier
et
Modèle sont affichées, mais *ne fonctionne pas* :-( lorsqu'elles sont
masquées :

'Boucle pour copier"Modèle" autant de fois qu'il y a de jours.
'Et renomme chaque feuille avec la date.
For A = 1 To LastDay Step 1
Sheets("Modèle").Select
Sheets("Modèle").Copy Before:=Sheets("Modèle")
Set Sh = Worksheets(Worksheets.Count - 2)
With Sh
.Visible = True
.Name = Format(DateSerial(Annee, LeMois, A), "ddd
dd-mm-yy") If Err <> 0 Then
Err = 0
End If
End With
Next

Un grand merci donc à qui voudra bien m'expliquer comment paramétrer
Copy
Before et Worksheets.Count
pour que mes feuilles créées soient correctement nommées, soient
placées
entre"Premier" et "Modèle", et restent visibles !!!

Question subsidiaire pour les gagnants : quelle différence entre
Sheets.Count et Worksheets.Count.

Désolé si ces questions sont basiques, mais je persiste à débuter en
VBA.

PS : je pense que le classeur terminé pourrait être utile à d'autres,
et je
le soumettrai à Misange.

Cordialement,

Patrick


Avatar
Patrick Bastard
Merci à tous,

j'essayais de créer le fil à couper le beurre.
Pour le problème des feuilles cachées, il suffit de les cacher *après* avoir
généré les autres.
Et ça, je sais faire.

Mais j'aimerais bien comprendre quand même, alors vos explications sont les
bienvenues.

Bonne nuit à tou(te)s,


--
Bien cordialement,
==================================== P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse

Une foule de conseils utiles sur le site de Misange :
http://www.excelabo.net
Avatar
Philippe.R
Bonsoir Patrick,
Un classeur doit toujours avoir une feuille visible au moins.
--
Amicales Salutations
XL 97 / 2000 / 2002
Retirer A_S_ pour répondre en privé.

"Patrick Bastard" <bastardp"chez"free.fr> a écrit dans le message de news:

Merci à tous,

j'essayais de créer le fil à couper le beurre.
Pour le problème des feuilles cachées, il suffit de les cacher *après* avoir
généré les autres.
Et ça, je sais faire.

Mais j'aimerais bien comprendre quand même, alors vos explications sont les
bienvenues.

Bonne nuit à tou(te)s,


--
Bien cordialement,
==================================== > P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse

Une foule de conseils utiles sur le site de Misange :
http://www.excelabo.net




Avatar
Patrick Bastard
Bonsoir, *Philippe*.


Un classeur doit toujours avoir une feuille visible au moins.


C'est ce que j'ai appris à mes dépens, mais j'ai réussi à contourner le
problème en masquant les premières après la création des suivantes.


--
Bien cordialement,
==================================== P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse

Avatar
Patrick Bastard
Bonsoir, *Alain *.

Pour la question subsidiaire :
Insére une feuille graphique dans ton classeur puis lance cette macro.

Sub SheetsCount_OU_WorksheetsCount()
MsgBox "Worksheets.Count = " & Worksheets.Count & vbNewLine & _
vbNewLine & "Sheets.Count = " & Sheets.Count
End Sub

Alain CROS


Cet exemple simple m'a permis de comprendre que Worksheets.count dénombre
les feuilles de calcul, et que Sheets;count dénombre toutes les feuilles
(calcul et graphique) Macro Excel4 aussi, je suppose, mais je n'ai pas
encore vérifié.

Sois-en remercié.

Bien cordialement,

Patrick.

1 2