Feuille modèle

Résolu/Fermé
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 - 14 sept. 2013 à 09:24
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 - 24 sept. 2013 à 21:41
Bonjour à toute la communauté.

J'ai ma crise Excel en ce moment, et j'ai besoin d'un coup de main de votre part pour ce que je ne parviens pas à faire.

Je ne sais trop comment m'y prendre, mais j'aimerai créer un fichier client dont toutes les feuilles (existantes et nouvellement créées) aient pour modèle une feuille nommée "Masque".

Si un changement est effectué sur la feuille "Masque" (ajout colonne, ligne, mise en gras par exemple), ce changement se répercuterait sur toutes les feuilles clients basées sur ce modèle "Masque".

Pour plus de facilité, voici un fichier exemple :

https://www.cjoint.com/?CIojuotkcal

Merci d'avance pour vos idées constructives !

A voir également:

16 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
14 sept. 2013 à 09:54
Bonjour,

Avant tout, tu peux te demander si tu utilises la bonne manière pour obtenir le résultat recherché. Il vaudrait peut-être mieux que tu disposes d'un masque pour l'affichage des données et d'une base de données.
https://www.cjoint.com/?CIoj1G7MmvN
A+
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
Modifié par touroul le 14/09/2013 à 11:18
Merci Gyrus pour ton travail.

En réalité, c'est assez éloigné de l'objectif.
Je ne cherche pas à récupérer des données dans plusieurs feuilles, mais à appliquer une mise en forme particulière à ma feuille Masque, avec répercussion immédiate sur toutes les feuilles basées sur Modèle.

Exemple dans une macro qui ressemblerait à ça :

Feuille "Chris ANTHEM" : masque="Modèle"
Feuille "Marc EURITHE" : masque="Modèle"
Feuille "Anne HEMMONNE" : masque="Modèle"
Si : Insertion Ligne entre L5 et L6 sur Modèle
Alors : Insertion Ligne entre L5 et L6 sur toutes les feuilles ayant pour masque "Modèle".
Si : Caractère gras en E18 sur Modèle
Alors : Caractère gras en E18 sur toutes les feuilles ayant pour masque "Modèle".

Est-ce faisable ?
Merci d'avance !
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
14 sept. 2013 à 12:08
Bonjour,

à tester :
Sub formaterFeuille()
Dim sh As Worksheet
For Each sh In Worksheets
If InStr("Accueil,Masque", sh.Name) = 0 Then
Worksheets("Masque").Cells.Copy
sh.[A1].PasteSpecial Paste:=xlPasteFormats
sh.[A1].PasteSpecial Paste:=xlPasteColumnWidths
End If
Next sh
End Sub
eric
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
Modifié par touroul le 14/09/2013 à 12:42
Bonjour Eric !

Les meilleurs s'y mettent ...

Malheureusement aucun effet sur mes feuilles.

J'essaie de comprendre le code (que j'ai collé dans ThisWorkBook) :

Sub formaterFeuille() 'nom de la macro
Dim sh As Worksheet 'sélection des feuilles
For Each sh In Worksheets 'pour toutes les feuilles contenant "sh"
If InStr("Masque", sh.Name) = 0 Then 'si on fait des modifs dans Masque
Worksheets("Masque").Cells.Copy 'on copie Masque dans le Presse-papiers
sh.[A1].PasteSpecial Paste:=xlPasteFormats 'on colle les formats dans les feuilles contenant "sh"
sh.[A1].PasteSpecial Paste:=xlPasteColumnWidths 'on colle la même largeur de colonne dans les feuilles contenant "sh"
End If
Next sh
End Sub

C'est plutôt bien parti pourtant. où ça cloche ? Merci d'avance !
0

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

Posez votre question
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
14 sept. 2013 à 13:56
En fait je viens de voir que ça fonctionne partiellement :
Mais je dois faire Alt+F8 et exécuter la macro qui est dans ThisWorkBook.

Comment automatiser la tâche dès qu'il y a une modif dans Masque ?

Merci !
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
14 sept. 2013 à 15:42
En fait je viens de voir que ça fonctionne partiellement :
Mais je dois faire Alt+F8 et exécuter la macro qui est dans ThisWorkBook.
Comment automatiser la tâche dès qu'il y a une modif dans Masque ?

Pourquoi la mettre dans Thisworkbook ? Pas d'intérêt.
Sinon un changement de format n'est pas un évènement, il faudra toujours la lancer. Tu peux toujours mettre un bouton sur la feuille.

eric
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
Modifié par touroul le 15/09/2013 à 09:19
Bonjour Eric et les autres

J'ai passé pas mal de temps sur ta macro, Eric.
C'est tout à fait ce que je voulais et me fera gagner beaucoup de temps.

Par contre j'ai un petit bug noté "Erreur d'exécution '1004' : "La méthode Activate de la classe Range a échoué".

Il semble qu'il y ait une incompatibilité entre 2 macros du classeur : la tienne et :

