Prolongement de formules (VBA)

Arnaud dit Citro

XLDnaute Junior
Bonjour à tous,

A partir du code que m'ont donné Staple1600 et Frangy (que je remercie de nouveau) sur ce post : https://www.excel-downloads.com/thr...-selon-criteres-macro.20031363/#post-20231191 et que j'ai adapté à plusieurs feuilles sans aucun problème, j'ai créé ce code :

VB:
With Sheets("Statistiques")
        .Rows("6:6").Insert shift:=xlDown
        ColSta = Application.Max(.Cells(6, Columns.Count).End(xlToLeft).Column, 1) + 1
        .Cells(6, ColSta).Formula = "=BdD_Vendeur!A" & Fve
        If ColSta = 2 Then
            .Cells(6, ColSta + 1).Formula = "=IF(B6=Devis!Y$7,COUNTIFS(Devis!Y$8:Devis!Y$1000,1),0)"
        Else
            .Cells(6, 2).Resize(1, 2).Copy .Cells(6, ColSta)
            .Cells(6, 2).Resize(1, 2).Copy .Cells(6, ColSta + 1)
            Application.CutCopyMode = False
        End If
    End With

Ce code fonctionne parfaitement, B6 devient bien B7 à la création du second vendeur et B8 au suivant. Mais (parce que forcément il y a un mais), il faudrait qu'à la création du second vendeur et des suivants, la formule concernant la feuille "Devis" avance de 4 colonnes, c'est à dire :
Code:
"=IF(B6=Devis!Y$7,COUNTIFS(Devis!Y$8:Devis!Y$1000,1),0)"
deviendrait
Code:
"=IF(B7=Devis!ACY$7,COUNTIFS(Devis!AC$8:Devis!AC$1000,1),0)"
pour le second vendeur et
Code:
"=IF(B8=Devis!AG$7,COUNTIFS(Devis!AG$8:Devis!AG$1000,1),0)"
pour le suivant et ainsi de suite.
Si toutefois cela est possible.

Bon dimanche à tous

Arnaud
 

Arnaud dit Citro

XLDnaute Junior
Bonjour à tous,

J'aimerais quand même comprendre pourquoi 13 correspond à la colonne Y alors que ce devrait être 25...

VB:
With Sheets("Statistiques")
        .Rows("6:6").Insert shift:=xlDown
        ColSta = Application.Max(.Cells(6, Columns.Count).End(xlToLeft).Column, 1) + 1
        .Cells(6, ColSta).Formula = "=BdD_Vendeur!A" & Fve
        CX = "C" & 4 * (Fve - 1) + 13
        If ColSta = 2 Then
            .Cells(6, ColSta + 1).FormulaR1C1 = "=IF(RC2=Devis!R7" & CX & ",COUNTIFS(Devis!R8" & CX & ":Devis!R1000" & CX & ",1),0)"
        Else
            .Cells(6, 2).Resize(1, 2).Copy .Cells(6, ColSta)
            .Cells(6, 2).Resize(1, 2).Copy .Cells(6, ColSta + 1)
            Application.CutCopyMode = False
        End If
    End With

Je joins le fichier très épuré mais qui fonctionne tel quel, le code se trouve dans l'UF1.

Si quelqu'un a une explication, je suis preneur.

Bon dimanche

Arnaud
 

Pièces jointes

  • Test A.xlsm
    920.1 KB · Affichages: 4

Dranreb

XLDnaute Barbatruc
Bonjour
Contrairement à ce que vous disiez Fve n'est pas un numéro d'orde de vendeur mais son numéro de ligne dans la feuille BdD_Vendeur, le n° 1 étant à la ligne 4. Ce serait donc plutôt CX = "C" & 4 * (Fve - 4) + 25 qui donne bien le même résultat.
 

Arnaud dit Citro

XLDnaute Junior
Bonjour Danreb,

Merci de votre réponse. Effectivement, cela fonctionne. Je ne suis pas sur de bien comprendre le pourquoi du comment...

Je pars cet en début d'après midi pour le boulot et je rentre jeudi en soirée (sympatoche le dimanche et les jours fériés lol), je verrai cela vendredi, je vais avoir du temps et beaucoup de questions pour bien comprendre.

Cordialement

Arnaud
 

Arnaud dit Citro

XLDnaute Junior
Bonjour à tous en ce vendredi ensoleillé,

Danreb, encore merci de votre réponse, mais je vais avoir besoin de quelques explications (j'aime bien comprendre ce que je fais).

Je pense que CX est une variable, qu'est ce que "C"?, le "& 4" est là pour le faire avancer de 4 cases?
Du fait que le vendeur se trouve à la ligne 4 (et suivante) de la feuille BdD_Vendeur, vous faites (Fve - 4) pour faire démarrer la recherche à la ligne 4, c'est bien cela?
+ 25 correspond à la colonne Y, ça j'avais compris (ouf :D ), mais alors pourquoi (Fve - 1) + 13 correspond lui aussi à Y?

Bonne journée

Arnaud
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Oui, une variable String. Le "C" est la lettre qui annonce, relative entre "["…"]" ou sinon absolue, la colonne dans une référence R1C1. Le "&" est pour y concaténer cet référence, absolue ici, qui vaut 4 * (Fve - 4) + 25
Oui c'est cela.
Vous avez vraimennt du mal à comprendre pourquoi votre expression empirique donnait le même résultat ?
25 - 13 = 12 soit 4 * 3 soit 4 * ((Fve - 1) - (Fve - 4))
 

Arnaud dit Citro

XLDnaute Junior
Merci pour vos explications, cela m'aide un peu, c'est quand même très technique tout cela.

Si j'ai bien compris, dans notre formule CX = "C" & 4 * (Fve - 4) + 25 , "C" est la colonne Y dans R1C1 car on a mis + 25, le & 4 sert à faire la recherche toutes les 4 colonnes en le comparant à (Fve - 4) qui est la colonne A à partir de la ligne 4 de la feuille BdD_Vendeur, j'ai bien compris?

Je suis en train d'essayer de la reproduire dans une autre formule différente, mais je coince sur R1C1, je vais insister, je suis têtu :D , j'ai pourtant réussi dans à la reproduire dans d'autres mais là ça coince.

Cordialement

Arnaud
 

Statistiques des forums

Discussions
312 271
Messages
2 086 687
Membres
103 371
dernier inscrit
jade.gerbe14