Correction de formule

  • Initiateur de la discussion Initiateur de la discussion fb62840
  • 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 !

fb62840

XLDnaute Impliqué
Bonjour à toutes et tous,

Je cherche à modifier le code suivant :

Code:
Sub EcrireFormules()
Dim f As Worksheet
Dim ctr As String
Dim fin As String
Dim champ As String
Application.DisplayAlerts = False

'Boucler sur toutes les feuilles du classeurs
For Each f In ThisWorkbook.Sheets
    If Left(f.Name, 4) = "CLUB" Then
        ctr = Trim(Split(f.Name, " ")(1))
        fin = Trim(Split(f.Name, " ")(2))
        champ = "Championnat_" & fin
        f.Range("E1") = ctr
        'f.Range("G2").Formula = "=SUMPRODUCT((" & champ & "!RC[7]:R[65534]C[7]='" & f.Name & "'!RC[-3])*(" & champ & "!RC[6]:R[65534]C[6]='" & f.Name & "'!R1C5)*(Championnat R1!RC[4]:R[65534]C[4]))"
        f.Range("G2").Formula = "=SUMPRODUCT((" & champ & "!RC[-3]:R[65534]C[-3]='" & f.Name & "'!RC[-6])*(" & champ & "!RC[+1]:R[65534]C[+1]='" & f.Name & "'!R1C5)*(" & champ & "!RC[4]:R[65534]C[4]))"
        End If
Next f
Application.DisplayAlerts = True
End Sub

Qui a pour effet de recopier une formule de calcul sur les feuilles dont le nom commence par CLUB dans la cellule G2 et de recopier une donnée dans la cellule E1.

A ce stade la formule ne recopie la formule que sur la 2nde ligne des feuilles.
J'aimerai qu'elle soit modifiée afin de permettre l'écrire en colonne G tant qu'il y aura une valeur en colonne A sur la même ligne (mais il faudrait aussi que les références soit de type Absolue pour les données de la feuille champ et pour le critère.

Merci pour votre aide

En pièce-jointe le fichier de travail. Voir la feuille Explication
 

Pièces jointes

Re : Correction de formule

Bonjour Gilbert,

On progresse, par contre la formule que tu propose de recopier n'est pas la même.

ma formule :
f.Range("G" & i).Formula = "=SUMPRODUCT((" & champ & "!RC[-3]:R[65534]C[-3]='" & f.Name & "'!RC[-6])*(" & champ & "!RC[+1]:R[65534]C[+1]='" & f.Name & "'!R1C5)*(" & champ & "!RC[4]:R[65534]C[4]))"

Ta formule :
f.Range("G" & i).Formula = "=SUMPRODUCT((Championnat_R1!R2C4:R65536C4='CLUB FEM R1'!RC[-6])*(Championnat_R1!R2C8:R65536C8='CLUB FEM R1'!R1C5)*(Championnat_R1!R2C11:R65536C11))"

En remplaçant ta formule par la mienne j'obtiens par exemple sur la feuille CLUB <8 :
en G2 :
SOMMEPROD((Championnat_R1!D2😀65536='CLUB <8 R1'!A2)*(Championnat_R1!H2:H65536='CLUB <8 R1'!$E$1)*(Championnat_R1!K2:K65536))
Qui renvoi bien le Total attendu de 209

en G3 :
SOMMEPROD((Championnat_R1!D1😀3='CLUB <8 R1'!A3)*(Championnat_R1!H1:H3='CLUB <8 R1'!$E$1)*(Championnat_R1!K1:K3))
La formule n'est pas "correcte" car elle utilise D1😀3 au lieu de D2😀65536 comme première plage de référence
même type de modification pour la seconde plage la formule utilise H1:H3 au lieu de H2:H65536

Une idée pour corriger ?
 
Re : Correction de formule

Je pense avoir trouvé avec cette rédaction (n'utilisant pas les [] on sous-entend qu'il s'agit de référence absolue, encore un apprentissage de plus pour moi)

f.Range("G" & i).Formula = "=SUMPRODUCT((" & champ & "!R2:R65536C4='" & f.Name & "'!RC[-6])*(" & champ & "!R2:R65536C8='" & f.Name & "'!R1C5)*(" & champ & "!R2:R65536C11))"

Il a fallu également que je donne les références numériques sans utiliser le signe moins qui n'est apparemment pas utilisable avec les références absolues

Merci pour ton aide.
 
- 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

Réponses
4
Affichages
772
  • Question Question
Microsoft 365 VBA sur outlook
Réponses
14
Affichages
1 K
Réponses
250
Affichages
16 K
Réponses
5
Affichages
562
Réponses
9
Affichages
723
Retour