IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Réalisation d'un sous total par code sur une liste [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Par défaut Réalisation d'un sous total par code sur une liste
    Bonjour,

    J'aimerais réussir à faire un sous-total par code article sur une liste qui comporte énormement de code.
    Bien entendu j'ai au préalable trié les données par code.
    J'ai réalisé cette macro qui me permet d'obtenir un sous-total seulement comme j'insère une ligne juste après la dernière ligne de code trouvé afin de faire le sous total, je me retrouve avec une boucle for... next qui s'arrete à la derniere ligne avant de réaliser des insertions.
    Admettons j'ai une liste 100 lignes comportant 5 codes, ça me fera donc 5 ligne à insérer (voir 4 ) pour chaque sous total. Or la fin de boucle s'arretra à la derniere ligne initiale soit à la 100 ème et non à la 104 ème.
    J'ai pourtant dis que je souhaitais ajouter 1 à la variable de fin à chaque fois qu'il insère uen ligne mais ça ne change rien.

    Pouvez vous m'aider, merci bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Sub sstoto()
     
    Dim PAT As Object
    Set PAT = Sheets("Plan appro total")
     
    Dim codearticle
    derniereligne = PAT.Range("A3").End(xlDown).Row
    z = 4
     
    For z = 4 To derniereligne Step 1
     
            codearticle = PAT.Cells(z, 2)
     
            If codearticle <> PAT.Cells(z + 1, 2) Then
     
                lignesstoto = z + 1
                ptdepart = z - WorksheetFunction.CountIf(PAT.Columns("B:B"), codearticle)
     
                PAT.Rows("" & lignesstoto & "").Insert Shift:=xlDown
                PAT.Cells(lignesstoto, 2) = "Ss-Tt de " & codearticle
                PAT.Cells(lignesstoto, 3) = PAT.Cells(z, 3)
                PAT.Cells(lignesstoto, 4) = WorksheetFunction.SumIf(PAT.Columns("B:B"), codearticle, PAT.Columns("D:D"))
                PAT.Cells(lignesstoto, 7) = PAT.Cells(z, 7)
                PAT.Cells(lignesstoto, 8) = PAT.Cells(z, 8)
     
    'recherhe si le produit est en rupture et renseigne la ligne ss total si c'est le cas
     
                    For x = ptdepart To z Step 1
                        If PAT.Cells(x, 9) = "1 ère Rupture" Then
                        PAT.Cells(lignesstoto, 9) = "Rupture le " & PAT.Cells(x, 1)
                        End If
                    Next
     
                PAT.Cells(lignesstoto, 10) = PAT.Cells(z, 10)
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").WrapText = True
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Font.FontStyle = "Gras"
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Font.ColorIndex = 41
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Borders(xlEdgeTop).LineStyle = xlContinuous
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Borders(xlEdgeTop).Weight = xlThin
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Borders(xlEdgeBottom).LineStyle = xlContinuous
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Borders(xlEdgeBottom).Weight = xlMedium
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Interior.ColorIndex = 24
     
                z = z + 1
                derniereligne = derniereligne + 1
           End If
     
    Next
     
    End Sub

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Par défaut
    finalement j'ai trouvé une solution qui me convient.

    J'ai déclaré une valeur de fin = 50000 pour ma boucle afin de ne pas avoir à utiliser une variable

    et j'ai rajouté une condition pour sortir de la boucle si il n'y avait pas de valeur dans la cellule (ce qui signifie la fin de la liste). Pour info voici le code :
    Merci à ceux qui se sont interessé à mon problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Sub sstoto()
     
    Dim PAT As Object
    Set PAT = Sheets("Plan appro total")
     
    Dim codearticle
    derniereligne = PAT.Range("A3").End(xlDown).Row
    z = 4
     
    For z = 4 To 50000 Step 1
     
            codearticle = PAT.Cells(z, 2)
     
            If codearticle <> PAT.Cells(z + 1, 2) Then
     
                lignesstoto = z + 1
                ptdepart = z - WorksheetFunction.CountIf(PAT.Columns("B:B"), codearticle)
     
                PAT.Rows("" & lignesstoto & "").Insert Shift:=xlDown
                PAT.Cells(lignesstoto, 2) = "Ss-Tt du code : " & codearticle
                PAT.Cells(lignesstoto, 3) = PAT.Cells(z, 3)
                PAT.Cells(lignesstoto, 4) = WorksheetFunction.SumIf(PAT.Columns("B:B"), codearticle, PAT.Columns("D:D"))
                PAT.Cells(lignesstoto, 7) = PAT.Cells(z, 7)
                PAT.Cells(lignesstoto, 8) = PAT.Cells(z, 8)
                PAT.Cells(lignesstoto, 10) = PAT.Cells(z, 10)
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").WrapText = True
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Font.FontStyle = "Gras"
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Font.ColorIndex = 41
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Borders(xlEdgeTop).LineStyle = xlContinuous
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Borders(xlEdgeTop).Weight = xlThin
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Borders(xlEdgeBottom).LineStyle = xlContinuous
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Borders(xlEdgeBottom).Weight = xlMedium
                PAT.Range("A" & lignesstoto & ":J" & lignesstoto & "").Interior.ColorIndex = 24
     
    'recherhe si le produit est en rupture et renseigne la ligne ss total si c'est le cas
     
                    For x = ptdepart To z Step 1
                        If PAT.Cells(x, 9) = "1 ère Rupture" Then
                        PAT.Cells(lignesstoto, 9) = "Rupture le " & PAT.Cells(x, 1)
                        End If
                    Next
     
                z = z + 1
            Else
            'condition pour sortir de la boucle lorsqu'il n'y a plus de valeur
                    If PAT.Cells(z, 1) = "" Then
                        Exit For
                    End If
            End If
     
    Next
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2010] Supprimer les Actions par défaut sur une liste externe
    Par mrkinfo dans le forum SharePoint
    Réponses: 2
    Dernier message: 21/03/2013, 15h36
  2. Tri par insertion sur une liste chainé simple.
    Par loula427 dans le forum Débuter
    Réponses: 6
    Dernier message: 21/03/2011, 14h54
  3. [AC-2007] Ouverture sous-formulaire se basant sur une liste de choix
    Par cookiedelu dans le forum IHM
    Réponses: 0
    Dernier message: 01/12/2009, 21h17
  4. valeur par defaut sur une liste déroulante
    Par FCL31 dans le forum IHM
    Réponses: 2
    Dernier message: 28/01/2008, 13h33
  5. [SOUS.TOTAL][NB.SI] Sur une plage.
    Par aityahia dans le forum Excel
    Réponses: 4
    Dernier message: 04/06/2007, 13h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo