[Résolu] Exécution Formule VBA en deux temps

Compress

XLDnaute Occasionnel
Bonjour les forumeurs,

j'ai un problème dans une de mes macros.
En fait je souhaiterai réaliser une moyenne de données présentes dans différents onglets suivants des critères.

Ma Macro tourne correctement, les formules s'inscrivent bien dans les formules adéquates. Dans la cellule désirée je retrouve bien ma moyenne comme si je devais la taper à la main. Mais j'ai une erreur #VALEUR! alors que la formule est correcte. De plus, lorsque je vais sur la cellule (F2) et que j'exécute avec la touche Entrée ma formule, la valeur renvoyée correspond bien à la moyenne demandée.

Pourquoi cette exécution ne se fait pas avec la macro ?

Voici mon code :

Code:
Option Explicit

Sub Moyenne()

    Dim Sem1, Sem2 As String 'Valeur des semaines initiale et finale
    Dim Ws As Worksheet
    Dim PlageSem, ResultSem1, ResultSem2 As Range
    Dim c, j As Integer
    Dim oSem1, oSem2 As Object
    Dim PlageFiliale, ResultFiliale As Range
    Dim Fil As Object
    
    Sem1 = Sheets("Moyenne").Range("C6").Value
    Sem2 = Sheets("Moyenne").Range("H6").Value
    
    For Each Ws In Worksheets
    
        If Ws.Name <> "Moyenne" And Ws.Name <> "Synthèse" And Ws.Name <> "Graphs" Then
            c = Ws.Range("A65536").End(xlUp).Row + 1
            Set PlageSem = Ws.Range("A3:A" & c)
            
            For Each oSem1 In PlageSem 'Recherche de la semaine de début
                Set ResultSem1 = PlageSem.Find(What:=Sem1, LookIn:=xlValues, LookAt:=xlPart)
                    If ResultSem1 Is Nothing Then
                        'MsgBox "Aucune donnée pour la semaine de début sélectionnée pour l'agence " & Ws.Name & ", veuillez en sélectionner une autre et relancer le calcul", vbOKOnly + vbInformation
                        GoTo Suite
                    Else
                        Set ResultSem2 = PlageSem.Find(What:=Sem2, LookIn:=xlValues, LookAt:=xlPart) 'Recherche de la semaine de fin
                            If ResultSem2 Is Nothing Then
                                'MsgBox "Aucune donnée pour la semaine de fin sélectionnée pour l'agence " & Ws.Name & ", veuillez en sélectionner une autre et relancer le calcul", vbOKOnly + vbInformation
                                GoTo Suite
                            Else
                                Set PlageFiliale = Sheets("Moyenne").Range("A12:A37") 'se placer sur la filiale concernée
                                    For Each Fil In PlageFiliale
                                        Set ResultFiliale = PlageFiliale.Find(What:=Ws.Name, LookIn:=xlValues, LookAt:=xlPart)
                                            If Not ResultFiliale Is Nothing Then
                                                  For j = 1 To 8
                                                    [B]ResultFiliale.Offset(0, j + 1).Formula = "=MOYENNE('" & Ws.Name & "'!" & ResultSem1.Offset(0, j).Address & ":'" & Ws.Name & "'!" & ResultSem2.Offset(0, j).Address & ")"
                                                    ResultFiliale.Offset(1, j + 1).Formula = "=MOYENNE('" & Ws.Name & "'!" & ResultSem1.Offset(0, j + 8).Address & ":'" & Ws.Name & "'!" & ResultSem2.Offset(0, j + 8).Address & ")"[/B]
                                                  Next
                                            End If
                                    Next Fil
                            End If
                    End If
            Next
        End If
Suite:
    Next Ws
    
End Sub
Merci par avance
 
Dernière édition:

Compress

XLDnaute Occasionnel
Re : Exécution Formule VBA en deux temps

Ouai ça j'y avais pensé mais là c'est ultra bourrin non ?

Bon j'ai essayé donc ça :

