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 :

Afficher les données d'une table


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Voilà j'ai trois onglets, sur le premier j'ai un bouton qui me permet d'ouvrir une boite de dialogue, le second ma table, et puis le troisième onglet sert à m'afficher les données issue de la table.
    En sélectionnant dans l'onglet 1 un repère via le combox, cela récupère les données dans la table concernant la ligne du repère sélectionnée et copie dans l'onglet n° trois...
    pour illustrer ma requête je glisse un exemple :

    Onglet 1 "boite de dialogue"

    Sélection dans la liste déroulante le repère : A1

    Onglet 2 " table"

    repère.....joint......circlips.....rvomoteur.........verin......Arbre....Alésage
    A1........5647......34544............................4345
    A2........3212....................333434....................................32416
    B4........3212......21232
    C6........1212......18799.......456434...................................21345
    D9........21344.....................................................4353

    Onglet 3 "affichage donnée"

    joint 5647
    circlips 34544
    Verin 4345

    Ci sa peux vous aider à comprendre ma demande
    J'espère que j'ai été assez claire...

  2. #2
    Membre éprouvé Avatar de MlNOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 47
    Par défaut
    Bonjour,

    Je vois bien ce que tu veux faire mais je ne vois pas ou est ton probleme
    Tu n'arrive pas à remplir le 3eme onglet ?
    ou tu ne vois pas comment ecrire une macro pour le faire ?

    Cordialement.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut Afficher les données d'une table
    Bonjour,
    Non je vois pas comment écrire la macro qui prend en compte les données de la colonne (nom des pièces de rechanges) plus ceux de la ligne du repère.

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Si tu n'en as pas un million, les recherchesV feront l'affaire...

    Si tu en as une blinde.. Il suffit de boucler et de prendre un offset ou de faire des worksheetfunction.vlookup
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éprouvé Avatar de MlNOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 47
    Par défaut
    Re,

    Il faut que dans ta macro tu recuperes d'abord:
    - la valeur de ta reference(A1 ect)
    -ensuite tu ouvres ta 2eme feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("2nd onglet").Select
    - tu recherche ta reference avec la fonction find :http://msdn.microsoft.com/en-us/libr.../ff839746.aspx
    -tu recuperes les donner qui t'interesse et les copies directement dans ton 3eme onglet avec une instruction du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("onglet2 ").Cells(, "").Copy Sheets("onglet3").Cells(, "")
    voila si tu as besoin de plus de precision fait moi signe mais normalement tu as tout ce qu'il te faut

  6. #6
    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 : 68
    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 RECHERCHE
    Bonjour à vous, Bonjour au Forum,

    Plusieurs remarques

    - Ces p... de "Select" sont à proscrire. Ils ne servent à rien et alourdissent le code et sa lecture
    - Notre amie souhaite obtenir seulement les données chiffrées en colonne

    D'accord pour la méthode Find.
    Cela dit, l'aide en ligne sur l'éditeur VBE est en français.

    Je verrais donc l'alimentation d'une varaible Tableau (Je sais, c'est mon "truc"!) soumise à la condition d'une donnée chiffrée informée; puis l'information de l'onglet 3 du classeur par les valeurs du tableau.

  7. #7
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Et les recherchesV dans tout ça ?

  8. #8
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut afficher les données d'une table
    bonjour Stéfanie et Marcel,

    Pour ma formation, je suis cette discussion depuis son origine tout en me gardant bien d'intervenir. Mes connaissances en VBA ne me le permettent pas.

    Je me suis attaché à l'ensemble du code (toutes les procédures).
    j'avoue avoir beaucoup de difficultés à comprendre la procédure function. J'ai bien compris qu'il s'agit d'alimenter la combo avec les données de la colonne A de la feuil2 mais cela me semble extraordinairement (et peut-être inutilement) compliqué.

    je dois avouer que j'éprouve beaucoup de difficultés avec la manipulation des tableaux.

    Marcel: Peut-être ne t'es tu attaché qu'au problème posé et pas à l'ensemble du code. Peux tu me donner ton avis ?

    je joins la procédure avec mes remarques et interrogations.

    merci
    cordialement.

    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
     
    Function SetList(This As ComboBox, ParamArray Params() As Variant)
    Dim oCollection As New Collection
    Dim Stmps As String
    Dim Elem As Variant                      'la variable Elements ne semble pas utilisé
    Dim n As Long
    Dim b As Long, Zt As Long, Tp As Long    'compteurs boucle for next (integer devrait sufire à en juger par Refs)
    Dim ParaMid As Long                      'dernier élément du tableau Params
    Dim SRow As Long                         'dernière ligne feuil2(TABLE)
    Dim Refs As Long                         'cette variable est-elle bien nécessaire
    Dim Setfind As Boolean
     
    SRow = Feuil2.Range("A" & Rows.Count).End(xlUp).Row
    Refs = 100                              'nombre de lignes maximum arbitraire de feuil2 (ne fait-il pas double emploi avec Srow)
    Setfind = True
    ParaMid = UBound(Params): Cells(20, 1) = ParaMid  'semble toujours renvoyer 0. Est normal?
    ReDim Tableau(Refs)                     'ou est déclaré tableau ?
    For b = 6 To SRow Step Refs
        Tableau = Feuil2.Range("A1:E" & Refs).Offset(b, 0).Value  'pourquoi E et pas la dernière colonne de feuil2 ?
        For Zt = 1 To Refs                  'en mettant Srow la boucle est moins longue
            Setfind = True
            For Tp = 1 To ParaMid           'que fait-il si paramid est toujours 0 ?
                If (Params(Tp) <> Trim(Tableau(Zt, Tp))) Then
                   Setfind = False
                   Exit For
                End If
            Next Tp
            If Setfind Then
               Stmps = Trim(Tableau(Zt, ParaMid + 1))
               If Stmps <> "" Then
                  On Error Resume Next
                  oCollection.Add Stmps, CStr(Stmps)
                  Err.Clear
               End If
            End If
        Next Zt
    Next b
     
    If oCollection.Count > 0 Then
       ReDim ss(oCollection.Count - 1, 0): n = 0
       For Each Elem In oCollection
           ss(n, 0) = Elem: n = n + 1
       Next: This.List = ss
    End If
     
    SetList = oCollection.Count
    End Function

  9. #9
    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 : 68
    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,

    Il doit y avoir erreur.
    Ce n'est pas mon code, ou bien ce n'est pas la bonne discussion.
    Bien à toi.

  10. #10
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut afficher les données d'une table
    bonjour,

    Ce n'est pas ton code effectivement mais une procédure de la demande de Stéphanie qui se trouve dans la feuille userform1 de son projet.

    Sans cette fonction la combobox serait vide et l'ensemble du code inutile.

    Comme tu as résolu le problème de Stéfanie, je voulais savoir si cette partie de son projet était vraiment optimum au niveau codification.


    cordialement.

  11. #11
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut afficher les données d'une table
    Bonjour Stéfanie,

    Je me permet d'insister afin d'être bien certain d'avoir compris l'ensembe du code et pouvoir l'utiliser éventuellement par la suite dans une application.

    Que fait donc de particulier la function setlist que je peine à comprendre ?

    Je l'ai remplacé pour essai par la méthode "additem" logée dans la procédure initialize ci-dessous et j'obtiens le résultat souhaité avant votre dernière intervention.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub UserForm_Initialize()
     
    Dim vCellule As Object
    Dim SRow As Long
    SRow = Sheets("table").Range("A" & Rows.Count).End(xlUp).Row
     
    For Each vCellule In Sheets("table").Range("a6:a" & SRow)
        If vCellule.Value = "" Then Exit For
        UserForm1.Cmbosecteur.AddItem vCellule.Value
    Next
    UserForm1.Cmbosecteur.ListIndex = 0
    UserForm1.Show
    End Sub
    merci.
    cordialement.

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut Afficher les données d'une table
    Citation Envoyé par nibledispo Voir le message
    Bonjour Stéfanie,

    Je me permet d'insister afin d'être bien certain d'avoir compris l'ensembe du code et pouvoir l'utiliser éventuellement par la suite dans une application.

    Que fait donc de particulier la function setlist que je peine à comprendre ?

    Je l'ai remplacé pour essai par la méthode "additem" logée dans la procédure initialize ci-dessous et j'obtiens le résultat souhaité avant votre dernière intervention.
    Bonjour,

    je suis vraiment novice dans la programmation, j'essaye difficilement d'apprendre...!
    Il me semble que la fonction "setlist" n'est pas indispensable pour ce cas là.
    Ce bout de code je l'ai pris d'une application que j'ai adaptée, il n’émane pas de moi...
    Je pat toge dans le VB
    As tu une solution pour afficher les données sur deux colonnes de "C7 à D14" puis de "I7 à J14"?

  13. #13
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut afficher les données d'une table
    bonjour Stéfanie,

    je suis hélas à peine plus doué que toi en VBA. Je pense que Marcel qui est plein de bonne volonté résoudra ton problème.
    je lui est demandé ce qu'il pensait de la fonction setlist mais il n'a pas fait le rapprochement avec ses précédentes interventions.
    Je pense que tu devrais évoquer avec lui ce point car s'il ne s'agit vraiment que de charger la combox, elle est inutile et peut-être remplacée par le bout de code procédure initialize, je crois.
    Par ailleurs, pourquoi le bouton sur la feuille commande. Ne serait-il pas plus simple d'y loger ou d'ouvrir directement le fichier sur la combo ?

    J’essaierai de voir ton problème si Marcel (ou d'autres) ne se manifeste pas mais je doute de parvenir à une solution.

    Cordialement.

  14. #14
    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 : 68
    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 valeur table
    Paul, je réponds d'abord à Stéphanie. Merci pour ta compréhension.

    Stéphanie,

    Comme précédemment, affecte ce code au bouton VALIDER de ton nouveau classeur.

    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
    Private Sub VALIDER_Click()
     
    Dim val As String
     
    Dim dernl As Range, liste As Range
    Dim t As Range
    Dim nbcol As Integer
    Dim i As Integer, k As Integer, a As Byte
    Dim Tablo()
    Dim dernval As Range
     
    'Occurence à rechercher dans la colonne 1 de la feuille "TABLE"
    val = Cmbosecteur.Value
     
    With Sheets("TABLE")
     
        'Dernière ligne de la feuille "TABLE"
        Set dernl = .Cells(.Rows.Count, 1).End(xlUp)
        'liste des occurences dans laquelle chercher la valeur de la Combobox
        Set liste = .Range(.Cells(5, 1), dernl)
        'Cellule correspondante à la recherche
        Set t = liste.Find(val, Lookat:=xlWhole)
        'Dernière colonne de la feuille "TABLE"
        nbcol = .Cells(5, .Columns.Count).End(xlToLeft).Column - 1
     
        'Compteur des occurences informées
        k = 0
     
        'Il y a 4 champs (joint, vérin...) placés toutes les 3 colonnes à partir de la colonne des occurences (A1, A2...)
        For i = 1 To nbcol
            'Test si le champ est informé
            If t.Offset(0, i) + 0 > 0 Then
               'Si oui, alors le compteur augmente de 1
                k = k + 1
                'On redimensionne la variable Tableau de 1 occurence k tout en conservant les précédents enregistremeents
                'Il y a 4 champs à retenir (Nom de la pièce, Référence, Quantité N,  Quantité D)
                ReDim Preserve Tablo(1 To 2, 1 To k)
                '1ère valeur = nom de la pièce placé en ligne 5
                Tablo(1, k) = .Cells(5, 1 + i)
                'Référence
                Tablo(2, k) = t.Offset(0, i)
                End If
        Next i
     
    End With
     
    'Information de la feuille Résultats
    With Sheets("D.AFFICHEE")
            'Effacement des anciens enregistrements...
            Set dernval = .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 1)
            '... à conditions qu'il y en ait, sinon on effacerait la ligne de titres
            If dernval.Row > 5 Then .Range("A6", dernval).ClearContents
            'On informe le champ correspondant à la variable Tableau transposée
            .Range("C7").Resize(UBound(Tablo(), 2), UBound(Tablo(), 1)).Value = WorksheetFunction.Transpose(Tablo)
            .Range("I7").Resize(UBound(Tablo(), 2), UBound(Tablo(), 1)).Value = WorksheetFunction.Transpose(Tablo)
      End With
     
    'libération des variables
    Erase Tablo
    Set dernval = Nothing
    Set liste = Nothing
    Set dernl = Nothing
     
    'Formulaire caché puis déchargé
    Me.Hide
    Unload Me
     
    End Sub

  15. #15
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Quand je fais l'essai, cela me copie les données en double, c'est pas vraiment sa que je veux faire. En faite mon fichier en nombre de colonne risque de faire plusieurs colonnes (jusqu'à 14 données à traiter) c'est pour cela que je souhaite passer de ("C14 D14") à ("I7:J7") et continuer tant qu'il y a des valeurs jusqu'à ("I14:J14").

    NB : C'est comme pour dire une fois arrivée sur la ligne C14 D14 on continue à partir de la ligne I7 J7 jusqu' à I14 J14.

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

Discussions similaires

  1. Afficher les données d'une table horizontalement
    Par naturel dans le forum ASP.NET
    Réponses: 7
    Dernier message: 19/05/2008, 11h36
  2. [AJAX] Afficher les données d'une table AJAX PHP
    Par tetepro dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/04/2008, 21h59
  3. Réponses: 6
    Dernier message: 05/03/2008, 13h09
  4. [MySQL] afficher les données d'une table mysql
    Par faamugol dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/09/2007, 19h04
  5. [MySQL] afficher les données d'une table
    Par scarecrow1 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/11/2006, 18h07

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