VBA Excel. Utilisation du codename.

Résolu
wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   -  
wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tout le monde.
Depuis quelques jours, j'essais de valider un bout de code minuscule :

Sub Marine()
Application.DisplayAlerts = False
   Feuil2.Delete
Application.DisplayAlerts = True

Sheets.Add After:=Feuil1
ActiveSheet.[_CodeName] = "Feuil2"
End Sub


Impossible de renommer le codename de ma nouvelle feuille du nom de la feuille que je viens de supprimer !!

Quelqu'un à une idée ??

9 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
bonjour

activesheet.name="azerty"
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

trouve sur

https://www.developpez.net/forums/d859285/logiciels/microsoft-office/excel/macros-vba-excel/modifier-codename/

Sub test()
    i = 0
    For Each ws In ActiveWorkbook.Worksheets
     i = i + 1
        On Error Resume Next
        ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") = "XXX" & i
        On Error GoTo 0
    Next ws
End Sub
0
wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   5
 
Erreur d'exécution '1004' :
L'accès par programme au proget Visual Basic n'est pas fiable

:-/ Apparemment on ne peut pas modifier le codename par ce chemin :'-(



ActiveSheet.Parent.VBComponents(ActiveSheet.CodeName).Properties("_CodeName") = "Toto" Arghhhh , ça non plus ça ne marche pas :'-(
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

marche tres bien:





a condition de bien ouvrir les yeux:
ActiveSheet.Parent.VBComponents(ActiveSheet.CodeName).Properties("_CodeName") = "Toto"
ActiveSheet.Parent.VBProject.VBComponents(ActiveSheet.CodeName).Properties("_CodeName") = "Toto"
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Bonjour,

Voici une solution

2 commandbutton:

voici le code:

Option Explicit
Private Sub CommandButton1_Click()
Application.DisplayAlerts = False
   Feuil2.Delete
Application.DisplayAlerts = True

Sheets.Add After:=Feuil1
ActiveSheet.Name = "Feuil2"

End Sub
Sub RenommerCodeName()
    Dim Ws As Worksheet
 
    'Spécifie la 1ere feuille dans le classeur contenant cette macro.
    Set Ws = ThisWorkbook.Sheets(2)
 
    'Attention: le nouveau nom ne doit pas contenir d'espace.
    ThisWorkbook.VBProject.VBComponents(Ws.CodeName).Name = "Feuil2"
End Sub
Private Sub CommandButton2_Click()
RenommerCodeName
End Sub


cliquer sur le bouton 1 et fermer l'UserForm
Ensuite ouvrir et cliquer sur le bouton 2

Si on le fait en même temps ça debug!
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Il a oublie une partie de la ligne d'instruction

ActiveSheet.Parent.VBComponents(ActiveSheet.CodeName).Properties("_CodeName") = "Toto"
ActiveSheet.Parent.VBProject.VBComponents(ActiveSheet.CodeName).Properties("_CodeName") = "Toto"
0
wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   5
 
Sub lolo()

Application.DisplayAlerts = False
   Feuil4.Delete
Application.DisplayAlerts = True

Sheets.Add After:=Feuil1
ActiveSheet.Name = "Feuil2"
 
ActiveSheet.Parent.VBProject.VBComponents(ActiveSheet.CodeName).Properties("_CodeName") = "Feuil2"
 
End Sub



Erreur d'exécution '1004' : l'accès par programme au projet visual basic n'est pas fiable

Arghhhh ... Bug au niveau de la ligne ActiveSheet.Parent.VBProject.VBComponents ...

C'est un problème de version de Excel ?
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729 > wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention  
 
As-tu lu ma réponse!
0
wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   5
 
J'avoue que je m'y perd un peu ...
Donc si on le fait en même temps ... ça beug :-/

Ok.
Donc si on a besoin de le faire en même temps ... c'est mort ... c'est bien ça ???
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729 > wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention  
 
Mais d'un coté supprimé une Feuil2 pour en remettre une du même nom, je m'interroge sur l'utilité d'une telle manoeuvre!
0

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

Posez votre question
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Re,

Option excel a parametrer

0
wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   5
 
https://www.youtube.com/watch?v=CWCycC0P5AM&feature=youtu.be&t=57s

Merci F894009 !!!!
ça marche :-D !!
MERRRRCCCCIIIIIIIIIII :-DDDDD
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Chez moi, c'est comme cela, mais comme je l'ai expliqué cela bug si on fait les 2 opérations en même temps.
Certainement qu'Excel a besoin de reprendre la main
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Oui, surement, car Excel a souvent des reactions surprenantes, mais dans le cas present la feuille supprimee n'est pas celle qui est ajoutee suivant

Au temps pour moi, c'est la meme
0
wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   5
 
Oupsss ... j'ai crié victoire trop tôt !!



Sur la feuille que j'essais de supprimer ... il y a 4 graphiques.

J'efface ma page...
Je supprime ma page ...
je recrée ma page ...
Je renomme ma page ... (ActiveSheet.Parent.VBProject.VBComponents(ActiveSheet.CodeName).Properties("_CodeName") = "Feuil2")
Et la : J'ai le message : "impossible d'entrer en mode arrêt maintenant"

