Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

données enregistrées dans ThisWorkbook

W

William

Guest
Bonjour à Tous,

Je commence à comprendre un peu mieux les rouages du VBA.... Mais il y a encore du boulot...

J'en profite pour remercier ceux qui ont bien voulu m'aider (Mita, Valérie, Baroude) et ceux qui m'ont involontairement mis sur la voie, grâce aux fils du forum...

Merci Merci ;o)

Aujourd'hui, j'aimerais simplifier le code de plusieurs macro pour que les changements de nom de feuillles soit plus faciles à effectuer (il faut les modifier tous les ans...)

J'arrive déjà à sélectionner une feuille par :

x = "Feuil1"
Sheets(x).Select

Et j'aimerais donc enregistrer les noms des feuilles dans ThisWorbook.

Mais je ne trouve pas de code pour que les données de ThisWorbook soient enregistrées, lors de l'utilisation de chaque macro.... et ainsi séparer le : x = "Feuil1" , du reste...

Merci de votre aide collégiale...

A très bientôt

William
 
@

@+Thierry

Guest
Bonjour William, Bonjour le Forum

Heureux que tu puisses trouver ton bonheur dans l'assistance "collégiale" de notre forum

Pour renommer les feuilles, il n'est pas nécessaire de passer par le private module "ThisWorkBook" (enfin si j'ai compris ce que tu essaies de dire? car j'ai du mal avec "j'aimerais donc enregistrer les noms des feuilles dans ThisWorbook".)

Si, par exemple tu cherches à renommer toutes les feuilles d'un classeur, sauf la feuil1 où se trouve une liste de noms en colonne "A"..

Dans un module standard, un code comme celui-ci renommera toutes tes feuilles :

Sub RenommerTouteLesFeuilles()
Dim WS As Worksheet
Dim i As Byte
i = 1
For Each WS In Sheets
If WS.Name <> "Feuil1" Then
WS.Name = Sheets("Feuil1").Range("A" & i).Value
i = i + 1
End If
Next
End Sub

Ceci est un exemple, et pour cet exemple, il suffit que tu aies les cellules A1 à A"x "de ta "Feuil1" remplies avec des caractères authorisés pour nommer les feuilles. Attention il n'y a aucun test... Si tu as moins de cellules avec des données que de feuilles la macro plantera... Mais ceci est juste un exemple.

Welcome to XLD William
Bonne Journée
@+Thierry
 
W

William

Guest
Re-bonjour tout le monde,

Et bonjour @+Thierry,


J'ai visiblement des efforts à faire au niveau de mes explications....
(Désolé pour le temps perdu)

En fait, je ne veux pas renommer mes feuilles par une macro, (j'en ai 4 à nommer par an sur ce fichier, ça se fera manuellement...)

Ce que je désire, c'est qu'une fois les feuilles créées et renommées manuellement, ma collègue puisse mettre à jour les macros, pour que les noms de ces nouvelles feuilles soient pris en compte...

Par exemple, actuellement les feuilles utilisées sont :

C 01-02
EC 01-02
AM C 01-02
AM EC 01-02

C 02-03
EC 02-03
AM C 02-03
EM EC 02-03

Comme tu peux le voir, seule l'année change... Dès le 1er avril 2003, les feuilles utilisées seront celles de 02-03 et 03-04 (qui restent à créer)...

Je fais références (de nombreuses fois) à ces feuilles dans les macros utilisées.

J'aimerais qu'en ne changeant qu'une seule donnée dans ThisWorbook (C 03-04 au lieu de C 02-03 etc), cette nouvelle info soit prise en compte dans toutes les macros...

Ainsi, dans les modules, je n'utiliserais plus : Sheets("C 02-03").Select
mais : Sheets(x).Select

D'où une relative sécurité, lors du changement d'année d'exercice...

As-tu une idée ??

Merci,

William
 
@

@+Thierry

Guest
RE William

Ok pigé !!

Méthode 1 (ma préférée, plus rien à faire une fois mise en place)
Le plus simple dans ce cas est d'écrire tes macros ayant référence à des feuilles en utilisant l'index de la feuille et non le nom.
Exemple sur un classeur vierge :
Sheets(1).Select
ou
Sheets("Feuil1").Select
Auront le même "impact"
L'index des feuilles est attribué en fonction de l'emplacement de la feuille dans le workbook de gauche à droite par les noms de feuilles dans l'ordre des onglets de noms.

Tu n'auras pas à refaire quoique ce soit dans tes macro de cette manière. Seule contrainte => Ne pas déplacer les Feuilles

Méthode 2 [/i](alternative par variable publique)[/i]
Tu prends un nouveau Module Standard (pas ThisWorkBook)
En Tête du module : (en dehors de toute Sub)

Public X as String

Dans la Sub de la première macro que tu lances, en début du code de celle-ci :
X = "EM EC 02-03"

Ou encore si tu ne veux pas travailler sur les code directement
X = Sheets("LesNomsDeFeuilles").Range("B1")

Evidemment dans cette feuille "LesNomsDeFeuilles" tu mettras à jour tes nom de feuilles... (qui peuvent être eux même écrit par macro style celle au dessus mais à l'envers... lol... Mais ce serait faire de nouveau une liste de noms basée sur l'ordre de l'emplacement des feuilles..... Donc pratiquement équivalente à INDEX donc la Méthode 1 est plus simple)

Méthode 3 (je ne travaille pas avec mais ce peut être TA solution)
Utiliser les Nom de Feuille => Nom D'Objet (par l'explorateur de projet, sélectionner la feuille, puis F4 et changer son nom)

Ainsi quoique qu'il arrive l'Index ou le Nom de Feuille (Onglets) peuvent changer... VBA fera référence troujours à la bonne feuille... La syntax est différente par contre :
Feuil1.Select

(NB Feuil1 n'a rien à voir avec le nom d'onglet "Feuil1", voir par l'explorateur de projet pour comprendre...


Voilà William avec ces trois méthodes je pense que tu trouveras TA solution.

Bonne Journée
@+Thierry
 
@

@+Thierry

Guest
Méthodes Divers Référence aux Feuilles (Sheets Name / Index / Sheet Object Name)

Tiens en me relisant, j'ai vu que le sujet était en fait "hors sujet"... Dans un soucis de référencement de ce fil.

@+Thierry
 
W

William

Guest
Salut,


J'aime beaucoup la méthode 2. Et en plus, c'est pas mal, pour une fois je la comprend du premier coup )

La méthode 1 me convenait aussi, mais j'ai peur qu'il n'y ait des créations de feuilles non désirées....

J'ai donc testé la méthode 2, qui fonctionne au poil... Elle est pas belle la vie ??

Merci encore Thierry de ton aide (sachant que tu fais quand même partie de ceux qui m'ont le plus appris, sans le savoir.... Tout comme Ti, Veriland, Celeda.... et tous les autres....)

C'est une belle leçon de générosité.

Merci à vous Tous,

William
 

Discussions similaires

D
Réponses
13
Affichages
2 K
didier (2)
D
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…