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

[VBA] FormulaR1C1 v FormulaArray

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 !

F22Raptor

XLDnaute Impliqué
Bonjour à tous,
Sur ce fichier joint, j'ai deux boutons :
le premier colle des formules R1C1 sur une zone B1:B3.
le second colle des formules ARRAY sur la même zone.


Lorsque je colle R1C1 sur la zone, la référence se décale bien au fur et à mesure des lignes : R[C-1] est bien interprété.
En revanche, en ARRAY, B1 fait référénce à A1, mais idem pour B2, B3, etc ...
La formulaArray ne se décale pas !

Une idée pour avoir les avantages d'une R1C1 en formule matricielle ?

Merci !
 

Pièces jointes

Re : [VBA] FormulaR1C1 v FormulaArray

hello
En attendant de trouver mieux, je fais d'abord une R1C1 (avec supprespace), qui ne marche donc pas, et je fais ensuite :

Range("B1:B3").FormulaArray = Range("B1:B3").FormulaR1C1

C'est moins bien qu'en une fois, mais c'est rapide
 
Re : [VBA] FormulaR1C1 v FormulaArray

Salut Dran,
Ca ne marche pas chez moi : et curieusement, la formule ne fait pas référence à A1,A2,A3, mais "la cellule sur laquelle je suis au moment où je clique, colonne [-1]" !

Bon, j'avoue que ma soluce en deux lignes fonctionne correctement, donc je vais rester là-dessus.
 
Re : [VBA] FormulaR1C1 v FormulaArray

Ajoutez un paramètre RelativeTo. Exemple :
VB:
 If Rg.HasArray Then
      Rg.CurrentArray.FormulaArray = Application.ConvertFormula(LaFormuleR1C1, xlR1C1, xlA1, RelativeTo:=Rg.CurrentArray)
Remarque: Je ne l'avais pas dans le code d'où j'ai extrait cet exemple (c'est une macro qui ajoute automatiquement les dollars seulement là où il faut dans 99,99% des cas) et ça ne me gênait pas, parce que la formule résultant ne comportait plus de référence relative ormis celles à la ligne et à la colonne contenant la formule. Je vous la livre :
VB:
Sub Dollars()
Dim RgSel As Range, Rg As Range
Set RgSel = Selection
For Each Rg In RgSel: Dollars1Cel Rg: Next Rg
End Sub
Private Sub Dollars1Cel(ByVal Rg As Range)
Dim ZOrg As String, lig As Long, Col As Long, SplO() As String, ZRés As String, N As Long, _
   Maju As String, P As Long, C As String * 1, SplF() As String ', PDéb As Long, PFin As Long
ZOrg = Rg.FormulaR1C1: If ZOrg = "" Then Exit Sub
lig = Rg.Row: Col = Rg.Column
SplO = Split(ZOrg, "["): ZRés = SplO(0)
For N = 1 To UBound(SplO)
   Maju = ""
   For P = Len(ZRés) To 1 Step -1
      C = Mid$(ZRés, P, 1): If C = LCase(C) Then Exit For
      Maju = C & Maju: Next P
   If Maju = "R" Then
      SplF = Split(SplO(N), "]"): ZRés = ZRés & lig + SplF(0) & SplF(1)
   ElseIf Maju = "C" Or Maju = "RC" Then
      SplF = Split(SplO(N), "]"): ZRés = ZRés & Col + SplF(0) & SplF(1)
   Else
      ZRés = ZRés & "[" & SplO(N)
      End If
   Next N
If ZRés <> ZOrg Then
   On Error Resume Next
   Application.Calculation = xlCalculationManual
   If Rg.HasArray Then
      Rg.CurrentArray.FormulaArray = Application.ConvertFormula(ZRés, xlR1C1, xlA1) ', RelativeTo:=Rg.CurrentArray)
      If Err Then MsgBox "Range(" & Rg.CurrentArray.Address(True, True) & ").FormulaArray =" _
         & vbLf & """" & ZRés & """ ==> erreur " & Err.Number & " :" _
         & vbLf & Err.Description, vbExclamation, "Mettre les ""$""."
   Else
      Rg.FormulaR1C1 = ZRés
      If Err Then MsgBox "Range(" & Rg.Address(True, True) & ").FormulaR1C1 =" _
         & vbLf & """" & ZRés & """ ==> erreur " & Err.Number & " :" _
         & vbLf & Err.Description, vbExclamation, "Mettre les ""$""."
      End If
   Application.Calculation = xlCalculationAutomatic
   On Error GoTo 0
   End If
End Sub
…Mais j'ai peur que ça ne marche plus avec des formules contenant des référence à des éléments de tableaux (objet ListObject) qui peuvent aussi contenir des crochets droits…
 
Dernière édition:
- 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

Discussions similaires

B
  • Question Question
Réponses
0
Affichages
782
baptiste76220
B
C
Réponses
1
Affichages
2 K
N
Réponses
1
Affichages
2 K
neosaori
N
S
Réponses
3
Affichages
1 K
seblap47
S
B
Réponses
5
Affichages
809
J
Réponses
13
Affichages
9 K
J
N
  • Question Question
Réponses
5
Affichages
3 K
L
Réponses
4
Affichages
2 K
Lemailler
L
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…