Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

FormulaR1C1 ==> Erreur d'exécution '1004'

  • Initiateur de la discussion Initiateur de la discussion Belgoman
  • Date de début Date de début

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 !

B

Belgoman

Guest
Bonjour,

Je travaille actuellement sur un fichier Excel me permettant de calculer le prix de vente d'un article en fonction de conditions des remise spécifiées. J'ai donc réalisé une petite macro qui contient notamment cette ligne :
Code:
Sheets("Liste de prix").Cells(2, C_RemiseClient_Liste).FormulaR1C1 = "=IF(RC[" & C_Méthode_Liste - C_RemiseClient_Liste & "]=1;RC[" & C_RemiseMeth1_Liste - C_RemiseClient_Liste & "];IF(RC[" & C_Méthode_Liste - C_RemiseClient_Liste & "]=2;RC[" & C_RemiseMeth2_Liste - C_RemiseClient_Liste & "];IF(RC[" & C_Méthode_Liste - C_RemiseClient_Liste & "]=3;RC[" & C_RemiseMeth3_Liste - C_RemiseClient_Liste & "];)))"

Malgré plusieurs modifications grace à des posts précédents touchant le même sujet, rien n'y fait..."erreur d'exécution '1004'" apparait.

Un petit coup de pouce serait grandement apprécié.

Merci,

Belgoman
 
Re : FormulaR1C1 ==> Erreur d'exécution '1004'

Bonjour ,
pour voir si cela viens de ta formule ou pas met pax exemple:"coucou"
tu as encore une erreur cela viens de la syntaxe de ta feuille ou le fait que C_RemiseClient_Liste soit = a rien
A+ pour commencer
 
Re : FormulaR1C1 ==> Erreur d'exécution '1004'

Bonjour Belgoman

Et bienvenue sur XLD

Sans le reste de la macro ,il sera difficile de debugger
Et de preference la macro dans une copie du fichier concerné (sans données confidentielles)

Edit :Salut fhoest
 
Re : FormulaR1C1 ==> Erreur d'exécution '1004'

Bonjour fhoest, bonjour pierrejean,

J'ai effectué le test du coucou et tout fonctionne bien. Cela devrait donc venir de la formule en elle-même 😕.

J'ai donc réalisé un petit fichier test ci-joint qui génère exactement la même erreur que le fichier original.

Merci de votre accueil et pour vos réponses.
 

Pièces jointes

Re : FormulaR1C1 ==> Erreur d'exécution '1004'

re

2 essais:

Code:
Sub essai()
Range("A2").Formula = "=IF(B2=1,C2,IF(B2=2,D2,IF(B2=3,E2,"""")))"
End Sub
Sub essai1()
Range("A2").FormulaR1C1 = "=IF(RC[1]=1,RC[2],IF(RC[1]=2,RC[3],IF(RC[1]=3,RC[4],"""")))"
End Sub
 
Re : FormulaR1C1 ==> Erreur d'exécution '1004'

bonsoir
c'est sur c'est a cause des variables mais je n'arrive pas a trouver la bonne syntaxe
Bon courage..
A bientot (si je trouve)
edit: bonjour a toi pierre jean
 
Re : FormulaR1C1 ==> Erreur d'exécution '1004'

Salut

essaie de remplacer les ; par des ,
ou, un peu plus court (malgré de tels noms de variable) :
Code:
 "=(RC[" & C_Méthode_Liste - C_RemiseClient_Liste & "]=1)*RC[" & C_RemiseMeth1_Liste - C_RemiseClient_Liste & "]+(RC[" & C_Méthode_Liste - C_RemiseClient_Liste & "]=2)*RC[" & C_RemiseMeth2_Liste - C_RemiseClient_Liste & "]+(RC[" & C_Méthode_Liste - C_RemiseClient_Liste & "]=3)*RC[" & C_RemiseMeth3_Liste - C_RemiseClient_Liste & "]"
 
Re : FormulaR1C1 ==> Erreur d'exécution '1004'

Bonjour
Voici un code similaire a ta formule:
Code:
Option Explicit
Option Private Module

Sub test()

Dim C_RemiseClient_Liste As Integer
Dim C_Méthode_Liste As Integer
Dim C_RemiseMeth1_Liste As Integer
Dim C_RemiseMeth2_Liste As Integer
Dim C_RemiseMeth3_Liste As Integer
Dim a As Range

C_RemiseClient_Liste = 1
C_Méthode_Liste = 2
C_RemiseMeth1_Liste = 3
C_RemiseMeth2_Liste = 4
C_RemiseMeth3_Liste = 5
a = Sheets("Liste de prix").Cells(2, C_RemiseClient_Liste)
If a.Offset(0, 1) = 1 Then
a = a.Offset(0, C_RemiseMeth1_Liste - C_RemiseClient_Liste)
Else:
If a.Offset(0, C_Méthode_Liste - C_RemiseClient_Liste) = 2 Then
a = a.Offset(0, C_RemiseMeth2_Liste - C_RemiseClient_Liste)
Else:
If a.Offset(0, C_Méthode_Liste - C_RemiseClient_Liste) = 3 Then
a = a.Offset(0, C_RemiseMeth3_Liste - C_RemiseClient_Liste)
End If
End If
End If

End Sub
A+
 
Re : FormulaR1C1 ==> Erreur d'exécution '1004'