VB:
ResultFiliale.Offset(0, j + 1).Formula = "=MOYENNE('" & Ws.Name & "'!" & ResultSem1.Offset(0, j).Address & ":'" & Ws.Name & "'!" & ResultSem2.Offset(0, j).Address & ")"
                                                    ResultFiliale.Offset(0, j + 1).Select
                                                    SendKeys ("{F2}")
                                                    SendKeys ("{ENTER}")
                                                    ResultFiliale.Offset(1, j + 1).Formula = "=MOYENNE('" & Ws.Name & "'!" & ResultSem1.Offset(0, j + 8).Address & ":'" & Ws.Name & "'!" & ResultSem2.Offset(0, j + 8).Address & ")"
                                                    ResultFiliale.Offset(1, j + 1).Select
                                                    SendKeys ("{F2}")
                                                    SendKeys ("{ENTER}")

Mais ça fait une boucle sur des 1000 lignes (incompréhensibles)
Et ça ne me renvoie que la dernière valeur correcte les autres restent en #VALEUR!....

J'adore c'est bourrin comme quand je joue au rugby.... Thanks JNP !
 

Compress

XLDnaute Occasionnel
Re : Exécution Formule VBA en deux temps

Bon j'ai trouvé la solution qui était relativement évidente même si je n'ai pas bien compris le distingo entre Formula et FormulaLocal.

En gros, pour que ça fonctionne, voici le code que j'ai utilisé :

VB:
For j = 1 To 8
                                                    ResultFiliale.Offset(0, j + 1).FormulaLocal = "=MOYENNE('" & Ws.Name & "'!" & ResultSem1.Offset(0, j).Address & ":'" & Ws.Name & "'!" & ResultSem2.Offset(0, j).Address & ")"
                                                    ResultFiliale.Offset(1, j + 1).FormulaLocal = "=MOYENNE('" & Ws.Name & "'!" & ResultSem1.Offset(0, j + 8).Address & ":'" & Ws.Name & "'!" & ResultSem2.Offset(0, j + 8).Address & ")"
                                                  Next

Merci pour ton aide JNP. (tu as égayé ma journée avec la méthode bourrin)
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : [Résolu] Exécution Formule VBA en deux temps

Bonjour à tous
Code:
[COLOR="DarkSlateGray"][B]ResultFiliale.Offset(0, j + 1).Formula = "=MOYENNE('" & Ws.Name & "'!" & ResultSem1.Offset(0, j).Address & ":'" & Ws.Name & "'!" & ResultSem2.Offset(0, j).Address & ")"
ResultFiliale.Offset(0, j + 1).Select
SendKeys ("{F2}")
SendKeys ("{ENTER}")
ResultFiliale.Offset(1, j + 1).Formula = "=MOYENNE('" & Ws.Name & "'!" & ResultSem1.Offset(0, j + 8).Address & ":'" & Ws.Name & "'!" & ResultSem2.Offset(0, j + 8).Address & ")"
ResultFiliale.Offset(1, j + 1).Select
SendKeys ("{F2}")
SendKeys ("{ENTER}")[/B][/COLOR]
Une bonne rigolade de temps à autre ne peut pas faire de mal !

Code:
[COLOR="DarkSlateGray"][B]ResultFiliale.Offset(0, j + 1).Formula = "=AVERAGE('" & Ws.Name & "'!" & ResultSem1.Offset(0, j).Address & ":'" & Ws.Name & "'!" & ResultSem2.Offset(0, j).Address & ")"
ResultFiliale.Offset(1, j + 1).Formula = "=AVERAGE('" & Ws.Name & "'!" & ResultSem1.Offset(0, j + 8).Address & ":'" & Ws.Name & "'!" & ResultSem2.Offset(0, j + 8).Address & ")"[/B][/COLOR]
(C'est moins rigolo...)​
Bonne journée !

ROGER2327
#4382


Vendredi 20 Haha 138 (Strangulation de Bosse-de-Nage, ST)
4 Brumaire An CCXIX
2010-W43-1T10:05:01Z
 

Discussions similaires

Réponses
7
Affichages
361

Statistiques des forums

Discussions
312 536
Messages
2 089 390
Membres
104 156
dernier inscrit
Mer