CISCO
XLDnaute Barbatruc
Bonjour à tous
J'ai un fichier BaseForum comportant plusieurs feuilles :
* une dénommée Database
* et plusieurs pour divers services, par ex CO, SMJ, CFT...
Dans la plage B1:Q1 des feuilles des services, j'ai des noms. Par ex pour la feuille du service SMJ
A coté de ça, j'ai autant de fichiers que de feuilles de service. J'ai donc un fichier CO, un autre SMJ, un autre CFT et ainsi de suite... Chacun de ces derniers fichiers comportent une feuille Modèle, et 0 ou plusieurs feuilles portant des noms provenant du fichier BaseForum dans la feuille du service correspondant. Par exemple, pour le service SMJ, donc dans le fichier SMJ, j'ai les onglets suivants :
Dans la pratique, l'utilisateur ouvre BaseForum. Dans la feuille à l'écran, ou une autre, sauf DataBase, il doit pouvoir modifier les noms dans la plage B1:Q1, ou en rajouter. L'ensemble des macros doit automatiquement transférer ces modifications dans le fichier du service correspondant.
Il y a donc deux types de travail à faire avec ces macros dans le fichier du service adéquat :
* Modifier le nom de certains onglets.
Par exemple, si dans la feuille CO du fichier BaseForum, si dans la plage B1:Q1 on change le nom PRETY Jeanne en GURTIEZ Jeanne, l'ensemble des macros doit changer dans le fichier CO l'onglet PRETY Jeanne en GURTIEZ Jeanne.
* Rajouter une ou des nouvelles feuilles, construites comme la feuille modèle, en leur donnant le bon nom
Par exemple, si l'utilisateur rajoute dans la feuille CO du fichier BaseForum le nom PAULI Claude, il faut que l'ensemble des macros crée dans le fichier CO une nouvelle feuille comme la feuille Modèle, mais dénommée PAULI Claude.
Attention : Les noms des onglets ne sont pas forcément dans le même ordre que dans B1:Q1.
L'utilisateur ne supprime pas de noms dans la plage B1:Q1
En pièce jointe, je met 4 fichiers simplifiés. Le fichier BaseForum contient plusieurs macros dans Thisworkbook (dont une Workbook_Open) qui font le travail. Vous pouvez mettre ces 4 fichiers dans le même dossier. Pour que l'ensemble fonctionne chez vous, il faut bien sûr mettre le bon chemin donnant l'accès au bon fichier de service, à la place de "C:\Users\FORUM\" ci-dessous.
dans la macro Transfertnomsemployés.
J'ai utilisé la méthode suivante, dérivée d'une proposition faite par Mapomme là :
* A l'ouverture, ou lors de l'activation d'une feuille de service (autre que DataBase), une des macros met dans un tableau dénommé employésdébut tous les noms déjà dans la plage B1:Q1.
* Le ou les changements dans cette plage change une variable booléenne de False à True
* Lors du changement de feuille, ou à la fermeture, une des macros enregistre dans un tableau dénommé employésfin tous les noms dans la plage B1:Q1 s'il y a eu un ou des changements dans cette plage.
Ces changements sont transférés avec Transfertnomsemployés dans la feuille du service correspondant, soit en changeant un ou des noms, soit en créant les nouvelles feuilles nécessaires.
Les fichiers modifiés sont sauvegardés sans changer de noms.
Apparemment, cela fonctionne, mais :
1) je trouve que cette méthode est (un peu) lourde (mettre tous les noms dans un tableau au début, mettre tous les noms dans un autre tableau à chaque changement de feuille ou à la fermeture)... Est-ce que vous auriez une autre méthode plus fine ?
2) Les fichiers des services, CO, SMJ et CFT en pièce jointe sont enregistrés au format Excel 97-2003. Si j'enregistre avec une version plus récente, cela plante sur la dernière ligne de code ci-dessous
Pourquoi ?
@ plus
P.S 1 : Bien sûr, les fichiers en pièce jointe, sont des fichiers simplifiés, et les macros réelles ne font pas que ça. De plus, dans la réalité, ces fichiers ne sont pas tous dans le même dossier.
P.S 2 : Je soignerai la partie déclaration des variables, des tableaux...et les alignements/décalages lorsque tout tournera bien.
J'ai un fichier BaseForum comportant plusieurs feuilles :
* une dénommée Database
* et plusieurs pour divers services, par ex CO, SMJ, CFT...
Dans la plage B1:Q1 des feuilles des services, j'ai des noms. Par ex pour la feuille du service SMJ
A coté de ça, j'ai autant de fichiers que de feuilles de service. J'ai donc un fichier CO, un autre SMJ, un autre CFT et ainsi de suite... Chacun de ces derniers fichiers comportent une feuille Modèle, et 0 ou plusieurs feuilles portant des noms provenant du fichier BaseForum dans la feuille du service correspondant. Par exemple, pour le service SMJ, donc dans le fichier SMJ, j'ai les onglets suivants :
Dans la pratique, l'utilisateur ouvre BaseForum. Dans la feuille à l'écran, ou une autre, sauf DataBase, il doit pouvoir modifier les noms dans la plage B1:Q1, ou en rajouter. L'ensemble des macros doit automatiquement transférer ces modifications dans le fichier du service correspondant.
Il y a donc deux types de travail à faire avec ces macros dans le fichier du service adéquat :
* Modifier le nom de certains onglets.
Par exemple, si dans la feuille CO du fichier BaseForum, si dans la plage B1:Q1 on change le nom PRETY Jeanne en GURTIEZ Jeanne, l'ensemble des macros doit changer dans le fichier CO l'onglet PRETY Jeanne en GURTIEZ Jeanne.
* Rajouter une ou des nouvelles feuilles, construites comme la feuille modèle, en leur donnant le bon nom
Par exemple, si l'utilisateur rajoute dans la feuille CO du fichier BaseForum le nom PAULI Claude, il faut que l'ensemble des macros crée dans le fichier CO une nouvelle feuille comme la feuille Modèle, mais dénommée PAULI Claude.
Attention : Les noms des onglets ne sont pas forcément dans le même ordre que dans B1:Q1.
L'utilisateur ne supprime pas de noms dans la plage B1:Q1
En pièce jointe, je met 4 fichiers simplifiés. Le fichier BaseForum contient plusieurs macros dans Thisworkbook (dont une Workbook_Open) qui font le travail. Vous pouvez mettre ces 4 fichiers dans le même dossier. Pour que l'ensemble fonctionne chez vous, il faut bien sûr mettre le bon chemin donnant l'accès au bon fichier de service, à la place de "C:\Users\FORUM\" ci-dessous.
Code:
'INSCRIRE CI-DESSOUS LE CHEMIN COMPLET DONNANT L'ACCES AU REPERTOIRE CONTENANT LES FICHIERS ANNUELS DE CHAQUE SERVICE
Chemin = "C:\Users\FORUM\"
Il ne faut ouvrir que le fichier BaseForum au début et y faire les modifications désirées, dans les feuilles de service uniquement, dans B1:Q1. Les macros sont lancées automatiquement.
J'ai utilisé la méthode suivante, dérivée d'une proposition faite par Mapomme là :
* A l'ouverture, ou lors de l'activation d'une feuille de service (autre que DataBase), une des macros met dans un tableau dénommé employésdébut tous les noms déjà dans la plage B1:Q1.
* Le ou les changements dans cette plage change une variable booléenne de False à True
* Lors du changement de feuille, ou à la fermeture, une des macros enregistre dans un tableau dénommé employésfin tous les noms dans la plage B1:Q1 s'il y a eu un ou des changements dans cette plage.
Ces changements sont transférés avec Transfertnomsemployés dans la feuille du service correspondant, soit en changeant un ou des noms, soit en créant les nouvelles feuilles nécessaires.
Les fichiers modifiés sont sauvegardés sans changer de noms.
Apparemment, cela fonctionne, mais :
1) je trouve que cette méthode est (un peu) lourde (mettre tous les noms dans un tableau au début, mettre tous les noms dans un autre tableau à chaque changement de feuille ou à la fermeture)... Est-ce que vous auriez une autre méthode plus fine ?
2) Les fichiers des services, CO, SMJ et CFT en pièce jointe sont enregistrés au format Excel 97-2003. Si j'enregistre avec une version plus récente, cela plante sur la dernière ligne de code ci-dessous
Code:
Fichierannuel = serviceencours & ".xls"
'OUVERTURE DU FICHIER ANNUEL DU SERVICE CORRESPONDANT
Workbooks.Open Chemin & Fichierannuel, False
@ plus
P.S 1 : Bien sûr, les fichiers en pièce jointe, sont des fichiers simplifiés, et les macros réelles ne font pas que ça. De plus, dans la réalité, ces fichiers ne sont pas tous dans le même dossier.
P.S 2 : Je soignerai la partie déclaration des variables, des tableaux...et les alignements/décalages lorsque tout tournera bien.
Pièces jointes
Dernière édition: