Détails sur Excel VBA

Bonjour,

J'ai développer un fichier excel VBA cependant je cherche à l'optimiser au maximum.

Première question :

Lorsque vous regardez mon fichier, vous pouvez voir que l'onglet de la page ce nomme " 1 ". Lorsque l'on rentre dans mon code visual basic, nous retrouvons des lignes de ce type Set Ws = Sheets("1") '. Le problème est donc que si je change le nom de mon onglet, ma maccro ne marchera plus. Avez vous une technique pour changer le nom de l'onglet sur excel qui le changerait directement sur le code VBA.

Deuxième question :

Lorsque vous ouvrez ma maccro vous pouvez voir une section prix du kWh. Celle ci lit directement la case C23 de mon fichier excel. Cependant, je peux être amener à ajouter des lignes dans mon tableau, de ce fait la cellule C23 ne comporterait plus rien. Comment gérer ce décalage?

Merci de votre aide,

CR

5test2.xlsm (42.31 Ko)

Bonjour,

Pour la première question, tu peux faire référence à la position de la feuille plutôt que sont nom :

Sheets(1) '<-- 1ère feuille du classeur
Sheets("1") '<-- Feuille portant le nom "1"

Pour la 2ème question, tu peux utiliser une plage nommée. Ainsi dans VBA tu n'auras pas à te préoccuper de l'adresse de la cellule :

PrixKwh = Range("C23") 'Ancienne syntaxe
PrixKwh = Range("PrixKwh") 'Syntaxe recommandée

Salut le fil

Déjà vu tous ça dans ton explorateur de projet tu peux voir que ta feuille se nomme:

Feuil1(1) Feuil1 est son CodeName qui lui ne change pas. Donc tu appelles ta feuille comme suit,

Feuil1.Range("A1").Value = "Feuil1 est le CodeName de la feuille 1"

Bonjour,

Merci pour votre aide,

Pour la deuxième solution c'est ok. Pour la première, le problème est que si je créer une nouvelle page dans le même fichier excel, il considérera toujours que c'est la page numéro 1 alors que je travail sur la deuxième non ?

CR

Bonjour,

Je m'excuse, votre première proposition marche mais la deuxième ne fonctionne pas. En effet, dans la case B23 est stocké " prix du kWh " et dans la case C23 est stocké la valeur soit 0.0614. Votre technique ne fonctionne donc pas.

Merci de votre aide,

CR

Bonjour,

Je m'excuse, votre première proposition marche mais la deuxième ne fonctionne pas. En effet, dans la case B23 est stocké " prix du kWh " et dans la case C23 est stocké la valeur soit 0.0614. Votre technique ne fonctionne donc pas.

Merci de votre aide,

CR

Je pense que l'on s'est mal compris...

Une plage nommée consiste à donner un nom à une cellule ou un ensemble de cellules. C'est faisable soit par le biais de la barre de saisie en haut à gauche (avant la barre de formule), soit par le biais du gestionnaire de nom.

Ensuite, on fait référence à ce nom directement dans VBA, indépendamment de toute notion de coordonnées.

Si besoin :

https://docs.microsoft.com/fr-fr/office/vba/excel/concepts/cells-and-ranges/refer-to-named-ranges

Bonjour,

Il faut te garder d'exemples trop simplistes qui entretiennent un certain flou.

En nommant ta Feuille1 avec le CodeName Feuil tu entretiens déjà une équivoque dans ton code il va falloir bien faire attention à ce que tu as écris : Si tu rajoutes une feuille cette deuxième feuille portera le nom "Feuil1" mais tu donnera à son CodeName la valeur Feuil2

De même en donnant la valeur 1 à son nom tu entretien une équivoque ce "1" est un string et non un nombre ni un index...

Intérieurement VBA sait faire la différence instantanément. Je doute que tu saches le faire.

Des pratiquants habitués évitent ce genre de notation androgyne... pour les CodeName utilise par exemple Ws1, Ws2...

Ou mieux : WsA, WsB...

Pour les noms de feuilles évite les nombres même si ce sont des N° de semaines : S1, S2... lèvera toute ambiguité...

Enfin sur le plan de la conception on recommande généralement d'éviter de mettre plusieurs Tableaux sur la même feuille.

Même sur tu veux faire un comparatif, il serait bien plus lisible de faire ce comparatif à partir de 2 feuilles différentes : Ta synthèse serait sans doute bien plus lisible que de scroller d'un bout à l'autre de la ligne...

A+

Merci pour vos différentes aide, tout fonctionne.

Bon journée à vous,

CR

Rechercher des sujets similaires à "details vba"