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.
 

Bricofire

XLDnaute Impliqué
Bonsoir Blafi, Aeroplaneur, :)

Blafi sais-tu que, à partir d'excel 2000 tout du moins, il existe la fonction euroconvert qui en fait un max, sans compter de la toolbar Eurovalue bien pratique aussi. Ne te serait-ce pas suffisant ?
extrait de l'aide Excel (pas VBA)...

EUROCONVERT
Certaines parties de cette rubrique ne concernent pas certains pays.

Cette fonction permet de convertir en euros une valeur exprimée dans l'une des devises de la zone euro, de faire la conversion inverse, ou de convertir des valeurs entre les différentes monnaies en utilisant l'euro comme intermédiaire (triangulation). Les monnaies pouvant être converties sont celles des pays membres de l'Union européenne ayant adopté l'euro. La fonction applique des taux de conversion fixes établis par l'UE.

Syntaxe

EUROCONVERT(number,source,target,full_precision,triangulation_precision)


le code des Francs Français est FRF.

Bon WE,

Brico
 
B

Blafi

Guest
Oui merci Bricofire, je connais euroconvert mais ça ne fait pas exctement ce que je veux.. et puis ma macro, c'est popur le plaisir....

Je vais réessyaer d'envoyer mon fichier mais je ne comprends pas là aussi pourquoi il ne veut pas se charger (il fait 10 Ko et il est zippé..)

A ++
 
B

blafi

Guest
et encore!
[file name=essaideuros.zip size=11946]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/essaideuros.zip[/file] [file name=essaideuros.zip size=11946]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/essaideuros.zip[/file]
 

Pièces jointes

  • essaideuros.zip
    11.7 KB · Affichages: 19

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour Blafi, bonjour AeroPlanneur, re Brico,
bonjour à toutes et à tous :)

Tu peux essayer ce genre de code :

Sub VersEuro()
'
Dim cece As Range
'
  With ActiveWorkbook.ActiveSheet
    For Each cece In
.Selection
      cece.FormulaR1C1 = '=ROUND(RC[-1]/6.55957,2)'
    Next cece
  End With
End Sub

'------------------------------------------------

Sub VersFranc()
'
Dim cece As Range
'
  With ActiveWorkbook.ActiveSheet
    For Each cece In
.Selection
      cece.FormulaR1C1 = '=ROUND(RC[-1]*6.55957,2)'
    Next cece
  End With
End Sub


Puisque tu as placé ces macros dans ton classeur de macros perso, il vaut mieux préfixer l'initialisation de cece afin d'être certain que ton code s'appliquera au classeur actif :)

A+ ;)

Message édité par: Charly2, à: 14/05/2006 09:17
 
B

Blafi

Guest
Merci Charly2 pour ta réponse et ta solution...
Je viens d'essayer avec ton code et ma macro se bug toujours sur la même ligne, que ce soit en transformant en euros ou en transformant en francs, elle bloque sur la ligne qui introduit la formule...

As tu une autre solution ?
Merci d'avance A++
 

Bricofire

XLDnaute Impliqué
bonjour à tous, ;)

Bon je vais peut-être dire une Grosse Bêtise, mais vu de ma fenêtre de ce dimanche matin, ton classeur présente un module avec plusieurs procédures (donc macros), un feuille, un autre module non appelé...
Donc je vois mal comment ça peut s'incoporer dans un classeur de macros perso ? Il faudrait le faire procédure par procédure et donc adieu à l'USF.
Pour moi cette approche tiendrait plutot d'un projet via un XLA :whistle: ?

Sinon, Euroconvert LoL, mais je suis tout à fait d'accord avec toi Blafi, pour le Fun perso, ça vaut le coup, en plus à chaque utilisation, ça te donne le sourire, donc c'est ZEn en plus :)

Bonne journée,

Brico
 
B

blafy

Guest
Merci de t'interresser à mon pb Bricofire, mais le classeur que j'ai envoyé n'est pas mon classeur person.xls.

Dans mon classeur person.xls j'ai réuni toutes les macros, feuilles et autres choses que j'utilise couramment et pour lesquels j'ai d'ailleurs installé des outils dans mes barres d'outils.
Toutes ces macros perso fonctionnent parfaitement avec n'importe quel classeur, sauf justement cette dernière qui me pose un problème.

