Prolongement de formules (VBA)

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 !

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
 
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

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.
 
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
 
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 😀 ), mais alors pourquoi (Fve - 1) + 13 correspond lui aussi à Y?

Bonne journée

Arnaud
 
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))
 
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 😀 , j'ai pourtant réussi dans à la reproduire dans d'autres mais là ça coince.

Cordialement

Arnaud
 
- 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
177
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
169
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
649
Réponses
5
Affichages
563
Réponses
3
Affichages
548
Retour