Formule évolutive VBA sur plusieurs pages Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'710
Appréciations reçues : 446
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 6 juillet 2018, 15:56

Et voici le genre que je n'ai pas apprécié non plus
Je suis un brusque parfois, faut s'y faire... ;-)

Termine ta version d'abord, c'est comme ça qu'on apprend le plus.

Voici comment je voyais le truc :
    Dim f As String, nbPrg As Long, pl As Range, c As Range
    f = "=SOMMEPROD(TRANSPOSE(DECALER($F2;;;;NB(Liste!$F:$F)))*DECALER(Liste!$F$2;;;NB(Liste!$F:$F)))"
    nbPrg = Sheets("Liste").Cells(Rows.Count, "F").End(xlUp).Row - 1
    With Sheets("STS en cours")
        Set pl = .[F2].Offset(, nbPrg).Resize(.Cells(Rows.Count, "B").End(xlUp).Row - 1)
    End With
    pl.FormulaLocal = f ' validation 'normale' pour avoir les réf correctes sur toute la plage
    For Each c In pl
        c.FormulaArray = c.Formula ' revalidation en matricielle vu que FormulaA1Array n'existe pas
    Next c
End Sub
Vite fait et pas vraiment testé, il parait qu'il y a un truc à la télé à 16h. Tu auras peut-être des adaptions à faire mais la philosophie de la méthode y est.
eric
1 membre du forum aime ce message.
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
g
grexcel
Membre habitué
Membre habitué
Messages : 85
Appréciations reçues : 4
Inscrit le : 18 octobre 2017
Version d'Excel : 2016

Message par grexcel » 6 juillet 2018, 15:59

Bon, je ne regarde pas de suite pour pas me laisser influencer mais merci!

ça a l'air top!

Je tiens peut être un truc aussi mais c'est bidouillé...
g
grexcel
Membre habitué
Membre habitué
Messages : 85
Appréciations reçues : 4
Inscrit le : 18 octobre 2017
Version d'Excel : 2016

Message par grexcel » 9 juillet 2018, 12:01

Salut eriic!

C'est une victoire, c'est tout bon!
J'ai fait une première technique pas mal mais lourde en utilisant le R1C1 avec pour numéro une variable qui prenait la dernière colonne du tableau -2. J'étais ainsi sur de toujours tomber sur l'ensemble des références de programme. Ensuite, j'utilisais formulaArray et le tour était joué.

Puis après, j'ai testé la tienne que j'ai conservée.
Je vous met ici le cas pour la page de "VAC en COURS" (pour ceux qui suivraient le dossier). last_liste correspond au nombre de ligne de programme sur la page "Liste" -1.
f = "=SUMPRODUCT(TRANSPOSE(OFFSET($F2;;;;COUNT(Liste!$F:$F)))*OFFSET(Liste!$F$2;;;COUNT(Liste!$F:$F)))"
                        With Sheets("VAC en cours")
                            Set pl1 = .[f2].Offset(, last_liste - 1).Resize(.Cells(Rows.Count, "B").End(xlUp).Row - 1)
                        End With
                            pl1.FormulaLocal = f ' validation 'normale' pour avoir les réf correctes sur toute la plage
                        For Each c In pl1
                            c.FormulaArray = c.Formula ' revalidation en matricielle vu que FormulaA1Array n'existe pas
                        Next c
En tout cas, je n'aurai JAMAIS eu cette idée! Mais je suis super content pour ces nouvelles fonctions! R1C1 c'est super pratique! Puis ton astuce OFFSET into RESIZE pour venir y mettre la formule à coup sur dans la colonne voulue... Chapeau!

Bref, une première expérience matricielle intéressante!
Modifié en dernier par grexcel le 10 juillet 2018, 07:49, modifié 1 fois.
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'710
Appréciations reçues : 446
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 9 juillet 2018, 18:28

Bonjour,

j'ai allégé mes posts aussi ;-)
Bonne continuation et bon apprentissage.
eric

PS :
Si tu ne connais pas, un utilitaire qui va t'aider à indenter correctement. Avoir les boucles bien alignées ça aide bien au débogage :
http://www.oaltd.co.uk/Indenter/
Est toujours valide et ne s'arrête pas à 2003 contrairement à ce qui est indiqué.
1 membre du forum aime ce message.
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message