Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
c'est encore moi, la dernière macro reçue de Dranreb (que je remercie encore au passage) fonctionne très bien.... sur le formulaire "test" que j'ai crée pour mes... euh...tests
macro permettant la copie d'une valeur d'une cellule se trouvant dans un autre classeur, avec l'adresse du classeur source "modifiable" suivant la valeur d'une autre cellule de ce classeur
et là, lors de l'activation de la macro, message d'erreur: erreur de compilation, variable non définie.-----> et " (Feuil2.Name) " est surligné en jaune.
je fais quelques essais pour tâcher de trouver la cause:
-j'ai supprimé une à une toutes les macros du classeur
-j'ai inscrit la valeur en cells(2, 1) manuellement vu qu'elle s'inscrit par liaison
-j'ai renommé l'onglet de la Feuil2 manuellement vu qu'elle s'inscrit par liaison
toujours le même problème
par contre, je change le " Worksheets(Feuil2.Name) " par " Worksheets(2) " (emplacement de l'onglet sur sa ligne) et là, la macro me donne entière satisfaction.
"appeler" les feuilles par leur "codename" ne m'interresse pas, les onglets sont suscptibles de changer de nom, tout comme les "appeler" par leur position sur la "ligne" d'onglets , les feuilles sont susceptibles de changer de positions.
j'en profite pour confirmer, après d'autres test, que le codename (Feuil2.CodeName) "appeler" par la macro est bien celui du classeur actif, et pas (comme esperé) celui du classeur renseigné dans la macro.
En effet il semble que le CodeName ne s'applique qu'au classeur actif. J'ai essayé avec des With... End With et le classeur cible mais ça plante toujours. J'ai réussi à contourner le problème avec ce bout de code :
Code:
Sub Macro30()
Dim cl As Workbook 'déclare la variable cl (CLasseur)
Dim no As String 'déclare la variable no (Nom de l'Onglet)
Dim x As Integer 'déclare la variable x (incrément d'onglet)
Set cl = Workbooks("test onglets0 " & Feuil1.[A10].Value & ".xls") 'définit le classeur cl
With cl 'prend en compte le classeur cl
For x = 1 To .Sheets.Count 'boucle sur tous les onglets du classeur cl
'condition : si l'onglet a pour Codename "Feuil1", définit le nom du classeur no et sort de la boucle
If .Sheets(x).CodeName = "Feuil1" Then no = .Sheets(x).Name: Exit For
Next x 'prochain onglet du classeur cl
End With 'fin de la prise en compte du classeur cl
Feuil1.[F1].Value = Workbooks("test onglets0 " & Feuil1.[A10].Value & ".xls").Worksheets(no).Cells(1, 2).Value
End Sub
Ça Marche ! j'ai renommé tant l'onglet Feuil1 du classeur onglets0 que celui de onglets2, je les ai déplacé et ça fonctionne toujours...
eh bien, mon cher Robert tu as fait un travail du tonnerre, la macro rempli toute mes espérances.
avec tout mes remerciements.
Sans vouloir abuser, et j'avoue que pour ceci je n'ai fait aucune recherche ou travail préparatoire, crois tu possible que par macro il soit possible de renommer les feuilles d'un classeur A au même nom que les feuilles d'un classeur B (si codename de Feuil1 de classeur A=dupont, alors codename de Feuil1 de classeur B=dupont )
j'envois un message privé à Dranreb pour l'inviter à lire cette discussion, c'est lui qui m'a aidé pour le premier code, et ne sait peut-être pas que le codename ne s'applique qu'à la feuille active.
Re : [résolu]erreur de compilation, variable non définie
Bonsoir le fil, bonsoir le forum,
J'ai repris ton exemple mais tu peux définir les classeurs source et cible différemment :
Code:
Sub Nom()
Dim cs As Workbook 'déclare la variable cs (CLasseur Source)
Dim cc As Workbook 'déclare la variable cc (CLasseur Cible)
Dim no As String 'déclare la variable no (Nom de l'Onglet)
Dim x As Integer 'déclare la variable x (incrément d'onglet)
Dim y As Integer 'déclare la variable y (incrément d'onglet)
Set cs = ThisWorkbook 'définit le classeur source
Set cc = Workbooks("test onglets0 " & Feuil1.[A10].Value & ".xls") 'définit le classeur cible
For x = 1 To cs.Sheets.Count 'boucle 1 : sur tous les onglets du classeur source
'condition : si l'onglet a pour Codename "Feuilx", définit le la variable no
If cs.Sheets(x).CodeName = "Feuil" & x Then no = cs.Sheets(x).Name
For y = 1 To cc.Sheets.Count 'boucle 2 : sur tous les onglets du classeur cible
'condition : si l'onglet a pour Codename "Feuilx", renomme l'onglet, sort de la boucle
If cc.Sheets(y).CodeName = "Feuil" & x Then cc.Sheets(y).Name = no: Exit For
Next y 'prochain onglet du classeur cible
Next x 'prochain onglet du classeur source
End Sub
Cette macro va comparer les onglets par rapport à leur CodeName et va renommer (propriété Name) les onglets qui ont le même CodeName en prenant le nom du classeur source.
Re : [résolu]erreur de compilation, variable non définie
Bonjour.
j'envois un message privé à Dranreb pour l'inviter à lire cette discussion, c'est lui qui m'a aidé pour le premier code, et ne sait peut-être pas que le codename ne s'applique qu'à la feuille active.
Faux, comme répondu au message privé, le CodeName n'est pas fait pour manipuler des feuilles de ActiveWorkbook ni d'aucun autre classeur que ThisWorkbook car c'est le seul qui contient le projet Visual basic où ces CodesNAmes sont connus comme noms d'objets lui appartenant.
Re : [résolu]erreur de compilation, variable non définie
Bonjour le fil, bonjour le forum,
il me semble pourtant, Bernard, que ce code fonctionne :
Code:
[FONT=monospace]Sub Nom()[/FONT]
[FONT=monospace]Dim cs As Workbook 'déclare la variable cs (CLasseur Source)[/FONT]
[FONT=monospace]Dim cc As Workbook 'déclare la variable cc (CLasseur Cible)[/FONT]
[FONT=monospace]Dim no As String 'déclare la variable no (Nom de l'Onglet)[/FONT]
[FONT=monospace]Dim x As Integer 'déclare la variable x (incrément d'onglet)[/FONT]
[FONT=monospace]Dim y As Integer 'déclare la variable y (incrément d'onglet)[/FONT]
[FONT=monospace] [/FONT]
[FONT=monospace]Set cs = ThisWorkbook 'définit le classeur source[/FONT]
[FONT=monospace]Set cc = Workbooks("test onglets0 " & Feuil1.[A10].Value & ".xls") 'définit le classeur cible[/FONT]
[FONT=monospace]For x = 1 To cs.Sheets.Count 'boucle 1 : sur tous les onglets du classeur source[/FONT]
[FONT=monospace] 'condition : si l'onglet a pour Codename "Feuilx", définit le la variable no[/FONT]
[FONT=monospace] If cs.Sheets(x).CodeName = "Feuil" & x Then no = cs.Sheets(x).Name[/FONT]
[FONT=monospace] For y = 1 To cc.Sheets.Count 'boucle 2 : sur tous les onglets du classeur cible[/FONT]
[FONT=monospace] 'condition : si l'onglet a pour Codename "Feuilx", renomme l'onglet, sort de la boucle[/FONT]
[FONT=monospace] If cc.Sheets(y).CodeName = "Feuil" & x Then cc.Sheets(y).Name = no: Exit For[/FONT]
[FONT=monospace] Next y 'prochain onglet du classeur cible[/FONT]
[FONT=monospace]Next x 'prochain onglet du classeur source[/FONT]
[FONT=monospace]End Sub[/FONT]
où je compare avec le CodeName d'un onglet d'un autre classeur que ThisWorkbook :
Code:
If cc.Sheets(y).CodeName = "Feuil" & x Then cc.Sheets(y).Name = no: Exit For
Re : [résolu]erreur de compilation, variable non définie
Bonjour Robert
Je n'ai pas dit que ça ne fonctionnait pas.
À partir du moment où on a un objet Worksheet d'un classeur quelconque, on peut extraire son CodeName mais celui ci est alors un String et pas un nom d'objet Worksheet en tant que tel, connu du projet VBA du classeur qui le contient.
CodeName, propriété
Renvoie le nom de code de l'objet. Type de données String en lecture seule.
Remarque La valeur qui apparaît dans la cellule affichée à droite de (Nom) dans la fenêtre Propriétés correspond au nom de code de l'objet sélectionné. Au moment de la création, vous pouvez changer le nom de code d'un objet en modifiant cette valeur. Il est toutefois impossible de modifier cette propriété par programmation au moment de l'exécution.
Remarques
Le nom de code d'un objet peut être utilisé à la place d'une expression qui renvoie l'objet. Par exemple, si le nom de code de la feuille de calcul 1 est « Sheet1 », les expressions suivantes sont identiques :
On peut évidemment utiliser ce String à des fins spéciales, mais je doute qu'il n'y ait pas de moyen plus orthodoxe de trouver les bons liens dans une application rationnelle bien structurée.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD