XL 2019 Formule R1C1 avec enregistreur de macro (erreur)

re4

XLDnaute Occasionnel
Bonjour,
Lorsque je créé une formule avec l'enregistreur de macro cela me donne des formules de type R1C1. Est-il possible de contourner et d'utiliser les formules telles qu'écrites ?

Avec ce code, j'ai une erreur à "=*" alors que ça fonctionne dans l'exemple 2, bien sur il y a des erreurs de syntaxe , par ; ect... mais je ne sais pas faire ,-(
Code:
Range("B2").Formula="SOMME.SI.ENS($A$3:$A$9;B3:B9; "=*";B3:B9; "*")"

Exemple 2 :
VB:
  Range("B2").Select
    '=SOMME.SI.ENS($A$3:$A$9;B3:B9; "=*";B3:B9; "*") ' je voudrai écrire sous cette forme
     ActiveCell.FormulaR1C1 = _
        "=SUMIFS(R3C1:R9C1,R[1]C:R[7]C, ""=*"",R[1]C:R[7]C, ""*"")"

Merci à vous
 
Dernière édition:

re4

XLDnaute Occasionnel
Qui cherche trouve, surtout si l'on corrige ses erreurs :)
VB:
Range("B2") = WorksheetFunction.SumIfs(Range(Cells(3, 1), Cells(9, 1)), Range("B3:B9"), "=*", Range("B3:B9"), "*")

Le calcul se fait bien mais comment faire pour que la formule s'écrive dans la cellule B2 ?
 
Dernière édition:

re4

XLDnaute Occasionnel
Merci beaucoup Dranreb, ça fonctionne mais comment utiliser Range(cells... dans ce cas parce que je compte la dernière ligne et la dernière colonne. je fais un Autofill sur la ligne 2 à partir de la formule en B2
Bonne nuit

 

Dranreb

XLDnaute Barbatruc
Pas besoin d'AutoFill, vous pouvez mettre d'un coup la formule à toutes les colonnes de la ligne 2 :
VB:
Cells(2, "B").Resize(, ColMax - 1).FormulaLocal = "=SOMME.SI.ENS($A$3:$A$9;B3:B9;""=*"";B3:B9;""*"")"
Ou bien
VB:
[B2].Resize(, ColMax - 1).FormulaR1C1 = "=SUMIFS(R3C1:R9C1,R3C:R9C,""=*"",R3C:R9C,""*"")"
Remarque: je ne comprends pas bien le rôle de la dernière paire de termes car il me semble que si toutes les cellules d'une colonnes sont de la forme "=*", elles sont forcément aussi de la forme "*". Ou alors c'est la 2ème paire qui ne sert à rien !
 
Dernière édition:

re4

XLDnaute Occasionnel
Bonjour et encore merci de votre aide.
C'est parfait, je ne connaissait pas cette syntaxe pour recopier les formules.
effectivement j'ai remplacé "=*" par "*", c'est OK

Est- il possible de remplacer les ($A$3:$A$9;B3:B9;""=*"";B3:B9 par des Range(cells( ?
l'idée est de remplacer les 9 pour ce test par dernière ligne de colonne A et suivantes

Bonne journée
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Non. Éventuellement par des " & Range(… ).Address(True, False, xlR1C1) & "
Mais si vous avez le LMax, le plus simple c'est de faire :
VB:
Dim LMax AsCong, CMax As Integer, LxC As String
…
LxC = "R" & LMax & "C"
[B2].Resize(, CMax - 1).FormulaR1C1 = "=SUMIF(R3C:" & RxC & ",""*"",R3C1:" & RxC & "1)"
 

re4

XLDnaute Occasionnel
Merci Dranreb
Comme ceci ça marche ,-)
Dim LMax As Long, CMax As Integer, LxC As String
LxC = "R" & LMax & "C"
[B2].Resize(, CMax - 1).FormulaR1C1 = "=SUMIF(R3C:" & LxC & ",""*"",R3C1:" & LxC & "1)"

Tu m'as fait découvrir des nouvelles façon de faire dont je ne connaissait absolument pas
Je testerai le " & Range(… ).Address(True, False, xlR1C1) & " mais ça fonctionne très bien avec ton dernier code
Encore merci pour ton implication
Bonne journée
 

Discussions similaires

Réponses
11
Affichages
420
Réponses
2
Affichages
626

Statistiques des forums

Discussions
312 097
Messages
2 085 256
Membres
102 839
dernier inscrit
Tougtoug