Option Explicit
Private Sub Workbook_Open() ' ouverture du fichier sur le 1er onglet
Sheets(1).Activate
[A1].Activate
End Sub
Private Sub Workbook_SheetActivate(ByVal sh As Object) 'ouverture de chaque feuille en A1
sh.[A1].Activate
End Sub

Le bug concerne l'ouverture de chaque feuille en A1.

Puis-je vous demander s'il y a une solution ?

Merci d'avance et bon dimanche !
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
15 sept. 2013 à 09:38
Bonjour,

sans fichier impossible de tester...
Sinon ce n'est pas plutôt sh.[A1].select que tu veux ?
eric
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
15 sept. 2013 à 09:47
Voici le fichier exemple :

https://www.cjoint.com/?CIpjTVq2Y1X

Une pression sur le bouton Formater selon Masque fait apparaître le bug.

une question d'ordre d'exécution des macros ?

Merci !!!
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
15 sept. 2013 à 10:26
Bizarrement le pastespecial provoque l'évènement sheetActivate mais sans activer la feuille.
Remplace par :
Private Sub Workbook_SheetActivate(ByVal sh As Object) 'ouverture de chaque feuille en A1
If ActiveSheet.Name = sh.Name Then sh.[A1].Select
End Sub
Et tant qu'on y est allège un peu ma macro, on ne va copier les formats que sur la plage utilisée :
Sub formaterFeuille()
Dim sh As Worksheet
For Each sh In Worksheets
If InStr("Accueil,Masque,Anne HEMMONNE", sh.Name) = 0 Then
With Worksheets("Masque")
.Range("A1", .Cells.SpecialCells(xlCellTypeLastCell)).Copy
End With
sh.[A1].PasteSpecial Paste:=xlPasteFormats
sh.[A1].PasteSpecial Paste:=xlPasteColumnWidths
End If
Next sh
Application.CutCopyMode = False
End Sub
eric
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
15 sept. 2013 à 10:49
En effet, adaptée à mon classeur, tes macros fonctionnent au poil !

Pour comprendre :
- "on ne va copier les formats que sur la plage utilisée" : qu'est-ce que ça signifie ?


- "For Each sh In Worksheets" : qu'est-ce que désigne le "sh" ? Pourquoi on l'utilise ?

Pardon pour ces questions mais j'aimerai vraiment piger un tout petit peu ... :)
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
15 sept. 2013 à 13:13
- "on ne va copier les formats que sur la plage utilisée" : qu'est-ce que ça signifie ?
avant je faisais :
.cells.copy : toute la feuille
après:
.Range("A1", .Cells.SpecialCells(xlCellTypeLastCell)).Copy : que la zone utilisée

- "For Each sh In Worksheets" : qu'est-ce que désigne le "sh" ? Pourquoi on l'utilise ?
Worksheets est la collection de toutes les feuilles du classeur.
Littéralement :
pour toutes les feuilles du classeur
si le nom est différent de ...
feuille suivante

eric
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
15 sept. 2013 à 13:19
C'est très clair à présent.

J'ai encore d'autres idées pour optimiser la fonction, mais je vais essayer seul.

Un grand merci Eric pour ton travail désintéressé.
Toute la communauté te doit beaucoup.
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
15 sept. 2013 à 14:00
De rien, n'oublie pas de mettre en résolu le moment venu.
eric
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
20 sept. 2013 à 19:25
Bonjour à tous.

Je reviens vers vous à propos de la macro d'Eriic qui fonctionne exactement comme je le souhaitais.

J'ai une demande supplémentaire, complétant cette macro doit je rappelle le code :
----------------------------------------
Sub FormaterSelonMasque()
Dim sh As Worksheet
For Each sh In Worksheets
If InStr("2013,2012,Labos,Listes,Stats,Essais,Graphique,Masque", sh.Name) = 0 Then
With Worksheets("Masque")
.Range("A1", .Cells.SpecialCells(xlCellTypeLastCell)).Copy
End With
sh.[A1].PasteSpecial Paste:=xlPasteFormats
sh.[A1].PasteSpecial Paste:=xlPasteColumnWidths
End If
Next sh
Application.CutCopyMode = False
End Sub
----------------------------------------

J'aimerais ajouter :
- copier contenu texte de la colonne A sur toutes les feuilles concernées et :
- copier contenu texte de la ligne 24 sur toutes les feuilles concernées.

J'ai bien trouvé la fonction .PasteSpecial xlPasteValues mais en essayant j'ai fait planter Excel ... champion !

Merci d'avance pour votre aide qui m'est si précieuse !
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
20 sept. 2013 à 20:17
Bonsoir,

