Formule dans VBA avec variable
Résolu/Fermé
SF-TU
Messages postés
18
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
13 juin 2016
-
18 juin 2014 à 12:54
SF-TU Messages postés 18 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 13 juin 2016 - 18 juin 2014 à 23:45
SF-TU Messages postés 18 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 13 juin 2016 - 18 juin 2014 à 23:45
A voir également:
- Formule dans VBA avec variable
- Formule si et - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Formule excel moyenne - Guide
- Excel mise en forme conditionnelle formule - Guide
- Formule excel - Guide
12 réponses
ccm81
Messages postés
10903
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2024
2 428
18 juin 2014 à 14:25
18 juin 2014 à 14:25
Bonjour
Essaies ceci
f = "=IF((OR(RC[9]=1,RC[9]=2))," & HArrivM & ","""")"
ActiveCell.FormulaR1C1 = f
Cdlmnt
Essaies ceci
f = "=IF((OR(RC[9]=1,RC[9]=2))," & HArrivM & ","""")"
ActiveCell.FormulaR1C1 = f
Cdlmnt
skk201
Messages postés
938
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2016
54
18 juin 2014 à 14:25
18 juin 2014 à 14:25
Est-ce que vous pouvez nous donner votre code en entier ?
SF-TU
Messages postés
18
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
13 juin 2016
18 juin 2014 à 15:27
18 juin 2014 à 15:27
Bonjour ccm81
Merci mais le code ne marche pas.
Je vous donne le code en entier mais il fait appel à une feuille de planning mensuel.
Merci d'avance de voir si vous pouvez y faire quelque chose.
Cdt
Merci mais le code ne marche pas.
Je vous donne le code en entier mais il fait appel à une feuille de planning mensuel.
Merci d'avance de voir si vous pouvez y faire quelque chose.
Cdt
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 18/06/2014 à 15:31
Modifié par michel_m le 18/06/2014 à 15:31
Bonjour,
pourquoi veux tu faire le calcul par formule alors que VBA pourrait peut-^tre le faire par code (ce qui allège le fichier d'ailleurs) ?
pourquoi veux tu faire le calcul par formule alors que VBA pourrait peut-^tre le faire par code (ce qui allège le fichier d'ailleurs) ?
SF-TU
Messages postés
18
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
13 juin 2016
18 juin 2014 à 15:43
18 juin 2014 à 15:43
Parce que les valeurs à tester (si =1 ou =2) ne sont pas encre renseignées. C'est quand la personne va saisir 1 ou 2 dans une cellule que la formule va s'appliquer. Je sais pas si c'est très clair...
SF-TU
Messages postés
18
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
13 juin 2016
Modifié par pijaku le 18/06/2014 à 15:38
Modifié par pijaku le 18/06/2014 à 15:38
Bonjour ccm81, ça ne marche pas non plus.
La valeur de HArrivM est bien enregistrée, f également se met bien en mémoire mais ça plante à la ligne ActiveCell.FormulaR1C1=f
"erreur définie par l'application ou par l'objet"
Je met tout le code même si c'est difficilement buvable! :-)
Le problème se situe dans l'utilisation de variable (HArrivM) dans la formule. Mais je ne vois pas où est l'erreur...
La valeur de HArrivM est bien enregistrée, f également se met bien en mémoire mais ça plante à la ligne ActiveCell.FormulaR1C1=f
"erreur définie par l'application ou par l'objet"
Je met tout le code même si c'est difficilement buvable! :-)
Sub FusionFeuillesPrésence() ' ' ' permet de fusionner les feuilles de présence pour RTT avec les horaires et spécificités du salarié ' Recupération des données NomSalarie = Range("A1").Value Annee1 = Range("J2").Value Annee2 = Range("J3").Value Dim HArrivM As Date HArrivM = Workbooks("Calcul et suivi RTT.xlsm").Worksheets("Semaine Type").Range("B3").Value ' Ouvrir le fichier générale des Feuilles de présence pour RTT Workbooks.Open Filename:= _ "T:\Ressources Humaines\Suivi des Parcours\Feuilles de présence\Feuilles de présence pour RTT " & Annee1 & "-" & Annee2 & ".xlsm" ' Enregistrer le fichier au nom du Salarié ChDir "T:\Ressources Humaines\Suivi des Parcours\Feuilles de présence" ActiveWorkbook.SaveAs Filename:= _ "T:\Ressources Humaines\Suivi des Parcours\Feuilles de présence\Feuilles de présence pour RTT " & Annee1 & "-" & Annee2 & " " & NomSalarie & ".xlsm" _ , FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False ' Copier le nom et le service du salarié Sheets(Array("JUIN", "JUILLET", "AOÛT", "SEPTEMBRE", "OCTOBRE", "NOVEMBRE", _ "DÉCEMBRE", "JANVIER", "FÉVRIER", "MARS", "AVRIL", "MAI")).Select Sheets("JUIN").Activate Windows("Calcul et suivi RTT.xlsm").Activate Range("A1").Copy Windows("Feuilles de présence pour RTT " & Annee1 & "-" & Annee2 & " " & NomSalarie & ".xlsm").Activate Range("I3:O3").Select ActiveSheet.Paste Windows("Calcul et suivi RTT.xlsm").Activate Range("C1").Copy Windows("Feuilles de présence pour RTT " & Annee1 & "-" & Annee2 & " " & NomSalarie & ".xlsm").Activate Range("I4:O4").Select ActiveSheet.Paste 'Dissocier les feuilles Sheets(2).Activate Sheets(1).Select Range("A9").Select ' Insérer les formules ' Faire la manip pour chaque feuille Dim k As Integer, i As Integer k = Sheets.Count For i = 1 To k Sheets(i).Activate Range("A9").Select 'Insérer les formules jusqu'à ce que la case A9 soit vide Do Until ActiveCell.Value = "" 'Pour chaque jour de la semaine du lundi au samedi If ActiveCell.Value = "Lundi" And ActiveCell.Offset(0, 2) = "" _ Or ActiveCell.Value = "Mardi" And ActiveCell.Offset(0, 2) = "" _ Or ActiveCell.Value = "Mercredi" And ActiveCell.Offset(0, 2) = "" _ Or ActiveCell.Value = "Jeudi" And ActiveCell.Offset(0, 2) = "" _ Or ActiveCell.Value = "Vendredi" And ActiveCell.Offset(0, 2) = "" _ Or ActiveCell.Value = "Samedi" And ActiveCell.Offset(0, 2) = "" Then 'Insérer la formule de Arrivée Matin ActiveCell.Offset(0, 2).Select ActiveCell.FormulaR1C1 = "=IF((OR(RC[9]=1,RC[9]=2)),HArrivM, """")" Selection.HorizontalAlignment = xlCenter Loop Next i ....... Suite du code End Sub
Le problème se situe dans l'utilisation de variable (HArrivM) dans la formule. Mais je ne vois pas où est l'erreur...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ccm81
Messages postés
10903
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2024
2 428
18 juin 2014 à 15:50
18 juin 2014 à 15:50
Ici ça fonctionne
https://www.cjoint.com/?3FspWarh3YQ
As tu bien respecté la syntaxe
RQ. Que penses tu de la remarque de michel?
Cdlmnt
https://www.cjoint.com/?3FspWarh3YQ
As tu bien respecté la syntaxe
RQ. Que penses tu de la remarque de michel?
Cdlmnt
SF-TU
Messages postés
18
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
13 juin 2016
18 juin 2014 à 16:17
18 juin 2014 à 16:17
Bonjour,
Je viens d'essayer ton fichier, ccm81 et en effet ça marche mais ma variable HArrivM est une "date" ou plutôt un horaire de début ou fin de journée (exemple 08:30).
Alors si je mets dans ton fichier : Dim HArrivM as Date alors une fois arrivé à la formule, VBA dit "Erreur défini par l'application ou par l'objet".
Je pense que cela vient du format de ma variable qu'il ne veut pas prendre en compte.
Qu'en pensez-vous ?
Merci
Cdt
Je viens d'essayer ton fichier, ccm81 et en effet ça marche mais ma variable HArrivM est une "date" ou plutôt un horaire de début ou fin de journée (exemple 08:30).
Alors si je mets dans ton fichier : Dim HArrivM as Date alors une fois arrivé à la formule, VBA dit "Erreur défini par l'application ou par l'objet".
Je pense que cela vient du format de ma variable qu'il ne veut pas prendre en compte.
Qu'en pensez-vous ?
Merci
Cdt
ccm81
Messages postés
10903
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2024
2 428
Modifié par ccm81 le 18/06/2014 à 16:44
Modifié par ccm81 le 18/06/2014 à 16:44
Essaie en déclarant
Dim HArrivM as Double
ou
Dim HArrivM as Long
https://www.cjoint.com/?3FsqDURJRKU
Dim HArrivM as Double
ou
Dim HArrivM as Long
https://www.cjoint.com/?3FsqDURJRKU
SF-TU
Messages postés
18
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
13 juin 2016
18 juin 2014 à 17:27
18 juin 2014 à 17:27
Je suis désolée mais il doit y avoir un truc que je ne comprends pas car même avec ton fichier, si à la place de la date, je mets 08:30, le VBA ouvre une fenêtre d'erreur avec le chiffre 400 et une croix dans un rond rouge.
Je ne sais pas ce que cela signifie.
Merci, cdt
Je ne sais pas ce que cela signifie.
Merci, cdt
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
18 juin 2014 à 18:10
18 juin 2014 à 18:10
Bonjour,
Parce que les valeurs à tester (si =1 ou =2) ne sont pas encre renseignées. C'est quand la personne va saisir 1 ou 2 dans une cellule que la formule va s'appliquer.
On ne fait pas de vba pour ça...
On teste la cellule, si elle est vide on ne met rien, si ok on évalue la formule :
=si(A2="";"";ta_formule)
eric
Parce que les valeurs à tester (si =1 ou =2) ne sont pas encre renseignées. C'est quand la personne va saisir 1 ou 2 dans une cellule que la formule va s'appliquer.
On ne fait pas de vba pour ça...
On teste la cellule, si elle est vide on ne met rien, si ok on évalue la formule :
=si(A2="";"";ta_formule)
eric
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
18 juin 2014 à 18:29
18 juin 2014 à 18:29
Salut Eric
Hé Oui!
d'autant plus, une fois que la macro a fini de se dérouler, HArrivM est vide....
Hé Oui!
d'autant plus, une fois que la macro a fini de se dérouler, HArrivM est vide....
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
18 juin 2014 à 19:22
18 juin 2014 à 19:22
ouf, je ne n'avais même pas vu tout le code...
Moi j'essaierai
ActiveCell.FormulaR1C1 = "=IF((OR(RC[9]=1,RC[9]=2)),""" & HArrivM & """*1, """")"
eric
Moi j'essaierai
ActiveCell.FormulaR1C1 = "=IF((OR(RC[9]=1,RC[9]=2)),""" & HArrivM & """*1, """")"
eric
ccm81
Messages postés
10903
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2024
2 428
18 juin 2014 à 19:07
18 juin 2014 à 19:07
Effectivement ça ne fonctionne pas
Une solution (pas jolie mais qui semble fonctionner)
https://www.cjoint.com/?3FstdccAEsn
@eric, salut à toi
je ne crois pas que le problème vienne de là, si la formule était bonne ça donnerait un message d'erreur de la feuille et non de la part de vba
il y a un problème au niveau de la fabrication de la formule, avec HArrivM entier (date) ça fonctionne, mais avec HArrivM décimal (heure) ça coince
je fais appel à tes lumières
Une solution (pas jolie mais qui semble fonctionner)
https://www.cjoint.com/?3FstdccAEsn
@eric, salut à toi
je ne crois pas que le problème vienne de là, si la formule était bonne ça donnerait un message d'erreur de la feuille et non de la part de vba
il y a un problème au niveau de la fabrication de la formule, avec HArrivM entier (date) ça fonctionne, mais avec HArrivM décimal (heure) ça coince
je fais appel à tes lumières
ccm81
Messages postés
10903
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2024
2 428
Modifié par ccm81 le 18/06/2014 à 19:55
Modifié par ccm81 le 18/06/2014 à 19:55
Je crois que c'était un problème au niveau des "virgules et "point-virgule".
En passant au format local, ça fonctionne
f = "=SI(OU(LC(9)=1;LC(9)=2);" & HArrivM & ";"""")"
https://www.cjoint.com/?3Fst1tnap6S
Cdlmnt
En passant au format local, ça fonctionne
f = "=SI(OU(LC(9)=1;LC(9)=2);" & HArrivM & ";"""")"
https://www.cjoint.com/?3Fst1tnap6S
Cdlmnt
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
18 juin 2014 à 20:05
18 juin 2014 à 20:05
J'avais laissé HArrivM As Date, dans ce cas la conversion avec le *1 fonctionne.
J'avais testé.
eric
J'avais testé.
eric
ccm81
Messages postés
10903
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2024
2 428
18 juin 2014 à 20:15
18 juin 2014 à 20:15
Exact .... Ouf!
Bonne soirée à toi
ccm81
Bonne soirée à toi
ccm81
SF-TU
Messages postés
18
Date d'inscription
mercredi 21 mai 2014
Statut
Membre
Dernière intervention
13 juin 2016
18 juin 2014 à 23:45
18 juin 2014 à 23:45
Bonjour,
Merci à tous ceux qui ont participé à la résolution de mon problème et surtout à ccm81 et eriiic pour la solution trouvée. Je viens de l'essayer dans mon code et tout marche nickel.
Merci encore et bonne nuit
Cdt, AR
Merci à tous ceux qui ont participé à la résolution de mon problème et surtout à ccm81 et eriiic pour la solution trouvée. Je viens de l'essayer dans mon code et tout marche nickel.
Merci encore et bonne nuit
Cdt, AR