Macro ne marche que si l'editeur de macro est ouvert ?

Bonjour,

Je m'arrache les cheveux avec mon code qui fonctionne à chaque fois en mode debug pas à pas mais pas en automatique.

ce qu'elle fait : on ouvre un fichier, elle compte le nombre d'onglet, "enregistre" le name et code name de chaque feuille pour pouvoir coller une macro dans chaques onglets.

en mode automatique, le CodeName des feuilles est "vide" (d'ou l'erreur qd je colle la macro) alors qu'en pas à pas celà fonctionne !??? !????.

( NOTA, il n'y a que le Codename des feuilles qui est vide, le nom des onglets est lui bien documenté).

D'avance merci beaucoup pour votre aide

ci dessous le code :

Public Sub CommandButton1_Click()

Dim code, nom, nomf, fichier, cdf, nomfirstonglet As String

Dim nbf, i As Integer

CommandButton35.BackColor = &HFF

fichier = Application.GetOpenFilename

If fichier = "Faux" Then

Exit Sub

End If

Workbooks.Open fichier

nom = ActiveWorkbook.Path

Range("L1") = nom

nom = ActiveWorkbook.Name

Range("L2") = nom

Workbooks(nom).Activate

nbf = Workbooks(nom).Sheets.Count

nomfirstonglet = Workbooks(nom).Worksheets(1).Name

' ecriture nom onglet et codename pour verification

For i = 1 To nbf

nomf = Workbooks(nom).Worksheets(i).Name

cdf = Workbooks(nom).Worksheets(i).CodeName

Cells(4 + i, 12) = "f " & nomf

Cells(4 + i, 13) = "c " & cdf

Next i

For i = 1 To nbf

nomf = Workbooks(nom).Worksheets(i).Name

Workbooks(nom).Worksheets(nomf).Activate

code = "public Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)" & vbCrLf

code = code & "dim a, b as integer" & vbCrLf

code = code & "a=workbooks(""synthese.xls"").worksheets(""feuil1"").x" & vbCrLf

code = code & "b=workbooks(""synthese.xls"").worksheets(""feuil1"").y" & vbCrLf

code = code & "Workbooks(""synthese .xls"").Sheets(""Feuil1"").cells(a,b) = Target.Value" & vbCrLf

code = code & "Cancel = True" & vbCrLf

code = code & "ActiveWorkbook.Saved = True" & vbCrLf

code = code & "windows(""synthese.xls"").activate" & vbCrLf

code = code & "End Sub" & vbCrLf

cdf = Workbooks(nom).Worksheets(i).CodeName

With ActiveWorkbook.VBProject.VBComponents(cdf).CodeModule

.insertlines .CountOfLines + 1, code

End With

Next i

Worksheets(nomfirstonglet).Activate

Windows("synthese.xls").Activate

ActiveWorkbook.Saved = True

End Sub

Je continue a creuser pour essayer de faire fonctionner cette macro. J'ai eu l'idée de forcer l'ecriture des codename des feuilles avec ceci :

ActiveWorkbook.VBProject.VBComponents(Worksheets(i).CodeName).Name = cdf

mais j'ai toujours la même erreur : erreur d'execution 9 l'indice n'appartient pas à la selection.

(nota celà fonctionne toujours en pas à pas....j'enrage....)

Autre possibilité mais je ne sais pas faire, est il possible d'inscrire le code dans les differentes feuilles avec un autre code que celui ci puisque j'arrive a connaitre le nom des onglets :

acteul : With ActiveWorkbook.VBProject.VBComponents(cdf).CodeModule

.insertlines .CountOfLines + 1, code

J'ai essayé çà mais celà ne fonctionne pas (erreur 424 : objet requis)

with Activeworksheet.vbproject.vbcomponents(cdf).codemodule

Merci a vous

Bonjour,

Je vais peut-être dire une bétise mais le codename c'est "FeuilX", vu que ta boucle va de i= 1 à NBF, ton codename sera :

cdf = "Feuil" & i

Enfin ça me parait trop simple pour être ça ton problème...

Cordialement,

Bonjour

merci pour ta reponse, en effet elle pourrait marcher sauf que je dois "traiter" des fichiers de toutes les provenances et malheureusement pour moi, il y en a ou le premier code name est Feuil4.. puis Feuil5 etc !!!!!

Ce que je ne comprends pas c'est pourquoi elle fonctionne qu'en pas à pas. je deprime.........................

merci a toi pour cette idée aurait pu marcher....

fred


EN FAIT ELLE FONCTIONNE EN AUTOMATIQUE QUAND L'EDITEUR DE MACRO EST OUVERT (ALT F11).

Quelqu'un a t'il une idée d'ou celà pourrait venir ???

merci

fred

Apparrement, c'est Excel qui fonctionne comme ça, pour contourner la chose :

1- mets ce code dans un module :

Function WsCodeName$(Ws As Object)  

On Error Resume Next

With Application.VBE.MainWindow
     WsCodeName = Ws.CodeName
End With

 End Function

Puis change la partie de ton code :

For i = 1 To nbf
 nomf = Workbooks(nom).Worksheets(i).Name
 cdf = Workbooks(nom).Worksheets(i).CodeName
 Cells(4 + i, 12) = "f " & nomf
 Cells(4 + i, 13) = "c " & cdf
 Next i

par

For i = 1 To nbf
 nomf = Workbooks(nom).Worksheets(i).Name
 cdf = WsCodeName$(Workbooks(nom).Worksheets(nomf))
 Cells(4 + i, 12) = "f " & nomf
 Cells(4 + i, 13) = "c " & cdf
 Next i

Même avec l'éditeur VBE de fermé, ça à l'air de marcher.

Le code est de Ti de chez Excel Downloads (rendons à Cesar.... ^^)

Cordialement,

Bonjour

Tester sur un fichier pas de problème

peux-tu joindre ton fichier afin de tester ?

Bonjour zirak et banzai64

Un ENORME merci pour ton aide precieuse et un merci a tous pour m'avoir depanner. "Ta" solution fonctionne a merveille. C'etait l'ultime point sacrement bloquant de mon programme, qui va pouvoir garce a vous etre diffusé......

Sincerement, un super merci a tous

fred

Rechercher des sujets similaires à "macro marche que editeur ouvert"