Erreur 1004 sur une macro

  • Initiateur de la discussion Blafi
  • Date de début
B

Blafi

Guest
Bonjour à tous..,

J'ai écrit une petite macro qui m'aide à transformer des euros en francs ou l'inverse suivant ce que l'on choisit grace à une boite de dialogue.
Pour que cette macro marche, il faut sélectionner les cellules à droite des cellules dont on veut traduire le montant.

Si je mets cette macro dans un classeur banal (tel que celui joint), elle marche parfaitement.

Par contre si je mets cette macro (procédure, et boite de dialogue) dans mon classeur de macros personnelles (person.xls) qui s'ouvre automatiquement au lancement d'excel, à chaque fois que j'essaye de l'utiliser, j'obtiens une 'erreur 1004'.

Lorsque je demande le débogage, VBA me pointe la ligne située dans la boucle; à savoir celle qui introduit la formule dans les cellules :

cece.FormulaR1C1= '= Round(RC[-1]*6.55957,2)'

ou cece.FormulaR1C1= '= Round(RC[-1]/6.55957,2)'

On dirait que VBA refuse d'executer cette ligne alors qu'il le fait sans pb si ma macro est dans un autre classeur... De plus, je ne vois pas d'erreur dans cette ligne qui marche dans l'autre classeur...

Qui pourrait m'expliquer ce phénomène que je ne comprend pas..
je précise que j'utilise Excel et VBA XP de Office 11.

Merci d'avance à celui qui me donnera la solution... A bientôt.
 
B

Blafi

Guest
Finallement comme le soleil a tendance à se cacher et la passion étant trop forte, j'ai regardé le code de Thierry et je l'ai modifié comme ci-dessous et ça a l'air de marcher...

Cependant je ne m'explique toujours pas la résistance de cette macro à ma première solution...

Le code modifié :

Const Rate As Double = 6.55957

Public Sub versEuros2()

Dim CeCe As Range
For Each CeCe In Selection
If IsNumeric(CeCe.Value) And Not CeCe= Empty Then
CeCe.Activate
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Round(CeCe.Value / Rate, 2)
End If
Next CeCe
End Sub


Sub VersFranc2()
Dim CeCe As Range
For Each CeCe In Selection
If IsNumeric(CeCe.Value) And Not CeCe = Empty Then
CeCe.Activate
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Round(CeCe.Value * Rate, 2)
End If
Next CeCe
End Sub

Thierry est-ce bien ?

A ++
 

Charly2

Nous a quittés en 2006
Repose en paix
re Blafi, AeroPlanneur et Brico,
bonjour José,
bonjour Thierry,

Bon d'accord, j'ai fait une bourde :lol: mais comme le ridicule ne tue pas, j'en profite !!! :woohoo: :silly: :woohoo:

Alors, puisque mon With était superflu, j'ai fait comme José et Thierry, j'ai testé :whistle:

J'ai placé ton code dans mon classeur perso.xls : pas de pb ! J'ai essayé de modifier les paramètres régionaux en testant le point puis la virgule comme séparateurs décimaux : toujours ok :S

Là, je n'ai vraiment aucune explication, même pas une ridicule :)

Par contre, j'ai fait une chose qui n'a peut-être pas été remarquée (je n'en ai pas parlé), et que Thierry a faite également dans son code : déclarer la variable objet cece dans la procédure... :ermm:

Si tu as le temps, essaie cela, Blafi, car l'erreur 1004 est assez surprenante !

Bon après-midi à tous

A+ ;)
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Cher Charly, re Amigo José, re Blafi, re le Fil

Pause Ménache lol et vive Alonzo José !! lol

Et oui le ridicul ne tue pas mon cher ami, heureusement, sinon je serai mort au moins un bon millier de fois ;)

Bon moi j'ai essayé de retesté et testé, et finalement j'avais une erreur à cause de la String '6.55957' qui pouvait passer parfois pour '6,55957' et comme Formula voulait un point, même avec les paramètres régionaux FR, je ne sais pas vraiment pourquoi, un coup ça passait un coup ça passait plus...

