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 :

VBA excel Occurence sur plusieurs colonnes


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
    Consultant fonctionnel
    Inscrit en
    Mai 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mai 2018
    Messages : 37
    Par défaut VBA excel Occurence sur plusieurs colonnes
    Bonjour à tous,

    je viens vers vous afin de trouver une solution à un probléme plutôt complexe:

    Ci-joint un fichier de 100 lignes (pour l'exemple mais doit être applicable à un nombre infinis de lignes) représentant des lieux de fabrication (colonne B) , des types de véhicule (colonne C) ainsi que leur numero de série (colonne D) en plus de leur types de réparation (colonne F > BJ).

    Je recherche le code pouvant me permettre de calculer l'occurence (le nombre de fois) que les réparations ont lieu sur un types de véhicule et sur son numéro de série avec le coût total des réparations pour l'ensemble des véhicules en plus de l'indication du types de réparations.

    Je recherche un résultat semblable à celui-ci :
    Plant vehicule Type Serial Number Frequence Cout total Types de réparation
    Patrick 1111 61190 2 1.096 € 1 4 7 9 10 12 17 19 33 43

    Pour le moment j'utilse la fonction suivante qui ne me donne pas le résultat souhaiter :

    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
     
     
    Sub Frequency()
     tablo = Sheets("Feuil1").Range("A2:BN" & Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row)
     Set Dico = CreateObject("Scripting.dictionary")
     For n = LBound(tablo, 1) To UBound(tablo, 1)
       X = tablo(n, 2) & "|" & tablo(n, 3) & "|" & tablo(n, 4)
       Dico(X) = Dico(X) + 1
     Next
     a = Dico.keys
     b = Dico.items
     ligne = 2
     Sheets("Feuil1").Cells.ClearContents
     Sheets("Feuil1").Cells(1, 1) = "Types de véhicules"
     Sheets("Feuil1").Cells(1, 2) = "N° série"
     Sheets("Feuil1").Cells(1, 3) = "Types réparations"
     Sheets("Feuil1").Cells(1, 4) = "Coûts"
     Sheets("Feuil1").Cells(1, 5) = "Frequency"
     For n = LBound(a) To UBound(a)
     Sheets("Feuil1").Cells(ligne, 1) = Split(a(n), "|")(0)
     Sheets("Feuil1").Cells(ligne, 2) = Split(a(n), "|")(1)
     Sheets("Feuil1").Cells(ligne, 3) = Split(a(n), "|")(2)
     Sheets("Feuil1").Cells(ligne, 4) = Split(a(n), "|")(3)
     Sheets("Feuil1").Cells(ligne, 5) = b(n)
     ligne = ligne + 1
     Next
     Sheets("Feuil2").Select
     End Sub
    Pourrais-je vous demander de l'aide car je bloque complétement? Merci de trouver le fichier explicatif ci-joint.
    Fichiers attachés Fichiers attachés

  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 AimeDija Voir le message
    Je recherche le code pouvant me permettre de calculer l'occurence (le nombre de fois) que les réparations ont lieu sur un types de véhicule et sur son numéro de série avec le coût total des réparations pour l'ensemble des véhicules en plus de l'indication du types de réparations.
    Je n'ai pas ouvert ton fichier, mais il semble que ce type de problème peut se résoudre sans VBA avec des fonctions NB.SI.ENS() et SOMME.SI.ENS(), voir même peut-être avec un simple tableau croisé dynamique.
    https://support.office.com/fr-FR/art...c-aa8c2a866842
    https://support.office.com/fr-FR/art...6-611cebce642b

  3. #3
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    je n'ai pas ouvert le fichier (je préfère un simple xlsx avec ce que l'on a avant dans un onglet et le résultat dans un autre onglet).

    Voir ici - à adapter : https://www.developpez.net/forums/d1.../#post10364998
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  4. #4
    Membre averti
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mai 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mai 2018
    Messages : 37
    Par défaut
    Bonjour Menhir,
    Bonjour RyuAutodidacte,
    Bonjour à tous,

    Merci pour votre retour et vos conseils.

    Malheuresement ne connaissant pas à l'avance les numéros de type de véhicule et leur numéro de série, j'ai du mal à utiliser les fonctions Somme.si.ens et NB.si.ens car je devrais avoir au préalable un tableau établis.

    En ce qui concerne ton code RyuAutodidacte, j'ai en tout 57 lignes à additioner et celui-ci ne me renvois pas l'entéte des colonnes qui me sont nécessaire.

    Merci de trouver ci-joint un exemple en xlsx avec les données en page 1 et le résultat souhaité en page 2.

    Bien à vous,
    Fichiers attachés Fichiers attachés

  5. #5
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Donc si je comprends bien ce sont ces en-têtes à additionner dont tu as besoin ?? - noms des en-têtes cf ci-dessous :

    1 4 7 9 10 12 17 19 33 43 58

    les autres en-tête ne te sont pas nécessaire, c'est bien cela ??

    Edit : Comment obtiens tu "Cout total" ?
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 64
    Par défaut
    'llo toutn le monde,

    ta demande ressemble furieusement à un résultat de tableau croisé dynamique non ? Tu as exploré cette piste (qui au demeurant est exploitable par VB également)

  7. #7
    Membre averti
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mai 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mai 2018
    Messages : 37
    Par défaut
    RyuAutodidacte,

    En effet, je cherche à
    1. Reférencé les en-tête des cellules de la colonne 6 à la 61 dans le cas où une réparation à lieu dans une de ses cellules. Fréquences
    2. Référencé pour chacunes de ses en-tête le montant total par types de véhicules et numéro de série.


    Exemple de résultat : dans les colonnes de A à F

    Plant
    Patrick

    vehicule Type

    1111

    Serial Number
    61190

    Frequence
    2

    Cout total
    1096

    Types de réparation
    1/4/7 ...

    Le coût total est just el'addition des cellules F2:BN


    Don-Pets,

    en effet j'ai pensé au TCD mais ceux-ci doivent être refait chaque fois que je rafraichi ma page (les données proviennent d'une base de données Access) donc cela n'automatise pas le process.

    merci

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pour moi, les données sont mal présentées au départ. Tes intitulés de colonne au dela de Date of Maintenance sont des données métier et tu dois donc les regrouper au sein d'une colonne (Category ou autre) qui reprend ces intitulés (qui sont en fait des données et non des intitulés).

    tu devrais avoir les colonnes suivantes:
    ID - Plant - Vehicule Type - Serial Number - Date of maintenance - Category - Value

    Dans Category, tu mets tes intitulés 1 2 3 ... et dans Value tu mets la valeur.

    C'est comme cela que tes données devraient être extraites d'Access, et si ce n'est pas possible de travailler sur la source, tu dois adapter ton tableau par VBA pour qu'il corresponde à ce que j'ai décrit comme colonnes. C'est pour moi la seule façon valable de travailler. Sans cela, c'est parti pour l'usine à gaz...

    Après, TCD, SOMME.SI.ENS...

    Nom : 20180829_04.png
