Modification code

Hello le forum,

Voila, j'ai une macro bricolé qui me fait un sous-total automatique sur une base.

Je me suis aperçu qu'il y avait une coquille dans le code car le sous total se fait lorsqu'il y a au moins deux lignes identiques qui se suivent. Du coup lorsque j'aurai du avoir un sous total quand il y a une seule valeur à sous totaliser il ne se passe rien.

Genre :

a

a

a

b

c

c

les A et C sont bien sous totalisés mais le B lui il va rester dans le groupement du A.

Quelqu'un s'aurai-t-il m'expliquer comment remédier à cela ?

Dim DL As Long          'déclare la variable DL (Dernière Ligne) pour lancer la macro depuis le bas de la base
Dim I As Long              'déclare la variable I (Incrément) 
Dim Iprec As Long
Dim strNom As String

Range("A1").Select
Selection.CurrentRegion.Select      'sélection et tri sur la colonne des comptes
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
               OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

DL = Cells(Application.Rows.Count, 1).End(xlUp).Row                     'définit la dernière ligne éditée DL de la colonne A

For I = DL To 1 Step -1

   If strNom <> Range("A" & I).Value Then      'Si nom de la ligne <> du nom precedent

      If strNom <> "" Then
         Rows(I + 1).Insert    'insere une ligne

         Range("H" & I + 1).FormulaLocal = "=somme(H" & Iprec + 1 & ":H" & I + 2 & ")"

         Range("A" & I + 1).Value = strNom                              'Ajoute le compte en A

         Rows(Iprec + 1 & ":" & I + 2).Group                            'Regroupe les lignes

         Iprec = I                                                      'mémorise la ligne de début de la prochaine section

      Else

         Iprec = I

      End If

      If I = 1 Then Exit Sub
      strNom = Range("A" & I - 1).Value

   End If

Next

End Sub

Merci d'avance

bonjour,

Pourriez vous donner plusieurs exemples avec les réponses attendues, j'avoue ne pas comprendre ce que vous attendez comme résultats

de plus votre programmation me semble bien compliqué

Bonjour,

Mon ami dirait qu'un TCD simplifierait bien le problème !

A+

Bonjour Galopin, j'ai besoin d'exploiter les données différemment qu'avec un TCD.

gullaud a écrit :

Pourriez vous donner plusieurs exemples avec les réponses attendues, j'avoue ne pas comprendre ce que vous attendez comme résultats

de plus votre programmation me semble bien compliqué

Je vous ai servi un extrait simplifié de la macro car en réalité c'est pas des sous-totaux mais des formules plus complexes que j'insère mais ca aurai pollué la compréhension du code.

En fait j'ai une base de donnée :

COMPTE LIBELLE DATE PIECE JL DEBIT CREDIT SOLDE

j'ai des lignes comptable dans cette base et j'aimerai qu'a chaque changement de compte (colonne A, déja triée) la macro insère automatiquement une ligne de sous total, puis groupe les lignes. Ca fonctionne très bien à présent.

Le problème est qu'actuellement je n'ai pas de ligne qui s'insère lorsque la macro rencontre un compte qu'une seule fois dans la liste.

Je pense qu'il faut modifier le code a ce niveau

If strNom <> Range("A" & I).Value Then      'Si nom de la ligne <> du nom precedent

      If strNom <> "" Then
         Rows(I + 1).Insert    'insere une ligne

Et ajouter une double condition du genre, si le nom de la ligne est <> du nom précédent, et qu'il est aussi <> du nom suivant.

Je ne sais pas du tout comment m'y prendre c'est pourquoi je sollicite votre aide.

j'ai essayé avec

If strNom <> Range("A" & I).Value And strNom <> Range("A" & I + 1) Then

et

If strNom <> Range("A" & I).Value And strNom <> Range("A" & I - 1) Then

Mais ca a juste ralenti le traitement sans résoudre le probleme

j'ai fais un test, en modifiant un compte

comme on peu le voir, il n'y a pas eu de sous total pour ce compte car il n'y avait qu'un mouvement avec ce numéro de compte

teste

j'espère que cela te convient

pour la mise en gras et en couleur, si tu n'en veux pas il suffit de supprimer la ligne call gras

11sous-total.xlsm (23.70 Ko)

Salut,

Merci pour le fichier, je vais tester en grandeur nature sur mon fichier à l'occasion, je n'ai pas eu le temps de retravailler ce code ci d'ou ma réponse tardive, merci en tout cas.

Une question, quel intérêt d'inscrire en public sub et pas juste en sub ?

Public :la procedure est visible de tous les modules et userform

private : la procedure est visible seulemenf dans le module ( ou la userform )ou elle est ecrite


Public :la procedure est visible de tous les modules et userform

private : la procedure est visible seulemenf dans le module ( ou la userform )ou elle est ecrite

Rechercher des sujets similaires à "modification code"