Ma macro se ré-exécute depuis je ne sais ou ... et tout les graph que j'avais supprimé se sont recréé ... et ma page n'est pas renommé :-C

Bon ... j'y reviendrais demain après midi . Là faut que je boucle autre chose :'-c

Merci pour tout les gars !!
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
A lire, il y a une référence à cocher:

https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LII-B-6
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Lire aussi cela pour les graphiques:

https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LI
0
wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   5
 
Arghhh ...
Re-bonjour ...
C'est compliqué.
En faite j'ai des conflits avec mes noms de graphiques.

Donc, premières infos :
Quand on supprime le contenu d'une page avec

Feuil2.Select
Cells.Select
Selection.Delete Shift:=xlUp

( ce qui correspond à un "Ctrl+A" + "Suppr" )

ET que l'on fait aussi :

   Feuil2.Delete


Ben !! On ne supprime pas les differents objets Graph présent sur la page !!

Du coup, lorsque la page est recréer, les objets graphes reprenne net leur place :-/

Ensuite, si je veux supprimer mes différents graphiques et que j'utilise l'éditeur de code d'excel pour les identifier,
L'éditeur de code me donne indifféremment comme nom de graphique :

    ActiveSheet.ChartObjects("Graphique 1").Activate

    ActiveSheet.ChartObjects("Graphique 1").Activate

    ActiveSheet.ChartObjects("Graphique 1").Activate

    ActiveSheet.ChartObjects("Graphique 1").Activate


Y aurait-il une façon différente de nommer les graphique afin de pouvoir les identifier individuellement ... (un peu comme les "name" et "codename" des feuilles excel )

???
Merci
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Je me suis servi de l'enregistreur de macro et j'ai obtenu ce code qui fonctionne très bien:

Sub Macro1()
 Sheets("Feuil2").Select
    ActiveWindow.SelectedSheets.Delete
    Sheets.Add After:=Sheets(Sheets.Count)
End Sub
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Y aurait-il une façon différente de nommer les graphique afin de pouvoir les identifier individuellement ... (un peu comme les "name" et "codename" des feuilles excel )


Quand je lit cela, j'ai l'impression que tu n'as pas consulté le site que je t'ai indiquer!!!!!!!!

https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LII-A-4
0
wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   5
 
Ok !! Merci !!
J'ai trouvé tout ce dont j'avais besoin pour avancer :-)
Dsl pour d'avoir survoler ton lien !!
Il faut interroger la propriété .index de mon ActiveSheet.ChartObjects !!

Oufff ... c'est compliqué !

Je ferais un essai c't'aprem et je clôturerais le sujet !

Merci vraiment à tous !!
0
wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   5
 
Erreur d'exécution '1004'
Impossible de renommer une feuille comme une autre feuille, une bibliothèque d'objets référencée ou un classeur référencé par Visual Basic.


Application.DisplayAlerts = False
   Feuil2.Delete
Application.DisplayAlerts = True

Sheets.Add After:=Feuil1
ActiveSheet.Name = "Feuil2"


Je précise quand même que moi, je souhaite modifier le "codename" et non pas le "name".
Name renvoie au nom de "l'onglet visible" classique de Excel, le codename est le nom de la feuille indépendamment du nom de l'onglet

(Dans propriétée Feuil, il y a le (name) et le name :-/ désolé pour ceux qui ne comprendraient pas ... en gros, (name) c'est le nom, et name c'est le caption ... :-/ )
-2
PlacageGranby Messages postés 393 Date d'inscription   Statut Membre Dernière intervention   26
 
Bonjour,

Worksheet.CodeName, propriété
Renvoie le nom de code pour l'objet. En lecture seule chaîne.
https://docs.microsoft.com/fr-fr/office/vba/api/excel.worksheet.codename?redirectedfrom=MSDN

Donc, impossible de le modifier directement.
Il semble y avoir des moyens pour le modifier en passant par VBcomponent mais je crois qu'on t'a déjà donné les info dans les msg précédent.

Si tu y tiens mordicus, alors regarder les exemple de changement via VBComponent et cherche d'autre exemple de ca sur google, tu finiras peut-être par trouver un exemple qui fonctionne avec ton code.
0
wire less Messages postés 233 Date d'inscription   Statut Membre Dernière intervention   5
 
C'est bon !!
Tout marche impeccablement.
Pour renommer un codename il faut faire :
ActiveSheet.Parent.VBProject.VBComponents(ActiveSheet.CodeName).Properties("_CodeName") = "Feuil2"
:-/ ... oui je sais, c'est compliqué !!

Pour cela, il faut aussi paramétrer ces droits en écriture de macro (voir la réponse de f894009 (paramètre des macro -> accès approuvé au modèle d'objet du projet VBA ) )


Moi, il me resté des conflits avec des objets graph "fantôme" qui étaient invisible.
J'ai résolu le problème avec un
For Each Ch In Feuil2.ChartObjects
    Ch.Delete
Next Ch


Merci à tout le monde pour votre aide.
Je clôture le sujet :-D !!
0