si tu n'as pas de formules en colonne A et en ligne 24, ceci devrait suffire :
Sub FormaterSelonMasque()
Dim sh As Worksheet
For Each sh In Worksheets
If InStr("2013,2012,Labos,Listes,Stats,Essais,Graphique,Masque", sh.Name) = 0 Then
With Worksheets("Masque")
.Columns(1).Copy sh.Columns(1)
.Rows(24).Copy sh.Rows(24)
.Range("A1", .Cells.SpecialCells(xlCellTypeLastCell)).Copy
sh.[A1].PasteSpecial Paste:=xlPasteFormats
sh.[A1].PasteSpecial Paste:=xlPasteColumnWidths
End With
End If
Next sh
Application.CutCopyMode = False
End Sub
eric
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
Modifié par touroul le 20/09/2013 à 21:12
Bonsoir Eriic

Sympa de t'y remettre !

En effet ça va comme prévu.
Par contre y a-t-il moyen de créer des zones à copier ?
Un peu comme .(A1:A24).Copy sh.(A1:A24)

Je complique encore une dernière fois un petit peu :
Il y a, sur certaines cellules de la feuille Masque, des listes déroulantes que je ne retrouve pas sur les autres feuilles.
Par contre, les formules se recopient bien.

Est-ce possible ?

Merci encore, c'est fort appréciable d'être aidé.
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
20 sept. 2013 à 22:05
Bon, en fait , en tapant :
.Range("A1:A24").Copy sh.Range("A1:A24")
.Range("A36:A60").Copy sh.Range("A36:A60")
J'arrive à ne copier que certaines cellules (ça c'est fait ...)
Il ne reste que les listes déroulantes à récupérer ...
A plus si il te reste du courage pour moi !
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
20 sept. 2013 à 22:47
Peut-être qu'avec un fichier de travail on pourra regarder...
eric
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
21 sept. 2013 à 09:17
Bonjour Eriic

J'ai recréé les conditions de mon fichier original dans :
https://www.cjoint.com/?CIvjpUnvcov
J'ai noté les problèmes rencontrés en rouge.

Merci d'avance j'avance !
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
21 sept. 2013 à 10:12
Bonjour,

            With Worksheets("Masque")
...
sh.[E12:G12] = .[E12:G12]
End With
eric
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
21 sept. 2013 à 10:39
J'ai essayé, j'ai toujours l'erreur 400, tu ne l'as pas ?
Appliqué à mon fichier originel, dans les cellules où il y a des listes déroulantes, la liste ne change pas selon celle du Masque, et les cellules concernées affichent #VALEUR.
Please help !
BJ
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
Modifié par eriiic le 21/09/2013 à 11:11
j'ai toujours l'erreur 400
Et si tu disais en quelle ligne ??
Non, mais j'ai une erreur 1004 due à tes cellules fusionnées A11:B11.
Fuir la fusion de cellule et utiliser 'centrer sur plusieurs colonnes' dans Format de cellule.

Appliqué à mon fichier originel, dans les cellules où il y a des listes déroulantes, la liste ne change pas selon celle du Masque, et les cellules concernées affichent #VALEUR.
Ca marche bien sur l'exemple.

eric
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
21 sept. 2013 à 11:31
Suis vraiment désolé mais je ne me débarrasse pas de l'erreur 400.
C'est juste une boîte de dialogue à valider qui ne me montre pas la ligne en cause dans VB.
Je remets mon fichier exemple (créé en XLS sous Excel 2010).
J'y ai scindé A11 et B11.

https://www.cjoint.com/?CIvlDgVU1Wr

Je sais que c'est lourd et je m'en excuse, mais j'y tiens vraiment, mes listes déroulantes changent souvent.
Un grand merci d'avance Eriic.
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
21 sept. 2013 à 12:03
Si tu le fais en pas à pas avec F8 tu plantes toujours sur .Range("A1:A24").Copy sh.Range("A1:A24").
Il faut défusionner sur toutes les feuilles.
Clic sur la 1ère feuille, Shift+clic sur la dernière pour faire une sélection multiple et défusionner.
Sélectionner une feuille pour enlever la sélection multiple.

eric
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 238
21 sept. 2013 à 14:56
ok,

Déjà supprime les lignes et colonnes vides qui ne servent à rien dans ta feuille Listes et utilise des noms dynamique :
Préférence: =DECALER(Listes!$A$2;;;NBVAL(Listes!$A:$A)-1;)

Pareil pour les autres et tu n'as plus à t'en préoccuper. Elles s'adapteront automatiquement.

eric
0
touroul Messages postés 472 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 19 octobre 2024 16
Modifié par touroul le 24/09/2013 à 21:41
Bonsoir Eric et les autres ...

J'ai pu appliquer avec succès tes conseils et la formule DECALER.
C'est vrai que ça m'a considérablement simplifié la life.

J'ai repris une à une toutes mes fiches clients et appliqué des listes déroulantes du type "=Fonctions" à toutes les fiches.

Les listes déroulantes ne se recopient pas avec la macro, mais ce n'est pas bien grave puisque les nouvelles fiches seront issues d'une copie du masque.

Un grand merci pour ta patience, sujet doublement résolu !

Bonne soirée
0