Affichages : 270
Taille : 12,8 Ko

    [Edit] Evidemment, ici, je présente les données pour une vision plus claire. Si l'extraction peut éviter de reprendre les lignes non valorisées, c'est mieux
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 64
    Par défaut
    Je ne pourrais pas mieux répondre que ne vient de le faire Pierre

  10. #10
    Membre confirmé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 64
    Par défaut
    Par ailleurs,

    pour ton histoire d'actualiser ton tcd dès que tu fais une mise à jour de données, tu n'as qu'à t'inspirer de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each feuil In ActiveWorkbook.Worksheets
       Worksheets(feuil.Name).Select
       For Each tcd In ActiveSheet.PivotTables
          tcd.RefreshTable
       Next tcd
    Next feuil

  11. #11
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    re,

    @AimeDija
    le résultat tel que tu me l'as donné dans le fichier excel n'est pas fiable pour une analyse de données correcte

    Ex. non approprié (ce que tu as montré dans le fichier Excel) :

    Types de réparation
    1 4 7 9 10 12 17 19 33 43 58

    Ex. Plus logique de résultat

    Types de réparation
    1, 4, 7, 9, 10, 12, 17, 19, 33, 43, 58


    je rejoins Pierre sur les conseils donnés car selon ce que l'on veut la présentation des données est très importante.

    Le mieux est de nous expliqué le but final avec tous les tenants et aboutissants …

    Edit : Ajout ci-dessus
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

Discussions similaires

  1. [XL-2007] Formulaire VBA Excel - recherche sur plusieurs critères et affichage des résultats
    Par kl1ft dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/08/2016, 20h44
  2. [VBA/Excel]recherche sur 2 colonnes
    Par rodrigue62 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/03/2007, 17h35
  3. [VBA/Excel] Boucler sur les colonnes
    Par jefe.k dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 23/02/2007, 08h42
  4. [VBA Excel] Filtre sur plusieurs critères
    Par tazmania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/12/2006, 11h12
  5. [VBA-E] Recherche sur plusieurs colonnes ?
    Par Kokito dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/11/2006, 13h27

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