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 :

aide pour faire une macro ou dev VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Avril 2016
    Messages : 5
    Par défaut aide pour faire une macro ou dev VBA
    Bonjour le forum!

    je manipule Excel depuis des années, j'utilise les formules en tâtonnant... , mais là j'arrive à la limite de ma débrouillardise.. et je n'arrive pas à trouver le moyen de faire les actions suivantes:

    Dans un tableur contenant plusieurs onglets:
    Un onglet "données" contient des données que je reçois de mon distributeur, et les autres onglets "extraits client 1" , "extraits client 2 etc .... "viennent chercher des éléments dans l'onglet "données" en fonction du nom des mes clients, afin d'obtenir une synthèse (une somme de chiffres) de ce que chaque client a généré (produits vendus, retours, provisions, total du CA généré).

    Je commence à avoir pas mal de clients et ça n'est plus très lisible d'avoir un onglet différent par client, j'aimerais mettre en place un process plus élaboré et dynamique.


    Mon onglet "données" est assez simple :

    Nom : Capture.JPG
Affichages : 349
Taille : 86,9 Ko

    Mes onglets "Extrait Client 1 , 2 etc ..." sont identiques sauf qu'ils ne concernent qu'un seul client, ses ventes , ses retours, son total etc ...


    Pour améliorer mon process d'extraction pour chaque client, j'aurais souhaité sélectionner a l'aide d'un menu déroulant pour chaque colonne une donnée différente contenue dans la colonne :

    • pour la colonne AN, pouvoir choisir l'année (2019 , 2018 )
    • pour la colonne SEMESTRE , pouvoir choisir le semestre (2018-S1, 2018-S2, 2019-S1 )
    • Pour la colonne MOIS, choisir le mois (2018-01, 2018-02, 2018-03 ...etc ..etc ..)
    • idem pour les colonnes CODE BARRE et CLIENT



    une fois cette sélection faite, j'aurais besoin que la macro fasse la somme des données contenues dans les colonnes VENTES, RETOURS, S TOTAL1, PROVISION, TOTAL DEF, des lignes concernées par la sélection.

    ... rien que ça ;o)

    je ne me rends absolument pas compte de la complexité de programmer une macro de la sorte.
    J'espère que mes explications sont compréhensible, et s'il faut préciser je suis là

    Si quelqu'un pouvait m'aider à y voir plus clair sur la méthode à tenir pour réaliser de genre de chose.
    Merci par avance.

    Thomas

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Tomtom91 Voir le message
    Un onglet "données" contient des données que je reçois de mon distributeur, et les autres onglets "extraits client 1" , "extraits client 2 etc .... "viennent chercher des éléments dans l'onglet "données" en fonction du nom des mes clients, afin d'obtenir une synthèse (une somme de chiffres) de ce que chaque client a généré (produits vendus, retours, provisions, total du CA généré).

    Je commence à avoir pas mal de clients et ça n'est plus très lisible d'avoir un onglet différent par client, j'aimerais mettre en place un process plus élaboré et dynamique.
    Pourquoi ne pas, tout simplement, mettre un filtre sur tes données ?
    Ca prend 2 s à mettre en place et, à priori, ça répond à ton besoin.
    Et en plus, tu gardes la maitrise du processus, ce qui ne serait pas le cas si tu faisais faire une macro VBA à quelqu'un d'autre.

    Au pire, si tu veux vraiment que tes donnée client soient dans un autre onglet, tu peux utiliser un filtre avancé.

    Mes onglets "Extrait Client 1 , 2 etc ..." sont identiques sauf qu'ils ne concernent qu'un seul client, ses ventes , ses retours, son total etc ...
    Raison de plus pour la solution Filtre.

    • pour la colonne AN, pouvoir choisir l'année (2019 , 2018 )
    • pour la colonne SEMESTRE , pouvoir choisir le semestre (2018-S1, 2018-S2, 2019-S1 )
    • Pour la colonne MOIS, choisir le mois (2018-01, 2018-02, 2018-03 ...etc ..etc ..)
    • idem pour les colonnes CODE BARRE et CLIENT
    C'est exactement ce que fait un filtre.

    une fois cette sélection faite, j'aurais besoin que la macro fasse la somme des données contenues dans les colonnes VENTES, RETOURS, S TOTAL1, PROVISION, TOTAL DEF, des lignes concernées par la sélection.
    Pour faire des somme sans tenir compte des données filtrée, utilise les fonctions de base de données comme BDSOMME.
    Lire ça : https://support.office.com/fr-FR/art...3-529a322be41b

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour à tous,

    J'arrive encore trop tard, mais bon je mets quand même, histoire de ne pas avoir travaillé pour rien.
    le code:
    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
    Sub Creation_Listes()
        Dim i As Long, DerLig As Long, B
        Dim C As Range
     
        Application.ScreenUpdating = False
        Range("O1:S10000").ClearContents
        For i = 2 To 6
            Set B = CreateObject("Scripting.Dictionary")
            For Each C In Range(Cells(5, i), Cells(Cells(10000, i).End(xlUp).Row, i))
                If Not B.exists(C.Text) And C.Text <> "" Then B(C.Text) = ""
            Next C
            If B.Count > 0 Then Cells(1, i + 13).Resize(B.Count) = Application.Transpose(B.keys)
     
            Range(Cells(1, i + 13), Cells(B.Count, i + 13)).Select
            ActiveWorkbook.Names.Add Name:="Liste" & i, RefersToR1C1:="=Feuil1!R1C" & i + 13 & ":R" & B.Count & "C" & i + 13
     
            Cells(2, i).Select
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=" & "Liste" & i
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With
        Next i
     
        'Formules "Total"
        DerLig = [B10000].End(xlUp).Row
        Range("G2:K2").FormulaR1C1 = "=SUMPRODUCT((R5C2:R" & DerLig & "C2=R2C2)*(R5C3:R" & DerLig & "C3=R2C3)*(R5C4:R" & DerLig & "C4=R2C4)*(R5C5:R" & DerLig & "C5=R2C5)*(R5C6:R" & DerLig & "C6=R2C6),(R5C:R" & DerLig & "C))"
     
        Set B = Nothing
    End Sub
    le fichier
    Pièce jointe 501202

    Cdlt

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous, Salut Menhir,

    Arthuro,

    Dans ton code, le dictionnaire B est déclaré - implicitement - en Variant.
    Personnellement, en activant la référence Scripting Run Time, je pratique cette déclaration en Scripting.Dictionary.

    Au demeurant, sur le Forum Excel VBA, j'ai eu plusieurs échanges à ce sujet, de mémoire avec l'ami mercatog le grand, et, plus récemment, avec Joe Levrai dans cette discussion.

  5. #5
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour à tous

    J'ai beau chercher je vois pas ce qui t'empèche de faire un TCD à partir de ton listing principal.

    tout ce que tu as cité se fait au sein d'un TCD :
    • pour la colonne AN, pouvoir choisir l'année (2019 , 2018 )
    • pour la colonne SEMESTRE , pouvoir choisir le semestre (2018-S1, 2018-S2, 2019-S1 )
    • Pour la colonne MOIS, choisir le mois (2018-01, 2018-02, 2018-03 ...etc ..etc ..)
    • idem pour les colonnes CODE BARRE et CLIENT


    une fois cette sélection faite, j'aurais besoin que la macro fasse la somme des données contenues dans les colonnes VENTES, RETOURS, S TOTAL1, PROVISION, TOTAL DEF, des lignes concernées par la sélection.
    Qu'est-ce que tu entends par : "Je commence à avoir pas mal de clients et ça n'est plus très lisible d'avoir un onglet différent par client"

    aujourd'hui cela fait combien de client ?

    Parce que les : "Je commence à avoir pas mal de ... cela reste vague

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Avril 2016
    Messages : 5
    Par défaut
    Bonjour à tous,

    et un immense merci d'avoir pris la peine de m'aider ...et aussi vite ... vous êtes au top !!
    je vais tester tout ça et suivre aussi vos recommandations.

    @igloobel = Pas mal de client ça fait une quinzaine là ou je pensais n'en avoir que 5 ou 6 max au départ. Et puis chaque client peut avoir plusieurs références ce qui complique encore la donne car je n'avais pas prévu ça au départ...

    Je reviens ici vous faire par de mes avancées.

    Cdlt

    Thomas

Discussions similaires

  1. Besoin d'aide pour faire une macro qui s'exécute sur le bon fichier
    Par thibaudgreens dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 10/08/2018, 17h55
  2. [XL-2003] Besoin d'aide pour faire une boucle loop sur une macro
    Par spacesheep dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/04/2010, 11h42
  3. Aide pour complèter une macro VBA
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 24/11/2008, 13h07
  4. Réponses: 22
    Dernier message: 20/05/2008, 10h25
  5. [VBA-E]besoin d'aide pour faire une boucle
    Par mikazounette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2006, 14h04

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