Bon du coup j'ai tout refait avec au choix Calculs par VBA ou Calculs par Formula, je pense que l'on peut placer le UserForm et le Module dans un Perso.xls sans souci maintenant. (Pour la démo j'ai placé un CommandButton qui, lui, sera remplacé bien évidemment par un bouton Custom de barre d'Outils qui lancera 'FirstChecking')

D'ailleurs j'ai un peu renforcé les 'Checkings', je te laisse voir si ça passe Blafi...

Pour mon code modifié, Inutile de faire :
CeCe.Activate
ActiveCell.Offset(0, 1).Select
ActiveCell.Value ...

On peut faire ceci
CeCe.Offset(0, 1).Value ...
(Ce qui est d'ailleurs fait dans la démo ci-jointe)


J'en ai aussi profité pour passer l'OPérateur en argument...

Bonne Découverte
[ol]@+Thierry[/ol]

EDITION !!!

Avé le fichier c'est mieux ! lol [file name=XLD_Convert_Euros_Francs.zip size=17864]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/XLD_Convert_Euros_Francs.zip[/file]

Message édité par: _Thierry, à: 14/05/2006 15:52
 

Pièces jointes

  • XLD_Convert_Euros_Francs.zip
    17.4 KB · Affichages: 12

Charly2

Nous a quittés en 2006
Repose en paix
re bonjour à tout le monde,
re Blafi, re José, re Thierry :)

Veni, vedi, telecharJ, testi : impecabli :woohoo:

Comme d'habitude, rien à redire ;)

Par contre, comme celui de la femme coupée en morceaux, le mystère de l'erreur 1004 reste entier : pourquoi chez toi et chez Blafi (j'allais dire chez toi et Blafi, mais ça pouvait prêter à confusion) et pas chez José ni chez moi ?

Quel est le point commun que vous auriez au niveau de la configuration que nous n'aurions pas, José et moi ??? Car j'ai testé avec des cellules contenant du texte et il s'affichait #VALEUR dans la cellule où se trouvait la formule, mais pas d'erreur durant l'exécution du code :huh: . La formule entrée était toujours la même (mais on l'aimait quand même...) : celle qui se trouvait dans le fichier initial de Blafi.

Alors après la remarque sur la déclaration de cece dans chaque procédure au lieu de la déclarer au niveau du module, ton code, Thierry, m'invite à demander, à toi ou à Blafi, d'essayer le premier fichier de Blafi en déclarant, comme tu l'as fait mais en Double cette fois :

Const Rate As Double = 6.55957

puis d'écrire la formule dans la cellule en faisant :

'=ROUND(RC[-1]/' & Rate & ',2)'

ce qui permettrait une traduction correcte en texte du taux de conversion.

C'est pas une obligation, mais j'aime pô ce genre d'erreur :sick:

A+ ;)
 

_Thierry

XLDnaute Barbatruc
Repose en paix
re Charly, le Fil

Oui moi aussi au début (mon premier Post) j'étais en Double pour mon Rate, et là patatra.... D'où le passage en String...

Bonne Soirée
@+Thierry

EDITION !!!

[ol]@+Thierry[/ol]

Message édité par: _Thierry, à: 14/05/2006 18:13
 
B

Blafi

Guest
20H00 : De retour après ma séance de jardinage (obligé sinon bobonne rouspète..) je trouve vos réponses...

Merci à tous Charly2, Thierry, jmps, bricofire et tous les pationnés.
Comme dit précédemment, la dernière bouture avec le code de Thierry marche bien. Comme tu me le fais remarquer, je vais remplacer mes activecell.offset par des cece.offset, ce qui est en effet beaucoup mieux.

Je vais essayer aussi les différentes manip proposées au niveau des déclarations...

Mais pour l'instant, je demeure insatisfait comme Thierry car ça m'énerve de ne pas connaitre la raison du plantage...

Sur ce, il est l'heure d'aller manger et je vous tiendrai au courant demain ou plus tard...

Bonsoir à tous et à bientôt..
 

Discussions similaires

Réponses
21
Affichages
426

Statistiques des forums

Discussions
312 584
Messages
2 089 991
Membres
104 330
dernier inscrit
joedal