Dysfonctionnement bouton pour appliquer une formule
Bonjour,
J'aimerais appliquer une formule en appuyant sur un bouton, mais j'ai quelques dysfonctionnements, pouvez-vous me dépanner ?
Ce que j'aimerais que la macro fasse :
- Se mettre en K8
- Ecrire cette formule =SIERREUR(SI(K$6<$I8;0;INDEX('ZMD47-1'!$B$3:$I$150;EQUIV(Besoins!$E8;'ZMD47-'!$A$3:$A$150;0);EQUIV(Besoins!K$5;'ZMD47-1'!$B$1:$I$1;0)));"Saisie")
- L'étirer à droite jusque R8, et en bas jusque R75
- Appliquer la mise en forme bordure intérieures et extérieures + grosses bordures pour l'extérieur
Du coup n'étant pas experte j'ai bidouillé avec les enregistrements auto et internet ce qui m'a donné le code :
(je ne sais plus trop comment je fais fais, mais il me semble avoir copier/coller ma formule à partir d'une cellule --> problème : quand la macro est appliquée, le contenu de cette dite cellule s'affiche... pas terrible)
Sub test()
Application.CutCopyMode = False
Range("B3").Select
ActiveCell.FormulaR1C1 = _
"'=SIERREUR(SI(K$6<$I8;0;INDEX('ZMD47-1'!$B$3:$I$150;EQUIV(Besoins!$E8;'ZMD47-1'!$A$3:$A$150;0);EQUIV(Besoins!K$5;'ZMD47-1'!$B$1:$I$1;0)));""Saisie"")"
Range("K8").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(IF(R6C<RC9,0,INDEX('ZMD47-1'!R3C2:R150C9,MATCH(Besoins!RC5,'ZMD47-1'!R3C1:R150C1,0),MATCH(Besoins!R5C,'ZMD47-1'!R1C2:R1C9,0))),""Saisie"")"
Range("K8").Select
Selection.AutoFill Destination:=Range("K8:R8"), Type:=xlFillValue
Range("K8:R8").Select
Selection.AutoFill Destination:=Range("K8:R75"), Type:=xlFillValue
Range("K8:R75").Select
ActiveWindow.SmallScroll Down:=-51
Range("K8:R75").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
End SubBonjour,
Lorsque vous écrivez dans la propriété .FormulaR1C1, il y a quelques contraintes à respecter :
- Utiliser la syntaxe anglaise des formules
- Séparer les arguments par une "," et non ";"
- Faire références aux cellules et aux plages avec le numéro de ligne et de colonne. Ainsi,
$A$1s'écritR1C1, etA1(référence relative) s'écritR[-1]C[-1]si l'on se trouve enB2.
Vous pouvez utiliser l'enregistreur de macro pour obtenir des exemples de syntaxe.
Il existe aussi d'autres propriétés telles que .Formula et .FormulaLocal
La 2ème formule a par exemple une syntaxe qui semble correcte, par contre la première non. D'autant plus que vous l'avez précédée d'une apostrophe qui la transformera au final en texte et non en formule.
Aide si besoin : https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.formular1c1
Autre point : dans la majorité des cas, .Select est inutile, exemple :
Range("K8:R8").Select
Selection.AutoFill Destination:=Range("K8:R75"), Type:=xlFillValue
'Devient :
Range("K8:R8").AutoFill Destination:=Range("K8:R75"), Type:=xlFillValueBonjour,
Merci pour la réponse. Par contre, il je ne comprends toujours pas pouquoi la partie
ActiveCell.FormulaR1C1 = _
"=IFERROR(IF(R6C<RC9,0,INDEX('ZMD47-1'!R3C2:R150C9,MATCH(Besoins!RC5,'ZMD47-1'!R3C1:R150C1,0),MATCH(Besoins!R5C,'ZMD47-1'!R1C2:R1C9,0))),""Saisie"")"ne fonctionne pas car c'est ce qui s'est écrit quand j'ai fait l'enregistrement automatique...
En gros j'ai :
Cliqué sur ma cellule B3 pour sélectionner la formule que j'avais écrite en français avant pour ne pas l'oublier et j'ai copié la formule
Après je l'ai collée en K8 puis étirée.