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 :

Lettage avec deux conditions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Comptable
    Inscrit en
    Novembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 12
    Par défaut Lettage avec deux conditions
    Bonsoir,

    Merci par avance de l'aide que vous pourrez m'apporter sur ce sujet de réflexion VBA .


    J’aurais besoin d' une macro qui puisse me lettrer des écritures et identifier celles qui se lettrent.

    Pour cela je souhaite pour chaque ligne vérifier s'il existe une ligne ou plusieurs lignes Montant en - avec Une autre Ligne Montant en + dans la même colonne et leur total soit égal à 0. A condition que les deux lignes doivent avoir le même OP(Colonne E) ou/et le même Code FR (Colonne F).

    - Si les écritures lettrées ont le même Code FR et même OP je veut que l'Observation(Colonne J) soit rempli par un indicateur de lettrage (AAA,AAB ,...).
    - Si les écritures lettrées ont l'une des colonnes E ou F différente Soit OP et Code FR différent, je veut que l'Observation (Colonne J) soit rempli par un autre indicateur de lettrage.

    Je mettrais en pièce jointe un extrait de mon fichier et Je vous remercie d'avance pour vs réponses et vs efforts.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par FanSu Voir le message
    Merci par avance de l'aide que vous pourrez m'apporter sur ce sujet de réflexion VBA
    Pourquoi en VBA ?
    Je pense que tu devrais regarder à ce sujet l'aide Microsoft Pour lettrer des écritures comptables

  3. #3
    Membre averti
    Femme Profil pro
    Comptable
    Inscrit en
    Novembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 12
    Par défaut
    Citation Envoyé par anasecu Voir le message
    Bonjour,


    Pourquoi en VBA ?
    Je pense que tu devrais regarder à ce sujet l'aide Microsoft Pour lettrer des écritures comptables
    Je pense que c'est e seul qui me permettra cette action sachant que j'ai des milliers de lignes à lettrées.

  4. #4
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonsoir,
    Citation Envoyé par FanSu Voir le message
    Je pense que c'est e seul qui me permettra cette action sachant que j'ai des milliers de lignes à lettrées.
    Je veux bien que ce soit fait en VBA mais si tu as regardé mon lien Microsoft, cela fait partie des fonctions déjà offertes par excel alors pourquoi le ré-écrire ?

    Je pense qu'avec cette formule dans la colonne observation tu obtiens ton lettrage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(SOMMEPROD(($E$6:$E$13=E6)*($F$6:$F$13=F6)*$D$6:$D$13)=0;"AAA";SOMMEPROD(($E$6:$E$13=E6)*($F$6:$F$13=F6)*$D$6:$D$13))
    il faut bien sûr adapter les plages à celles de ton classeur avec des milliers de lignes.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Femme Profil pro
    Comptable
    Inscrit en
    Novembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 12
    Par défaut
    Bonsoir,

    Oui j'ai essayé avec ta formule et ça a marché, juste que le code va se répéter pour toutes les écritures lettrées.
    N'y a-t-il pas une possibilité de le rendre comme une série (la 1ère écriture aura comme code AAA, la 2 ème AAB, la 3 ème AAC...) ?

    Merci.

  6. #6
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par FanSu Voir le message
    Y a t-il pas une possibilité de le rendre comme une série ( la 1 ère écriture aura comme code AAA, la 2 ème AAB, la 3 ème AAC...) ?
    Je ne suis pas comptable mais quel est l'intérêt d'avoir une série ?

    Dans ce cas, cela est difficilement envisageable en formule et donc je t'ai fait la macro pour l'obtenir :
    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
    Option Explicit
    '-----------------------------------------------------------------------
    Public Sub lettrer()
    '------------------ paramètres à adapter -------------------------------
    Const ldb = 6       ' ligne début tableau
    Const cOP = "E"     ' colonne OP
    Const cFR = "F"     ' colonne FR
    Const cMt = "D"     ' colonne montant
    Const crs = "J"     ' colonne lettrage
    '-----------------------------------------------------------------------
    Dim lig As Long     ' ligne traitée
    Dim dic             ' dictionnaire données
    Dim mof As String   ' mixte OP / FR
    Dim tOP, tFR, tMt   ' tables données
    Dim tdk             ' table clés écritures
    With ActiveSheet    ' feuille >- tables
        lig = .Cells(.Rows.Count, cOP).End(xlUp).Row + 1
        tOP = .Cells(ldb, cOP).Resize(lig - ldb, 1).Value
        tFR = .Cells(ldb, cFR).Resize(lig - ldb, 1).Value
        tMt = .Cells(ldb, cMt).Resize(lig - ldb, 1).Value
        ReDim trs(1 To UBound(tOP))
        Set dic = CreateObject("Scripting.Dictionary")
        dic.RemoveAll
        For lig = 1 To UBound(tOP)  ' agglomérations valeurs
            mof = tOP(lig, 1) & "|" & tFR(lig, 1)
            If dic.Exists(mof) Then
                dic(mof) = dic(mof) + tMt(lig, 1)
            Else
                dic.Add mof, tMt(lig, 1)
            End If
        Next lig
        tdk = dic.keys: ReDim t_l(1 To 4)   ' lettrage
        For lig = 1 To UBound(tdk)
            If dic(tdk(lig)) = 0 Then dic(tdk(lig)) = d_lettre(t_l)
        Next lig
        For lig = 1 To UBound(tOP)          ' affectation lettrage
            mof = tOP(lig, 1) & "|" & tFR(lig, 1): trs(lig) = dic(mof)
        Next lig
        .Cells(ldb, crs).Resize(UBound(trs), 1).Value = Application.Transpose(trs)
    End With
    End Sub
    '-----------------------------------------------------------------------
    Public Function d_lettre(tbl)   ' génération du lettrage
    Dim idx As Integer, plu As Integer
        For idx = 1 To UBound(tbl): d_lettre = d_lettre & Chr(tbl(idx) + 65): Next
        plu = 1
        For idx = UBound(tbl) To 1 Step -1
            If tbl(idx) < 25 Then: tbl(idx) = tbl(idx) + plu: Exit For: Else: tbl(idx) = 0
        Next
    End Function
    '-----------------------------------------------------------------------
    Tu peux lancer ton lettrage sur ton classeur joint avec le bouton "Lettrer"
    Le module "Lettrage" peux être ramené dans ton classeur réel en adaptant éventuellement le paramétrage des lignes et colonnes.
    Bons tests et bon dimanche.
    Fichiers attachés Fichiers attachés

  7. #7
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour la forum, sbeh el khir FanSu
    Je comprends pas comment une facture du fournisseur X soit réglée par le fournisseur Y (cas : OP3773/17 facturée au nom du fournisseur 4255 et réglée par fournisseur 1108) !!
    Aussi je crois que tu peux faire simple et tu insère un tableau croisée dynamique avec en ligne le code fournisseur , le code OP, le libellé de l'opération et en valeur les montants et comme ça tu aura ce que tu veux sans VBA . Il suffit d'intéresser au fournisseur ayant un solde différent de zéro
    Bonne Continuation

  8. #8
    Membre averti
    Femme Profil pro
    Comptable
    Inscrit en
    Novembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 12
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    Bonjour la forum, sbeh el khir FanSu
    Je comprends pas comment une facture du fournisseur X soit réglée par le fournisseur Y (cas : OP3773/17 facturée au nom du fournisseur 4255 et réglée par fournisseur 1108) !!
    Aussi je crois que tu peux faire simple et tu insère un tableau croisée dynamique avec en ligne le code fournisseur , le code OP, le libellé de l'opération et en valeur les montants et comme ça tu aura ce que tu veux sans VBA . Il suffit d'intéresser au fournisseur ayant un solde différent de zéro
    Bonne Continuation
    Bonsoir BENNASR,

    Je te remercie tout d'abord pour ton intérêt.

    Pour le cas que tu as évoqué, il s'agit d'une erreur de saisie, la personne qui a enregistré l'écriture elle s'est trompée sur le code FR.
    Certes avec le TCD on peut l'utilisé pour réalisé le lettrage d’ailleurs c'est ce que je fais d’habitude mais je pense qu'avec une requête ça sera plus facile.

    Merci ;).

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

Discussions similaires

  1. Linq - jointure avec deux conditions
    Par boby62423 dans le forum Linq
    Réponses: 1
    Dernier message: 02/04/2009, 09h51
  2. Recherche avec deux conditions et deux boucles?
    Par neiluj26 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/10/2008, 19h49
  3. ADO avec deux conditions WHERE
    Par MuadDib_II dans le forum IHM
    Réponses: 9
    Dernier message: 29/07/2008, 15h42
  4. MINUS avec deux conditions
    Par miketidy dans le forum SQL
    Réponses: 14
    Dernier message: 24/06/2008, 09h57
  5. [VBA-E] Countif avec deux conditions
    Par bonilla dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/09/2007, 15h30

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