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 :

Demande d'aide programmation VBA


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 34
    Points
    34
    Par défaut Demande d'aide programmation VBA
    Bonjour à tous,

    Dans le cadre de mon boulot, je dois développer une macro VBA permettant de créer un rapport type à partir de données brutes. L'idée est de récupérer, à partir de données brute issue de la feuilles 1, les valeurs de mes paramètres et de les afficher à la bonne place dans la feuille 2.
    Pour faire simple, sur ma feuille 1 j'ai une liste de données et je voudrais récupérer ces données suivant un critère précis.
    Je ne demande pas un code tout fait car ça ne m'aidera pas à comprendre son fonctionnement sauf s'il est commenté ou que l'on me l'explique mais plus des pistes à explorer.

    Merci par avance de votre aide,

    Quentin

    PS: si je ne suis pas assez clair, je peux fournir un exemple de fichier afin de mieux expliquer mon besoin

  2. #2
    rdp937
    Invité(e)
    Par défaut
    Bonjour,

    Un fichier exemple serait bienvenu

    Cordialement

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 34
    Points
    34
    Par défaut
    Bonjour à tous,

    Afin de compléter ma demande, je vous joins mon fichier exemple.

    L'idée qu'à partir des données fournit par l'utilisateur on filtre le résultat.
    Exemple, si on demande le rapport pour le lot 142 et la charge 10, on affiche, dans la feuille 2, les données relatives à ces paramètres.

    Merci par avance de votre aide
    Fichiers attachés Fichiers attachés

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 34
    Points
    34
    Par défaut
    Vu le peu de réponse que j'ai, je dois mal exprimer ma demande donc je vais essayer de la reformuler plus simplement.
    Je dispose d'un tableau excel à 5colonnes. Dans la première j'ai une date que je n'utilise pas, dans la deuxième j'ai le nom d'un paramètre, dans la troisième, j'ai sa valeur, dans la quatrième et la cinquième j'ai un paramètre que je veux tester.
    La fonction de la macro si je l'écris en français est la suivante:
    ouverture d'une combobox pour demander la valeur du premier paramètre (celui de la cinquième colonne)
    ouverture d'une combobox pour demander la valeur du second paramètre (celui de la quatrième colonne)
    recherche les lignes possédant ces deux paramètres
    extraction des valeurs et selon la donnée situé dans la colonne 2, je la place dans un endroit différent de ma feuille 2.

    J'arrive à créer mes combobox, récupérer ces valeurs mais je n'arrive pas à faire le filtre.

    En espérant avoir été plus clair dans ma demande,

    Je vous souhaite une bonne journée

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 34
    Points
    34
    Par défaut
    Bon j'ai réussi à me dépatouiller un peu. Le seul souci maintenant c'est que mon code ne s'exécute qu'une fois. Je sais pas trop quoi prendre entre un while ou un if. Je ne vois pas trop non plus ou là mettre dans mon code donc si quelqu'un peut m'aider ce serait super sympa.
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    Sub Recherche_charge()
    '
    ' Macro permettant la recherche et l'affichage d'un rapport d'une charge
    '
     
    Dim Var1, var2
    Dim NumLg, comp, dat
    Dim nom_parametre As String, test As String, nom As String
    On Error Resume Next
    Var1 = InputBox(Prompt:="Taper le numéro de lot recherché. ") ' ouverture d'une boite de dialogue demandant le numéro de lot recherché
    Sheets("Feuil2").Range("B1") = Var1 'recopie de la valeur dans la cellule B1
    Cells.Find(What:=(Var1), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder _
    :=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
    With Application.ActiveCell
    NumLg = .Row
    End With
    var2 = InputBox(Prompt:="Taper le numéro de charge recherchée. ") ' ouverture d'une boite de dialogue demandant le numéro de charge recherché
    Sheets("Feuil2").Range("D1") = var2 'recopie de la valeur dans la cellule D1
    comp = Cells(NumLg, 4)
    If comp = var2.Value Then 'test du numéro de charge
    Select Case Cells(NumLg, 2).Value
        Case "poids_polymere_1"
            Sheets("Feuil2").Range("D1") = Cells(NumLg, 3)
     
        Case "poids_polymere_2"
            Sheets("Feuil2").Range("D2") = Cells(NumLg, 3)
     
        Case "poids_polymere_3"
            Sheets("Feuil2").Range("D3") = Cells(NumLg, 3)
     
        Case "poids_polymere_4"
            Sheets("Feuil2").Range("D4") = Cells(NumLg, 3)
     
        Case "poids_polymere_5"
            Sheets("Feuil2").Range("D5") = Cells(NumLg, 3)
     
        Case "poids_produit_1"
            Sheets("Feuil2").Range("D18") = Cells(NumLg, 3)
     
        Case "poids_produit_2"
            Sheets("Feuil2").Range("D19") = Cells(NumLg, 3)
     
        Case "poids_produit_3"
            Sheets("Feuil2").Range("D20") = Cells(NumLg, 3)
     
        Case "poids_sachet"
            Sheets("Feuil2").Range("D21") = Cells(NumLg, 3)
     
        Case "poids_huile_1"
            Sheets("Feuil2").Range("D12") = Cells(NumLg, 3)
     
        Case "poids_huile_2"
            Sheets("Feuil2").Range("D13") = Cells(NumLg, 3)
     
        Case "poids_huile_3"
            Sheets("Feuil2").Range("D14") = Cells(NumLg, 3)
        Case "poids_noir_1"
            Sheets("Feuil2").Range("D8") = Cells(NumLg, 3)
     
        Case "poids_noir_2"
            Sheets("Feuil2").Range("D9") = Cells(NumLg, 3)
     
        Case "poids_noir_3"
            Sheets("Feuil2").Range("D10") = Cells(NumLg, 3)
     
        Case "poids_noir_4"
            Sheets("Feuil2").Range("D11") = Cells(NumLg, 3)
     
        Case "poids_tapis_1"
            Sheets("Feuil2").Range("D15") = Cells(NumLg, 3)
     
        Case "poids_tapis_2"
            Sheets("Feuil2").Range("D16") = Cells(NumLg, 3)
     
        Case "poids_tapis_3"
            Sheets("Feuil2").Range("D17") = Cells(NumLg, 3)
     
        Case "consigne_polymere_1"
             Sheets("Feuil2").Range("B1") = Cells(NumLg, 3)
     
        Case "consigne_polymere_2"
            Sheets("Feuil2").Range("B2") = Cells(NumLg, 3)
     
        Case "consigne_polymere_3"
            Sheets("Feuil2").Range("B3") = Cells(NumLg, 3)
     
        Case "consigne_polymere_4"
            Sheets("Feuil2").Range("B4") = Cells(NumLg, 3)
     
        Case "consigne_polymere_5"
            Sheets("Feuil2").Range("B5") = Cells(NumLg, 3)
     
        Case "consigne_produit_1"
            Sheets("Feuil2").Range("B18") = Cells(NumLg, 3)
     
        Case "consigne_produit_2"
            Sheets("Feuil2").Range("B19") = Cells(NumLg, 3)
     
        Case "consigne_produit_3"
            Sheets("Feuil2").Range("B20") = Cells(NumLg, 3)
     
        Case "consigne_sachet"
            Sheets("Feuil2").Range("B21") = Cells(NumLg, 3)
     
        Case "consigne_huile_1"
            Sheets("Feuil2").Range("B12") = Cells(NumLg, 3)
     
        Case "consigne_huile_2"
            Sheets("Feuil2").Range("B13") = Cells(NumLg, 3)
     
        Case "consigne_huile_3"
            Sheets("Feuil2").Range("B14") = Cells(NumLg, 3)
     
        Case "consigne_noir_1"
            Sheets("Feuil2").Range("B8") = Cells(NumLg, 3)
     
        Case "consigne_noir_2"
            Sheets("Feuil2").Range("B9") = Cells(NumLg, 3)
     
        Case "consigne_noir_3"
            Sheets("Feuil2").Range("B10") = Cells(NumLg, 3)
     
        Case "consigne_noir_4"
            Sheets("Feuil2").Range("B11") = Cells(NumLg, 3)
     
        Case "consigne_tapis_1"
            Sheets("Feuil2").Range("B15") = Cells(NumLg, 3)
     
        Case "consigne_tapis_2"
            Sheets("Feuil2").Range("B16") = Cells(NumLg, 3)
     
        Case "consigne_tapis_3"
            Sheets("Feuil2").Range("B17") = Cells(NumLg, 3)
     
    End Select
    Else
    MsgBox "Aucune donnée pour cette charge"
    End If
    Feuil2.Select 'ouverture de la page 2
    End Sub

  6. #6
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    Bonjour

    Voici un essai pour filtrer tes données et les copier en feuil3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Prise des données et copie en Feuil3
    Sheets("Feuil1").select
    Range("a1").Activate
    Selection.AutoFilter Field:=5, Criteria1:=Var1
    Selection.AutoFilter Field:=4, Criteria1:=var2
    ActiveCell.CurrentRegion.Select
    Selection.Copy
    Sheets("Feuil3").Select
    Range("a3").Select
    ActiveSheet.Paste

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 34
    Points
    34
    Par défaut
    Bonsoir OuestVBA,

    Tout d'abord merci pour ton aide. ça m'aide un peu à avancer ce que tu me propose mais pourrais tu m'expliquer un peu le fonctionnement des fonction utilisée afin que je tente une adaptation à ce que je voudrais faire.

    Merci par avance,

    Quentin

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 34
    Points
    34
    Par défaut
    Bon en fait, grace à ton aide j'ai pas mal avancé. Maintenant je récupère toutes mes données filtrer ( c'est la première étape) mais maintenant il faut que je les mettent en forme donc si quelqu'un a une idée.
    exemple: je voudrais avoir, sur la même ligne, l'intitulé de la consigne de mon paramètre, sa valeur, l'intitulé de mon paramètre puis sa valeur mesurée. En sachant que, grace à l'aide de ouestvba, je récupère toutes ces données dans un tableau mais avec deux colonnes seulement
    en clair, sur ma colonne A j'ai le nom du paramètre et sur la colonne B j'ai sa valeur donc, ce que je voudrais faire c'est que, si le paramètre est une consigne, je le place dans la colonne A et si c'est une donnée, dans la colonne C j'ai 38 paramètres différent donc je pensais utilisé select case.
    Qu'en pensez vous?

    bon en fait, ce que je voudrais faire c'est:
    tant que ma cellule n'est pas vide
    selon cas (test de la valeur de la cellule de la colonne A)

    cas 1 la valeur est consigne_noir_1
    on recopie la valeur de la cellule en B dans la case A3 si elle vide sinon, on insère une ligne et on fait la copie.

    Je ferais sa pour chaque cas donc si un de vous peut me mettre sur la voie ce serait super sympa car je découvre le vb

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 258
    Points : 306
    Points
    306
    Par défaut
    Ta démarche est bonne dans le sens ou tu va chercher l'ensemble des opérations que tu veux réaliser.
    Il te reste à aller au bout.

    Une méthode que je préconise est d'écrire tres exactement en francais ce que tu veux, de façon tres détaillée en pensant bien que l'ordinateur est un gros débile qui ne comprend rien.

    Exemple:

    Pour toutes les lignes de la ligne 1 à la ligne 1800
    Si la case (B, ligne) n'est pas vide
    Si elle vaut Article1
    Si la case (C,ligne) est plus grand que 2 alors
    Copier la case (D,ligne)
    Coller dans la feuille2, cellule 3
    Sinon
    ....

    Il te restera alors plus qu'à traduire en anglais et tu auras le code
    et tu sauras ou placer le if ou le while

    Remarque : Bien indenter pour distinguer visuellement les boucles
    Attention à la méthode select qui a un nombre maxi de choix

  10. #10
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    Bonjour,

    Voici l'explication:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Prise des données et copie en Feuil3
    Sheets("Feuil1").select 'sélectionner feuil1
    Range("a1").Activate 'activer cellule a1
    Selection.AutoFilter Field:=5, Criteria1:=Var1 'activer filtre auto avec Var1
    Selection.AutoFilter Field:=4, Criteria1:=var2 'activer filtre auto avec Var2
    ActiveCell.CurrentRegion.Select 'sélection des cellules avoisinantes
    Selection.Copy 'copier
    Sheets("Feuil3").Select 'sélectionner feuil3
    Range("a3").Select 'activer cellule a3
    ActiveSheet.Paste 'coller
    Je suppose que tu avances bien. J'avoueque je suis parfoir un peu perdu entre tes paramètre, consigne, donnée, valeur, ... Si tu as encore besoin d'un petit coup de main...

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 34
    Points
    34
    Par défaut
    Bonjour COCONUT2,

    Merci pour la méthode.

    A plus

    Bonjour QuestVba,

    Oui grace à toi j'ai beaucoup avancé et j'arrive presque au but. Je suis maintenant sur un bout plus difficile je voudrais tracer le graphique d'un paramètre précis. J'ai ouvert un autre sujet pour cela et on m'aide bien aussi donc j'approche du but.

    Merci encore à toi pour ton aide.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 34
    Points
    34
    Par défaut
    Ayant réussi à faire ce que je voulais, je clos le sujet. Merci à QuestVba et COCONUT2 pour votre aide

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

Discussions similaires

  1. [Toutes versions] Aide programmation VBA
    Par sébastien.R dans le forum Macros et VBA Excel
    Réponses: 28
    Dernier message: 09/05/2011, 03h09
  2. aide programmation vba
    Par arbotch dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 28/05/2009, 16h05
  3. Aide Programmation VBA?
    Par chubak62 dans le forum Excel
    Réponses: 3
    Dernier message: 20/05/2009, 20h41
  4. demande d'aide sur VBA
    Par aralth dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2007, 05h45

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