Chercher une ligne

Bonjour à tous,

Je suis en train de développer une feuille de calcul avec des sous-totaux automatique.

Pour cela je dois créer une hiérarchisation des lignes en fonction du nombre de . ou de , contenu dans le repère de la ligne (colonne B)

Ex :

"X" = Titre de niveau 1

"X.X" ou "X,X" = Titre de niveau 2

"X.X.X"ou "X.X.X" = Titre de niveau 3

" " = ligne de calcul.

Dans le prix total (colonne H) il est fait :

Soit, le prix unitaire * la quantité, si c'est une ligne de calcul,

Soit la somme des prix calculé jusqu'au titre du même niveau ou supérieur, si c'est un titre

Actuellement je le fait par une formule (hyper longue) et de nombreuses (trop nombreuses) mises en forme conditionnelles.

Mon but est de remplacer tout ça par une macro, mais mon problème c'est que je ne sais pas définir qu'une ligne titre est une ligne titre.

Pour faire simple Comment faire pour trouver la fin de la plage de cellule à additionner ?

Voilà j'espère être claire dans ma demande ?

avec le fichier c'est mieux...

Merci pour vos réponses

25dpgf.xlsx (134.51 Ko)

Bonjour,

une proposition via une macro

Sub sumlevel()
Dim ctr(5)
maxniveau = 3
Set ws = Worksheets("DPGF")
dl = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
For i = dl To 7 Step -1
k = ws.Cells(i, 1)
Select Case k
Case "0"
 For j = 1 To maxniveau
   ctr(j) = ctr(j) + ws.Cells(i, 8)
 Next j
Case "3", "2", "1"
 ws.Cells(i, 8) = ctr(k)
 ctr(k) = 0
End Select
Next i
Set ws = Nothing
End Sub

merci pour t'as réponse je me plonge dessus pour approfondir et l'adapter dès que je peux.

bonsoir,

le code avec quelques commentaires

Sub sumlevel()
'compteur pour chaque niveau max 5 niveaux 
Dim ctr(5)
' nombre de niveaux dans le document
maxniveau = 3
' on travaille sur la feuille DPGF
Set ws = Worksheets("DPGF")
' dl est dernière ligne en colonne A
dl = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
on parcourt toutes les lignes à rebours

For i = dl To 7 Step -1
'k= niveau trouvé en colonne A
k = ws.Cells(i, 1)
Select Case k
' si le niveau est 0
Case "0"
 ' on ajoute le total trouvé en colonne 8 à tous les compteurs de niveaux
 For j = 1 To maxniveau
   ctr(j) = ctr(j) + ws.Cells(i, 8)
 Next j
' dans le cas d'une rupture
Case "3", "2", "1"
' on copie le compteur du niveau correspondant en colonne 8
 ws.Cells(i, 8) = ctr(k)
 'on remet le compteur de ce niveau à 0
 ctr(k) = 0
End Select
Next i
Set ws = Nothing
End Sub

Bonjour,

ce code marche bien mais ça fait pas ce que je veux,

j'aimerais aue ça écrive une formule du type :

=SOMME.SI(A24:A41;0;H24:H41)

et non juste le résultat.

je sais je suis pénible mais c'est parce que le fichier va être rempli par la suite sans utiliser de macro.

Rechercher des sujets similaires à "chercher ligne"