Report automatique excel
Dad
-
dad -
dad -
Bonjour,
J'ai un fichier excel qui me créer automatiquement avec une macro d'après une feuille modéle un feuille par jour du mois :
exemple
01 JUILLET 2011
02 JUILLET 2011 etc ect
et cela et sans fin en fonction de la plage de date que je défini.
Ce que j'ai besoin c'est que le total de la cellule M23 de la feuille du 01 JUILLET se reporte en cellule M3 de la feuille du 02 JUILLET et etc etc jusqu'a la dernier feuille
Est ce que qq aurait la macro qui va bien ?
Merci d'avance
J'ai un fichier excel qui me créer automatiquement avec une macro d'après une feuille modéle un feuille par jour du mois :
exemple
01 JUILLET 2011
02 JUILLET 2011 etc ect
et cela et sans fin en fonction de la plage de date que je défini.
Ce que j'ai besoin c'est que le total de la cellule M23 de la feuille du 01 JUILLET se reporte en cellule M3 de la feuille du 02 JUILLET et etc etc jusqu'a la dernier feuille
Est ce que qq aurait la macro qui va bien ?
Merci d'avance
A voir également:
- Report automatique excel
- Liste déroulante excel - Guide
- Réponse automatique thunderbird - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Déplacer colonne excel - Guide
5 réponses
Bonjour
mais ça peut se faire sans macro...
Michel
nbre = ThisWorkbook.Sheets.Count
For cptr = 2 To nbre
Sheets(cptr).Range("M3") = Sheets(cptr - 1).Range("M23")
Next
--
mais ça peut se faire sans macro...
Michel
Sauf que ton truc ne marche pas avec win32
puisque tu trouves ce code est super malgré ses incohérences et maladresses (ca marche mais c'est très lent et bouffe de la mémoire )
je ne suis pas de niveau pour bosser là dessus et je ne peux rien pour toi
bon WE
puisque tu trouves ce code est super malgré ses incohérences et maladresses (ca marche mais c'est très lent et bouffe de la mémoire )
je ne suis pas de niveau pour bosser là dessus et je ne peux rien pour toi
bon WE
je ne connais pas trop non plus en code et macro !
je dis que c'est super car j'ai trouvé ça sur un forum et en faisant un copier-coller il fait exactement ce que je voulais à savoir me créer des feuilles automatiquement d'après un modèle.
Par contre il me manque la fonction report comme j'explique plus haut.
Mais s'il existe mieux et plus rapide je suis preneur.
Je ne connais même pas la différence entre basics ou va pour moi c'est du grec tout ça !
je dis que c'est super car j'ai trouvé ça sur un forum et en faisant un copier-coller il fait exactement ce que je voulais à savoir me créer des feuilles automatiquement d'après un modèle.
Par contre il me manque la fonction report comme j'explique plus haut.
Mais s'il existe mieux et plus rapide je suis preneur.
Je ne connais même pas la différence entre basics ou va pour moi c'est du grec tout ça !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
RE re Michel
je suis pas très très fort sauf en copier coller ;-)
voici la macro que j'utilise merci de me dire comment intergrer ta macro:
Private Sub Copier_Nommer_Feuilles()
Dim oDat, i As Long
30 With [C20] 'Cellule à partir de laquelle sont placés les noms des feuilles _
à créer. Il peut y en avoir autant qu'on veut.
40 If Cells(Rows.Count, .Column).End(xlUp).Cells(1, 1).Row < .Row Then GoTo E
'Si toutes les cellules en-dessous de B11 sont vides, aller à E _
(c'est-à-dire ne rien faire).
50 With Application: .ScreenUpdating = False: .Calculation = xlManual: .EnableEvents = False: End With
'Ligne "technique" pour accélérer l'exécution.
60 oDat = Range(.Cells.Offset(-1, 0), Cells(Rows.Count, .Column).End(xlUp)).Value
'Place dans le tableau oDat (une colonne) les valeurs de B11 à Bn, _
où n est le numéro de la dernière ligne non vide de la colonne B.
70 For i = 2 To UBound(oDat, 1) 'Pour i variant de 2 au nombre de lignes _
du tableau oDat...
75 On Error GoTo M 'Pour sortir de la procédure si la feuille modèle _
n'existe pas.
80 Sheets("Feuille_modèle").Copy After:=Sheets(Sheets.Count) 'Ajoute une copie _
de la feuille "Feuille_modèle" à la fin du classeur.
85 Sheets(Sheets.Count).[I22].Value = CStr(oDat(i, 1)) 'No comment.
90 On Error GoTo S 'Si une erreur se produit dans la ligne qui _
suit, elle est ignorée, et l'exécution continue à la ligne _
suivante après le traitement de l'erreur (ligne S).
100 Sheets(Sheets.Count).Name = CStr(oDat(i, 1)) '...renomme _
la feuille créée avec le nom qui est dans la ligne i de la _
première colonne du tableau oDat. Si une valeur est manquante _
dans le tableau oDat ou si ce nom existe déjà dans le classeur, _
une erreur se produit. Grâce à la ligne 90 cette erreur est _
ignorée et l'exécution du code continue.
110 On Error GoTo 0 'A partir d'ici, les éventuelles erreurs ne sont plus _
ignorées.
120 Next 'Reprendre l'exécution à la ligne 75 avec la valeur suivante de i, _
tant que la dernière ligne du tableau oDat n'est pas atteinte.
130 With Application: .EnableEvents = True: .Calculation = xlAutomatic: .ScreenUpdating = True: End With
'Ligne "technique" pour rétablir les paramètres modifiés à la ligne 5. _
Le code fonctionne aussi si les lignes 5 et 14 sont supprimées, mais _
l'exécution est plus lente.
E: End With
Exit Sub
M: MsgBox "Le nom de la feuille modèle est incorrect.": Resume E
'Suppression de la feuille créée si une erreur survient ligne 100.
S: With Application: .DisplayAlerts = False: Sheets(Sheets.Count).Delete: .DisplayAlerts = True: End With
Resume Next
End Sub
je suis pas très très fort sauf en copier coller ;-)
voici la macro que j'utilise merci de me dire comment intergrer ta macro:
Private Sub Copier_Nommer_Feuilles()
Dim oDat, i As Long
30 With [C20] 'Cellule à partir de laquelle sont placés les noms des feuilles _
à créer. Il peut y en avoir autant qu'on veut.
40 If Cells(Rows.Count, .Column).End(xlUp).Cells(1, 1).Row < .Row Then GoTo E
'Si toutes les cellules en-dessous de B11 sont vides, aller à E _
(c'est-à-dire ne rien faire).
50 With Application: .ScreenUpdating = False: .Calculation = xlManual: .EnableEvents = False: End With
'Ligne "technique" pour accélérer l'exécution.
60 oDat = Range(.Cells.Offset(-1, 0), Cells(Rows.Count, .Column).End(xlUp)).Value
'Place dans le tableau oDat (une colonne) les valeurs de B11 à Bn, _
où n est le numéro de la dernière ligne non vide de la colonne B.
70 For i = 2 To UBound(oDat, 1) 'Pour i variant de 2 au nombre de lignes _
du tableau oDat...
75 On Error GoTo M 'Pour sortir de la procédure si la feuille modèle _
n'existe pas.
80 Sheets("Feuille_modèle").Copy After:=Sheets(Sheets.Count) 'Ajoute une copie _
de la feuille "Feuille_modèle" à la fin du classeur.
85 Sheets(Sheets.Count).[I22].Value = CStr(oDat(i, 1)) 'No comment.
90 On Error GoTo S 'Si une erreur se produit dans la ligne qui _
suit, elle est ignorée, et l'exécution continue à la ligne _
suivante après le traitement de l'erreur (ligne S).
100 Sheets(Sheets.Count).Name = CStr(oDat(i, 1)) '...renomme _
la feuille créée avec le nom qui est dans la ligne i de la _
première colonne du tableau oDat. Si une valeur est manquante _
dans le tableau oDat ou si ce nom existe déjà dans le classeur, _
une erreur se produit. Grâce à la ligne 90 cette erreur est _
ignorée et l'exécution du code continue.
110 On Error GoTo 0 'A partir d'ici, les éventuelles erreurs ne sont plus _
ignorées.
120 Next 'Reprendre l'exécution à la ligne 75 avec la valeur suivante de i, _
tant que la dernière ligne du tableau oDat n'est pas atteinte.
130 With Application: .EnableEvents = True: .Calculation = xlAutomatic: .ScreenUpdating = True: End With
'Ligne "technique" pour rétablir les paramètres modifiés à la ligne 5. _
Le code fonctionne aussi si les lignes 5 et 14 sont supprimées, mais _
l'exécution est plus lente.
E: End With
Exit Sub
M: MsgBox "Le nom de la feuille modèle est incorrect.": Resume E
'Suppression de la feuille créée si une erreur survient ligne 100.
S: With Application: .DisplayAlerts = False: Sheets(Sheets.Count).Delete: .DisplayAlerts = True: End With
Resume Next
End Sub
avec ce code comment dois je faire ? créer une macro ou le saisir dans la cellule avec = ?
Merci d'avance
j'ai l'impression d'avoir mal compris ta demande: tu crées un classeur donc tu cherches à écrire la formule et non reporter la valeur de M3 dans M23 onglet suivant
si oui, tu peux copier-coller ces lignes dans ta macro qui crée le classeur et à la suite de ton code qui crée et nomme les jours du mois (ou tu fais une macro séparée)
Dim nbre As Byte, cptr As Byte nbre = ThisWorkbook.Sheets.Count For cptr = 2 To nbre Sheets(cptr).Range("M3").FormulaLocal = "='" & Sheets(cptr - 1).Name & "'!M23" Next