J'ai pourtant mis dans mon classeur perso : un module contenant les macro Changermonnaie, vers Euros et versFrancs, ainsi qu'une feuille userform contenant Boite1.usf.

Tout marche bien jusqu'au moment ou la macro se plante sur cette fameuse ligne d'entrée de formule dans les cellules 'cece'... On dirait que la macro ne trouve pas les cellules de la sélection faite dans le classeur actif...

Et là 1/ je ne vois pas ou est le pb 2/ apparemment rien ne résoud le pb.

D'autres idées ??
 
B

blafi

Guest
D'accord avec toi jmps... ma macro fonctionne très bien mais dans un classeur autre que mon classeur person.xls...

J'ai essayé avec les With de charly (en enlevant naturellement le . avant selection) mais ça ne marche toujours pas ...

La macro bloque toujours sur la même ligne, même lorsque j'affiche mon perso.xls et que j'essaye de l'utiliser dans une feuille de ce classeur.

Les mystères d'excel ??
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour José, Blafi, Brico, Charly, le Fil, le Forum

J'ai fait des tests, et en effet j'ai eu une erreur sur cette FormulaR1C1, puis j'ai commencé à développer un truc sympa, puis mon PC a planté et donc faut tout recommencer lol!

J'en étais juste sur un fichier normal (ni XLA, ni Perso.xls) et j'avais bien une erreur quand j'avais une valeur d'origine avec décimale dans la sélection.

Pour le code de Charly, oui je n'ai pas bien saisi sa spécification avec un 'With ActiveWorkbook.ActiveSheet' puisque quoiqu'il en soit 'Selection' est, par définition, sur l'ActiveBook/Sheet.

Bon là j'ai plus vraiment le temps de recommencer mon sbinz sur ce Round en Formula, mais une simple Boucle pour écrire en dur la Valeur devrait suffir non ?


Const Rate As Double = 6.55957

Sub VersEuro()
Dim CeCe As Range
   
For Each CeCe In Selection
       
If IsNumeric(CeCe.Value) And Not CeCe = Empty Then
            CeCe = Round(CeCe.Value / Rate, 2)
       
End If
   
Next CeCe
End Sub

'------------------------------------------------

Sub VersFranc()
Dim CeCe As Range
   
For Each CeCe In Selection
       
If IsNumeric(CeCe.Value) And Not CeCe = Empty Then
            CeCe = Round(CeCe.Value * Rate, 2)
       
End If
   
Next CeCe
End Sub
End Sub


On pourrait même envisager de passer l'Opérateur DIV '/' ou MULTI '*' en argument String depuis le UserForm mais bon, c'est pas indispensable.

Bon Dimanche, zavez-vu ils ont sélectionné Zidane !

[ol]@+Thierry[/ol]
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Coucou Amigo José ;)

Non non promis je délire pas, pas encore de Duvel à cette heure-ci LOL !!!

Bon je regarderai ça tout à l'heure, opération ménage de printemps à la maison prévu pour maintenant (et encore je comptais le faire ce matin lol)

[ol]@+Thierry[/ol]
 
B

blafy

Guest
Merci à tous (jmps, Charly2, Thierry etc...) de participer à mon pb,

Je viens d'étudier le code proposé par Thierry (que je remercie) qui, je suppose, remplace la valeur des cellules d'origine par leur valeur en Euros ou francs suivant le choix...

pour ma part, ma 'selection' est constituée par les cellules adjacentes à droite des cellules que je veux traiter, ce qui a l'avantage de laisser intactes les cellules contenant les valeurs d'origine. Il faut en conséquence adapter le code, ce que j'essaierai de faire dès que je me serais fait bronzer au soleil dominical du sud...

Je répète toutefois que ma macro marche parfaitement lorsqu'elle est dans un classeur lambda et refuse de marcher si je la mets dans mon person.xlos..

Le mystère demeure... Qui me le résoudra ??

A++
 

Discussions similaires

Réponses
21
Affichages
513
Réponses
9
Affichages
127

Statistiques des forums

Discussions
312 972
Messages
2 094 051
Membres
105 928
dernier inscrit
mbitso