Interminable, Si ou Select case et Offset

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

Michel_ja

XLDnaute Occasionnel
Bonjour,
je cherche à calculer une somme de lignes et des % (/ à cette somme) en fonction du contenu de certaines cellules.
J'ai joint un fichier qui illustre mon besoin. J'aurai au maximum 5 carrosseries de voiture donc la fonction si ou select cas n'a pas besoin de s'étendre plus, je commence par cette situation et vais décroissant.
Dans mon fichier si la cellule B1 = B2 = B3 alors j'aimerais le total de M10+M11+M13 en G10 et leur % respectif (M10/G10) en H13.

J'espère que mon cas est assez claire. Merci d'avance pour votre aide.
J'ai commencé la macro par le code si bas mais je suis perdu déjà car je n'arrive pas à calculer avec des offset...

Sub Macro1()
Dim compteur As Long
Dim i As Long 'colonnes
Dim j As Long 'lignes
Dim SommeModel As Long

Range("B10").Select
Range(Selection, Selection.End(xlDown)).Select
compteur = Selection.End(xlDown).Row

For j = 10 To compteur
If Cells(j, 2).Text = Cells(j, 2).Offset(1, 0).Text = Cells(j, 2).Offset(2, 0).Text = Cells(j, 2).Offset(3, 0).Text = Cells(j, 2).Offset(4, 4).Text Then
Cells(j, 7).Select
ActiveCell.FormulaR1C1 = "=SUM(Cells(j, 13), Cells(j, 13).Offset(1, 0), Cells(j, 13).Offset(2, 0) ,Cells(j, 13).Offset(3, 0), Cells(j, 13).Offset(4, 0))"
ActiveCell.Value = SommeModel
Cells(j, 8).Select
ActiveCell.FormulaR1C1 = "Cells(j, 13)/SommeModel"
Selection.NumberFormat = "0%"
Cells(j, 8).Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "Cells(j, 13).offset(1, 0) / SommeModel"
 
Re : Interminable, Si ou Select case et Offset

bonjour Michel

essaye ce code

Sub Macro1()
Dim Cel As Range, Rng As Range
Dim NbM As Long 'nbre de modèle
Dim j As Long 'lignes
Set Rng = Range("B10:B" & Range("B10").End(xlDown).Row)
NbM = Application.CountIf(Rng, " =" & Range("B10").Text)
j = 10
For Each Cel In Rng
If Cel.Row = j Then
NbM = Application.CountIf(Rng, "=" & Cel)
'If Cells(j, 2).Text = Cells(j, 2).Offset(1, 0).Text = Cells(j, 2).Offset(2, 0).Text = Cells(j, 2).Offset(3, 0).Text = Cells(j, 2).Offset(4, 4).Text Then
Cells(j, 7).Formula = "=SUM(M" & j & ":M" & (j + NbM) - 1 & ")"
Cells(j, 8).Formula = "=If(G" & j & ">0,M" & j & "/G" & j & ","""")"
Cells(j, 8).NumberFormat = "0%"
j = j + NbM
End If
Next Cel

End Sub

à bientôt
 

Pièces jointes

Re : Interminable, Si ou Select case et Offset

Bonjour les gars et merci pour votre aide. Bebere, ton code est vraiment pas mal seulement lorsqu'il y a un changement de carrosserie pour un même model, par exemple Serie 3 Coupe par rapport à Serie 3 Convertible, il ne me calcule pas son % et ainsi de suite pour la Serie 3 Sedan.
Mais je crois qu'on est pas loin !
Merci encore
 
Re : Interminable, Si ou Select case et Offset

Oups, ça ne fonctionne pas !! En fait, la macro ne fait pas la somme des cellules situées en colonne M en fonction des cellules en colonne B. Par ailleurs elle n'incremente pas dans les formules si bien que le % de la colonne H est toujours égale à la valeur 100% (soit la cellule M / cellule G).
 
Re : Interminable, Si ou Select case et Offset

Salut Bebere,
je ne crois pas qu'il faille concatener en B10 la cellule F10 car sinon il n'y aura jamais 2 cellules identiques! Juste b10 =C10&D10&E10 pour qu'il y ait plusieurs fois le même modèle mais avec des carrosseries différentes. Aussi, dans ton code, comment passer t-on de la ligne j à la ligne J+1 pour calculer le % de (j+1, 8) lorsque nous avons les même modèles dà la suite en colonne B ? exemple calculer le % de H14 / par G13 car B13 = B14.
 
Re : Interminable, Si ou Select case et Offset

je me demande s'il ne faudrai pas introduire 2 nouvelles variables: exemple SumModel = qui serait la somme des volumes des modèles (colonne M) puis par exemple NbM2 qui serait à = NBN. Ainsi on pourrait écrire que
si NbM>1 alors j = j +NbM -NbM2+1 de façon à revenir à la 2ème ligne du même modèle et écrire une formule du type = activecell.offset(RC[5]) / SumModel
Qu'en pensez-vous ?
 
Re : Interminable, Si ou Select case et Offset

Salut Bebere, le code se complique et je ne vois pas à quoi sert la variable MonDico. Le code est presque bon mais il ne calcule pas le % que represente cette carrosserie par rapport à la somme du modèle (que tu as maintenant en colonne A, d'ailleur ça ne me gêne pas que ça reste en colonne A). J'ai modifié le doc et écrit en rouge mon besoin. Je te remercie.
 
Re : Interminable, Si ou Select case et Offset

Bonjour Bebere et autre XLDnaute: j'ai remplacé la colonne G par la colonne A dans le code de Bebere au niveau des 2 formules de divisions et ça FONCTIONNE. 🙂 🙂 🙂 Je suis très content. Je vous remercie tous et tout particulièrement Bebere. Grand bravo !!!

PS: juste pour comprendre un peu mieux le code. Quel est le rôle de la variable MonDico ? et que siginifie CreateObject("Scripting.Dictionary") ?
 
- 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
580
Réponses
3
Affichages
834
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
805
Retour