userform recalcitrant

Le
eneric
Bonjour,
j'ai crée un usf dans 1classeur (c'est un graphique)
pas de probleme tout fonctionne 1 bouton sur la feuillel' usf s'ouvre
je deplace par copie cette feuille dans le classeur de compta
sans rien renommer l'usf ne s'ouvre plus
erreur 13 (incompatibilité de type) je tourne en rond
j'ai plusieurs user dans ce classeur (qui sont tous nommés)
si vous avez une solution a mon probleme je suis preneur
merci

--
eneric
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
eneric
Le #20670321
du coup j'ai recrée le usf dans le bon classeur
et remis les divers codes ca fonctionne
mais je souhaiterais comprendre la cause de l'erreur 13
merci a vous

--
eneric
michdenis
Le #20670471
Bonjour,

Il faut regarder si le chemin et le nom de la macro du bouton
dans le nouveau classeur correspond à la location où se situe
la macro attachée au bouton.

x = Me.Shapes(1).OLEFormat.Object.OnAction
x prend la valeur suivante : "Classeur1.xls!Feuil1.MaMacro

Je copie la feuil1 du classeur Classeur1.xls
Lorsque tu copies la feuille où était le bouton vers un nouveau classeur,
dans le classeur d'origine, le nom du fichier du bouton change et prend
la valeur du classeur de destination.
x prend la valeur suivante : "NouveauClasseur!Feuil1.MaMacro


Il s'agit de redéfinir la propriété "OnAction" du bouton comme ceci
dans le classeur d'origine :
Me.Shapes(1).OLEFormat.Object.OnAction = "Classeur1.xls!Feuil1.MaMacro"

Si tu as plusieurs boutons, tu peux faire le truc en utilisant une macro :
dans ton classeur d'origine :
'---------------------------
Sub Test()
AttributionNomMacro ThisWorkbook
End Sub
'---------------------------

Sub AttributionNomMacro(Wk As Workbook)

Dim B As Object, NomMacro As String
For Each sh In Worksheets
For Each B In sh.Shapes
If TypeName(B.OLEFormat.Object) = "Button" Then
NomMacro = B.OLEFormat.Object.OnAction
If NomMacro <> "" Then
NomMacro = Mid(NomMacro, InStrRev(NomMacro, "!") + 1)
NomMacro = Wk.Name & "!" & NomMacro
B.OLEFormat.Object.OnAction = NomMacro
End If
End If
Next
Next

End Sub
'---------------------------


"eneric"
Bonjour,
j'ai crée un usf dans 1classeur (c'est un graphique)
pas de probleme tout fonctionne 1 bouton sur la feuillel' usf s'ouvre
je deplace par copie cette feuille dans le classeur de compta
sans rien renommer l'usf ne s'ouvre plus
erreur 13 (incompatibilité de type) je tourne en rond
j'ai plusieurs user dans ce classeur (qui sont tous nommés)
si vous avez une solution a mon probleme je suis preneur
merci

--
eneric
eneric
Le #20672051
merci michdenis
je m'appretais a verifier tes infos lorsque .....
dans la serie des trucs incomprehesibles
je me trouve avec mes 2 feulles suplementaires
et tout fonctionne normalement l-)
j'halucine il y a vraiment des mysteres !!!!!!! >:| >:|

--
eneric
michdenis
Le #20675121
| la serie des trucs incomprehesibles
| je me trouve avec mes 2 feulles suplementaires
| et tout fonctionne normalement

ça relève plus du hasard que du miracle ;-)

Un complément d'information si ça t'intéresse de comprendre !

En supposant que les macros sont enregistrées
dans le module de la feuille copiée "Feuil1"

Dans l'expression suivante : la propriété "OnAction"
utilise le "nom de la propriété "NAME" affiché dans la
fenêtre de l'éditeur de code et non le nom de l'onglet
de la feuille de calcul.

Si tu as un bouton lié à une macro dans la "feuil1" (Propriété name)
du classeur Classeur1.xls, la propriété "OnAction" retourne ce
qui suit :

x = Me.Shapes(1).OLEFormat.Object.OnAction
x = "Classeur1.xls!Feuil1.MaMacro

Si tu copies la feuille dans le même classeur, le bouton de la
nouvelle feuille continuera d'afficher ""Classeur1.xls!Feuil1.MaMacro"
et non le le nom de la propriété "name" de la nouvelle feuille.
Comme la "macro" et la "feuil1" existe toujours dans le classeur,
il n'y a pas vraiment de problème...mais si tu supprime la feuil1,
le bouton dans la nouvelle feuille ne pourra pas fonctionner, car il
n'est pas lié à la macro de son propre module feuille.

Dans le cas où tu copier la feuille vers un nouveau classeur :
Si par pur hasard, la nouvelle feuille créée dans le nouveau classeur
reçoit la même propriété "Name" qu'il avait dans son classeur original,
il n'y aura pas de problème ! Dans tous les autres cas, le bouton de la
nouvelle feuille ne fonctionnera pas. Lors de la copie, Excel sait adapter
tout seul le nom du nouveau classeur où la macro se trouve, mais il est
incapable d'adapter le nom (propriété Name) de la feuille si suite à une
copie, cette propriété "Name" a changé.

Dans le cas présent, si besoin, j'ai légèrement modifié la macro pour
tenir compte du fait que les macros sont dans des modules autre que standard.
'----------------------------------------
Sub Test()
AttributionNomMacro ThisWorkbook
End Sub
'----------------------------------------
Sub AttributionNomMacro(Wk As Workbook)

Dim B As Object, NomMacro As String
For Each sh In Worksheets
For Each B In sh.Shapes
If TypeName(B.OLEFormat.Object) = "Button" Then
NomMacro = B.OLEFormat.Object.OnAction
If NomMacro <> "" Then
NomMacro = Mid(NomMacro, InStrRev(NomMacro, ".") + 1)
NomMacro = Wk.Name & "!" & sh.CodeName & "." & NomMacro
B.OLEFormat.Object.OnAction = NomMacro
End If
End If
Next
Next
End Sub
'----------------------------------------
eneric
Le #20676701
bonjour a toi
je te remercie pour toutes tes explications ,
qui viennent d'integrer mon classeur (papier)
je viens encore d'apprendre et ce n'est surement pas fini
la prochaine fois je ferai attention (promis juré)
bonne journée à tous
:')

--
eneric
Publicité
Poster une réponse
Anonyme