Re
Une précision quant à la formule simplifiée : elle n'est intéressante que si les dernières cellules contiennent des nombres.
Je pense qu'il faut être prudent avec l'utilisation des décalages (Offset).
Une autre macro pour remplacer la formule :
Code:
Sub test3()
  'exemple
  Dim vL As Long
  For vL = 2 To 50  'si plusieurs lignes
    C_RemiseClient_Liste = 1
    C_Méthode_Liste = 21
    C_RemiseMeth1_Liste = 23
    C_RemiseMeth2_Liste = 24
    C_RemiseMeth3_Liste = 25
    
    a = C_RemiseMeth1_Liste - C_RemiseClient_Liste
    b = C_RemiseMeth2_Liste - C_RemiseClient_Liste
    c = C_RemiseMeth3_Liste - C_RemiseClient_Liste
    
    With Sheets("Liste de prix")
      Select Case Cells(vL, C_Méthode_Liste - C_RemiseClient_Liste)
      Case 1
        .Cells(vL, C_RemiseClient_Liste) = .Cells(vL, a)
      Case 2
        .Cells(vL, C_RemiseClient_Liste) = .Cells(vL, b)
      Case 3
        .Cells(vL, C_RemiseClient_Liste) = .Cells(vL, c)
      End Select
    End With
  Next
End Sub
 

Pièces jointes

Re : FormulaR1C1 ==> Erreur d'exécution '1004'

Bonjour,
A fo_rum
je suis aussi réticent sur le choix d'utiliser l'offset mais je voulais rester dans le meme esprit de la formule.
ceci dit le code que tu propose et tous aussi bien ,je l'avoue
A+
 
Re : FormulaR1C1 ==> Erreur d'exécution '1004'

Bonjour à tous


Pour varier les plaisirs, sur la base du code de Fo_rum

Code:
Sub test3_avecSwitch()
  'exemple
  Dim vL As Long, r  As Range
  For vL = 2 To 50  'si plusieurs lignes
    C_RemiseClient_Liste = 1
    C_Méthode_Liste = 21
    C_RemiseMeth1_Liste = 23
    C_RemiseMeth2_Liste = 24
    C_RemiseMeth3_Liste = 25
    
    a = C_RemiseMeth1_Liste - C_RemiseClient_Liste
    b = C_RemiseMeth2_Liste - C_RemiseClient_Liste
    c = C_RemiseMeth3_Liste - C_RemiseClient_Liste
    
    With Sheets("Liste de prix")
        Set r = .Cells(vL, C_Méthode_Liste - C_RemiseClient_Liste)
        .Cells(vL, C_RemiseClient_Liste) = _
        Switch(r = 1, .Cells(vL, a), r = 2, .Cells(vL, b), r = 3, .Cells(vL, c))
    End With
Next
End Sub
 
Re : FormulaR1C1 ==> Erreur d'exécution '1004'

Bonjour à tous
Code:
[COLOR="DarkSlateGray"][B]Sub test()

Dim C_RemiseClient_Liste As Integer
Dim C_Méthode_Liste As Integer
Dim C_RemiseMeth1_Liste As Integer
Dim C_RemiseMeth2_Liste As Integer
Dim C_RemiseMeth3_Liste As Integer

C_RemiseClient_Liste = 1
C_Méthode_Liste = 2
C_RemiseMeth1_Liste = 3
C_RemiseMeth2_Liste = 4
C_RemiseMeth3_Liste = 5

Sheets("Liste de prix").Cells(2, C_RemiseClient_Liste).FormulaR1C1 = "=IF(RC[" & C_Méthode_Liste - C_RemiseClient_Liste & "]=1,RC[" & C_RemiseMeth1_Liste - C_RemiseClient_Liste & "],IF(RC[" & C_Méthode_Liste - C_RemiseClient_Liste & "]=2,RC[" & C_RemiseMeth2_Liste - C_RemiseClient_Liste & "],IF(RC[" & C_Méthode_Liste - C_RemiseClient_Liste & "]=3,RC[" & C_RemiseMeth3_Liste - C_RemiseClient_Liste & "],)))"

End Sub[/B][/COLOR]
fonctionne.
Seule modification effectuée : remplacement des points-virgules par des virgules. Fo_rum avait raison...​
ROGER2327
#4114


Jeudi 5 Absolu 138 (Saint Bardamu, voyageur, SQ)
26 Fructidor An CCXVIII
2010-W36-7T09:52:03Z
 
Dernière édition:
Re : FormulaR1C1 ==> Erreur d'exécution '1004'

Bonjour,

Tout d'abord, veuillez m'excuser pour mon absence prolongée. Le week-end a été plus chargé que je ne le pensais.

J'ai essayé la solution de Fo_rum, PierreJean et Roger (remplacer les ";" par des ",") et cela fonctionne.

J'ai aussi tenté de comprendre les autres solutions qui sont très largement au-dessus de mes compétences en VBA (si je me trompe dans ce qui suit, n'hésitez donc pas à me le dire).

Solution de fhoest

Chez moi ca génère une erreur "erreur 91 Variable ...non définie" au niveau de la ligne 15. Pourtant "a" est bien défini...

Solution bis de Fo_rum

Je pense que le résultat de la macro test3 est bien identique à ce que je voulais faire mais il n'y a pas de "formule" appliquée dans les cellules de la colonne "A". Donc, si je veux modifier manuellement la méthode de remise par la suite, cela est difficile.

Solution de Staple1600

La solution fonctionne mais a le même désavantage que la solution de Fo_rum. Par contre j'aime bien le coup de la fonction "switch".

Enfin, J'avoue ne pas avoir compris le débat sur l'offset...

Merci encore pour le coup de pouce et bonne Journée.
Belgoman.
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

R
Réponses
2
Affichages
1 K
R
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…