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 :

VBA/MACRO : Regrouper la somme des doublons avec conditions


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Comptable
    Inscrit en
    Juin 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Comptable
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 1
    Points : 0
    Points
    0
    Par défaut VBA/MACRO : Regrouper la somme des doublons avec conditions
    Bonjour à tous,

    Pour payer les fournisseurs, j’extrais du logiciel comptable, un tableau excel qui se présente sur 3 colonnes.
    Mon tableau se présente sur 3 colonnes :

    A : Code fournisseur
    B : Nom fournisseur
    C : Echéance
    D : Montant à payer

    Dans « Echéance », 2 cas possible :
    - Soit la date du jour est rentrée (paiement au fournisseur autorisé)
    - Soit la cellule est vide (paiement au fournisseur bloqué)
    Pour info : Je dois justifier à mon hiérarchique pourquoi le paiement est bloqué, c’est la raison pour laquelle je laisse les cellules vides.

    Certain fournisseurs sont référencés sur 2 lignes, voici les raisons :
    1) Il y a des avoirs à déduire de la facture
    2) Une partie des factures sont bloquées alors que d’autres non, donc dans « Echéance », une ligne avec la date du jour, et la 2ème avec la cellule vide.

    Voici mon problème, lorsque j’ai 2 lignes voir 3 dans certains cas, je souhaiterais faire la somme des montants SAUF quand la cellule est vide.

    Voici ce que je fais à ce jour :
    - je filtre sur les cellules non vides de la colonne C (pour ne faire apparaître que les factures à payer),
    - je descends jusqu’à voir le code fournisseur en double
    - je rentre à la main la somme du total à payer
    - je supprime le doublon.
    Ce process est long surtout qu’il y a à peu-près 600 lignes !!!

    J’ai essayé de passer par un tableau croisé dynamique, puis faire apparaître les doublons avec une formule…. Mais je souhaiterais gagner du temps en créant une macro qui me permette d’avoir mon tableau final en un seul clic.

    Je compte sur vous pour m’aider !!!

    Merci,

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Le code suivant utilise une collection qui constitue une liste sans doublon des codes fournisseurs.
    Cette collection permet ensuite de faire un balayage de toutes les lignes de la feuille afin d’effectuer le cumul des montants pour chaque fournisseur en laissant de coté les lignes pour lesquelles la date d’échéance n’est pas renseignée. Chaque doublon est alors supprimé.
    Au final, il doit te rester pour chaque fournisseur une seule ligne avec l’échéance renseignée (sous réserve qu’il y en ait au moins une) et toutes les autres lignes ayant une échéance non renseignée.

    J’ai supposé que la première ligne est une ligne d’en-têtes avec les 4 libellés et que la feuille a le nom Feuil1. A toi d’adapter le code si besoin.
    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
    55
    56
    57
    58
    Option Explicit
    Sub Test()
    Dim Cel As Range, Plage As Range
    Dim Col As Collection
    Dim Cumul As Double
    Dim DerLig As Long, i As Long, j As Long, MémoL As Long
    Dim PremL As Boolean
    Dim CodeFournisseur As String
     
        Application.ScreenUpdating = False
        Set Col = New Collection
        On Error Resume Next
     
        With Worksheets("Feuil1") 'Nom de feuille à adapter
            DerLig = .Range("A" & .Rows.Count).End(xlUp).Row
     
            'Les Codes fournisseurs sont placés dans une collection afin d'obtenir une liste sans doublon
            Set Plage = .Range("A2:A" & DerLig)
            For Each Cel In Plage
                If Cel <> "" Then Col.Add Cel, CStr(Cel)
            Next Cel
            On Error GoTo 0
     
            'On boucle sur chaque élément de la collection que l'on compare aux codes de la liste.
            For i = 1 To Col.Count
            Cumul = 0 'Initialisation du total
            MémoL = 0
            PremL = True
                CodeFournisseur = Col(i)
                'chaque élément de la collection est comparé aux codes de la liste.
                For j = DerLig To 2 Step -1
                    If .Range("A" & j).Value = CodeFournisseur Then
                        'Si la cellule correspondant à la date d'échéance n'est pas vide,
                        If .Range("C" & j).Value <> "" Then
                            'On ajoute le montant au cumul
                            Cumul = Cumul + .Range("D" & j).Value
                            'S'il s'agit de la première ligne fournisseur, on mémorise le numéro de ligne
                            If PremL Then
                                MémoL = j
                                PremL = False
                            'Sinon, on supprime la ligne (doublon)
                            Else
                                .Rows(j).Delete
                                MémoL = MémoL - 1
                                DerLig = DerLig - 1
                            End If
                        End If
                    End If
                Next j
                'Le cumul est affecté au montant de la ligne fournisseur qui reste
                If MémoL > 0 Then .Range("D" & MémoL) = Cumul
            Next i
        End With
     
        Set Plage = Nothing
        Set Col = Nothing
        Application.ScreenUpdating = True
    End Sub
    Cordialement.

Discussions similaires

  1. [XL-2010] macro copie et colle des lignes avec condition de cellule
    Par olive72 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/01/2015, 16h34
  2. [MYSQL 5.5] Liste des doublons avec conditions particulières
    Par flashguitou dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/04/2014, 10h01
  3. rajouter des doublons avec une macro dans une colonne
    Par Banel dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/08/2008, 23h58
  4. [VBA-E] Suppression des colonnes avec condition
    Par desdenova dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2007, 13h39
  5. Réponses: 13
    Dernier message: 12/01/2006, 10h45

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