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 :

Comptage nombre valeurs dans un tableau & incrémentation dans un nouvel onglet [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Middle Officer
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Middle Officer
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Comptage nombre valeurs dans un tableau & incrémentation dans un nouvel onglet
    Bonjour à tous,

    J'ai un fichier EXCEL constitué de 2 pages "Récap" & "positions".
    Mon onglet "position" est un tableau de longueur variable constitué de plusieurs colonnes dont "Portefeuilles" et "Produits". Il peut y avoir plusieurs "Produits" pour chaque "Portefeuille" & chaque "Produits" peut être présent dans plusieurs "Portefeuilles".
    Mon problème est le suivant : j'aimerais faire une macro VBA qui compte le nombre de "produits" pour un même "portefeuille" et colle chacun de ces "produits" dans des colonnes à la suite les unes des autres, dans mon onglet "Récap". Bien sûr, il faudrait reproduire ce schéma pour chaque "portefeuille" de ma feuille "Position".

    Cela donnerait :

    Onlet Positions
    Codification	Produits
    189600		7075003FER
    189610		7075122FER
    190710		7327256DYN
    190710		7075122FER
    190750		7327256DYN
    190750		1319060DYN
    190750		7075122FER
    190750		1036400DYN
    Onglet Récap
    Codification	Produit1	Produit2	Produit3	Produit4
    189600		7075003FER			
    189610		7075122FER			
    190710		7327256DYN	7075122FER		
    190750		7327256DYN	1319060DYN	7075122FER	1036400DYN
    J'ai fait de multiples recherches mais je sèche... J'ai entendu parler d'un dictionnaire mais qui me semble être une mauvaise piste puisque mes deux colonnes peuvent avoir des doublons… J'ai trouvé un bout de code avec .findnext sur lequel j'ai travaillé mais que je ne sais pas utiliser… A vrai dire, je ne sais même pas si cela pourrait résoudre mon problème.

    Sauriez-vous comment je pourrais m'y prendre ? Pourriez-vous m'aider ?
    Merci par avance.

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Bonjour,

    besoin identique à la pourtant récente discussion Imports données sans doublon,
    y voir le post #11, le #16 pour un dictionnaire, une excellente voie pour un esprit logique …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Middle Officer
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Middle Officer
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bonjour Marc_L,

    J'ai bien cherché sur le forum mais pas avec ces mots clefs... Je n'ai donc pas trouvé ce post. Désolée.

    Je me suis plongée dans tes explications sur le dictionnaire mais après lecture et relecture, il me semble bien qu'il est impossible d'affecter plusieurs "items" (dans mon cas, appelés "Produits") à une même clé (dans mon cas, "Portefeuilles"). Tout ce que j'ai réussi à faire est de récupérer la liste de mes "portefeuilles" mais quand je tente de recopier les "produits" correspondant, il ne me sort que le premier "produit".
    Je ne pourrais donc pas obtenir, par exemple : Portefeuille1 est composé de Produit10, produit2 & produit 5

    Je ne me suis pas encore penchée sur l'autre exemple... J'y vais de ce pas. Ca me prend du temps parce que je n'ai justement pas la "logique VBA" et que j'apprends seulement grâce aux forums.
    Merci en tous cas pour ton aide.
    Bon WE

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par Notsofar Voir le message
    il me semble bien qu'il est impossible d'affecter plusieurs "items" (dans mon cas, appelés "Produits") à une même clé
    C'est comme pour une cellule d'une feuille de calculs d'Excel, il est possible d'y effectuer une concaténation par exemple.

    Joindre un classeur exemple en .xlsx (sans macro) comme support, ce sera alors plus simple pour proposer un code …

    Tout dépend aussi si la colonne Codification est déjà triée dans la feuille source ou si le code peut l'effectuer car
    dans ce cas, c'est d'un niveau grand débutant, il n'y a même pas besoin de clef !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Middle Officer
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Middle Officer
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bonjour Marc_L & le forum,

    J'ai essayé plusieurs solutions a mon problème et je suis partie sur les variables tableaux pour le résoudre sans plus de succès... Après plusieurs essais, il semblerait que tout comme le dictionnaire je ne puisse pas incrémenter un nombre de valeurs variables à une valeur unique. Je reviens donc vers vous avec ce que j'ai tenté de faire en utilisant la méthode du dictionnaire... J'arrive donc bien à récupérer le premier "item" de chaque "clef", cependant il faudrait que je puisse récupérer tous les items d'une même clef.

    Je pense qu'il faudrait que je commence par compter le nombre d'items que j'ai pour chaque clef en les mettant dans une variable puis que je boucle sur chaque clef afin de les restituer en dur.

    Comme demandé, je vous joins un fichier exemple avec un onglet Détail (ma base initiale), un onglet Récap Positions (le résultat que j'espère avoir un jour ), Récap Positions Test (la feuille test de ma macro).

    Je vous remercie par avance pour le temps que vous voudrez bien consacrer à mon cas !
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour le forum, Marc, Notsofar,

    essaies ce code qui devrait approcher, je mets le résultat dans la feuille "Recap position test" :
    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
    Sub repartition()
    Dim Dico
    Dim x As Long, y As Long, z As Range
    Dim d
    Dim b As Long
    Dim derlg As Range, tbdetail
    Set Dico = CreateObject("Scripting.Dictionary")
    With Sheets("détail")
      Set derlg = .Range("A" & .Rows.Count).End(xlUp)
      tbdetail = .Range("A2", derlg(1, 2))
      For x = 1 To UBound(tbdetail, 1)
        If Not Dico.Exists(tbdetail(x, 1)) Then Dico.Add tbdetail(x, 1), tbdetail(x, 1)
      Next x
      b = 4
    End With
     
    With Sheets("Récap Positions test")
      For Each d In Dico.Items
        .Range("A" & b) = d
        b = b + 1
      Next d
      b = 2
      For x = 1 To UBound(tbdetail, 1)
        For y = 4 To .Range("A" & .Rows.Count).End(xlUp).Row
          If tbdetail(x, 1) = .Range("A" & y) Then
            Set z = .Cells(y, .Columns.Count).End(xlToLeft)(1, 2)
            z = tbdetail(x, 2)
          End If
        Next y
      Next x
    End With
    End Sub
    à adapter
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Tout dépend aussi si la colonne Codification est déjà triée dans la feuille source ou si le code peut l'effectuer car
    dans ce cas, c'est d'un niveau grand débutant, il n'y a même pas besoin de clef !
    Si le colonne est déjà triée - ou si elle peut être triée ? - c'est enfantin, pas besoin de clef, de dictionnaire, …
    juste d'organiser une pensée logique !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    D'accord avec toi Marc mais je penses que si les données sont effectivement triées, Notsofar pourra élaguer ma proposition et l'adapter (en se basant sur ce qui reste utile), je passe par des tableaux au cas ou il existerait beaucoup de données, ce n'est peut-être pas enfantin pour tout le monde

    Bonne journée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Ce n'était pas vis à vis de ta proposition Dominique, juste ma question restée sans réponse !

    Et ce n'est vraiment pas difficile de comparer la codification d'une ligne avec celle de la ligne précédente !
    Il y a diverses manières de répondre à sa problématique et effectivement selon le nombre de lignes à traiter.
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Middle Officer
    Inscrit en
    Octobre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Middle Officer
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2014
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bonjour Casefayere,

    Merci beaucoup... C'est super !!! Je suis en train d'essayer de décortiquer ton code et de le transposer à mon cas... Je commençais à déprimer d'en voir le bout un jour !!!

    Marc_L je suis désolée d'avoir zapé ta question... je ne peux pas trier... Le fichier doit être trié par personne (à chaque personne est affecté plusieurs codifications). De plus, il est très gros avec une trentaine de colonnes et 1000 lignes bourrées de formules. Crois bien que j'ai cherché avant de poser mes questions... J'essaye d'ailleurs d'expliquer ma logique à chaque fois que je poste... Et je suis bien consciente que ma logique n'est certainement pas toujours la bonne mais, effectivement Casefayere, oui, ce n'est clairement pas enfantin pour moi !

    Merci encore Casefayere pour ton aide... Une fois que j'aurais adapté mon code, je mettrais résolu !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/03/2009, 19h13
  2. stocker des valeurs entiéres dns un fichier csv dans un tableau
    Par industrielle dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 22/03/2009, 18h40
  3. Réponses: 3
    Dernier message: 22/03/2008, 11h48
  4. [Tableaux] Incrémentation dans un tableau
    Par onirisme dans le forum Langage
    Réponses: 5
    Dernier message: 16/11/2007, 16h47
  5. Réponses: 5
    Dernier message: 12/06/2006, 12h05

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