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 :

Faire passer horizontalement des informations disposées verticalement [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Santé
    Inscrit en
    Février 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Février 2022
    Messages : 22
    Par défaut Faire passer horizontalement des informations disposées verticalement
    Bonjour


    J'ai une base de données où figurent des ID et chaque ID est associées à 2 mesures : MES1 et MES2. Les valeurs de MES1 et MES2 sont disposées verticalement et j'aimerais que c'est 2 valeurs soient disposées horizontalement. J'aurais ainsi une seule ligne ID.

    J'ai un code qui marche pas mal :

    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
        For i = 2 To Range("F" & Rows.Count).End(xlUp).Row Step 1
     
            If Range("H" & i).Value = Range("J1").Value Then
     
                Range("J" & i).Value = Range("I" & i).Value
     
            Else: Range("J" & i).Value = "0"
     
            End If
     
        Next i
     
        For i = 2 To Range("F" & Rows.Count).End(xlUp).Row Step 1
     
            If Range("J" & i).Value > 0 Then
     
                If Range("H" & i + 1).Value = Range("K1").Value Then
     
                    If Range("F" & i).Value = Range("F" & i + 1).Value Then
     
                        Range("K" & i).Value = Range("I" & i + 1).Value
     
                    Else: Range("K" & i).Value = "NA"
     
                    End If
     
                Else: Range("K" & i).Value = "0"
     
                End If
     
            Else: Range("K" & i).Value = "0"
     
            End If
     
        Next i
    Ensuite je supprime les lignes où figurent un 0 simultanément en J et K

    Le problème est que pour certains ID, je n'ai qu'une seule valeur, soit MES1 soit MES2, comme c'est le cas pour ID14 de mon fichier. Avec ma méthode, ça supprime les ID à une seule valeur.
    Si quelqu'un a une méthode plus pertinente, je suis preneur

    Merci d'avance

    Physm
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 337
    Par défaut
    Bonjour

    une méthode plus pertinente ?
    Power Query et quelques clics

    Vous chargez vos données dans Power Query, via le menu "Données", "récupérer et transformer" et "A partir d'un Tableau ou d'une plage"
    Dans l'éditeur vous sélectionnez la colonne "MES" et dans le menu "Transformer" : "Pivoter la colonne"
    Vous choisissez VAL dans "colonne de valeur" et vous validez

    Il ne vous reste plus qu'à charger vos données dans un tableau

    ça prends quelques secondes et vous oubliez VBA pour ce genre de manipulation

    Stéphane

  3. #3
    Membre averti
    Homme Profil pro
    Santé
    Inscrit en
    Février 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Février 2022
    Messages : 22
    Par défaut
    Bonjour Stéphane,

    merci d'avoir pris le temps de me répondre et de me proposer une solution.

    Mon bout de code est une petite partie d'un code beaucoup plus gros qui fait intervenir plusieurs fichiers d'environs 80000 lignes. Tu me diras avec raison que power query fera aussi bien le job que ma grosse macro excel, mais pour l'instant je m'en tiens à ce que je sais faire (à mon niveau) : du vba. C'est compliqué pour moi d'intégrer du power query dans mon automatisation vba parce que mon niveau en power query se limite juste à connaitre son existence! Je garde qd même en tête que pour évoluer je vais devoir passer par la case power query.

    Comme je suis curieux, j'ai testé ce que tu m'as conseillé mais j'ai un message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Expression.Error : Le champ « MES1 » existe déjà dans l'enregistrement.
    Détails :
        Name=MES1
        Value=
    Bien à toi

    Physm

  4. #4
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 337
    Par défaut
    Bonjour

    c'est normal, il faut faire la requête uniquement sur les 4 premières colonnes et non sur les 6 colonnes avec MES1 et MES2 déjà dépivotées.

    Stéphane
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Homme Profil pro
    Santé
    Inscrit en
    Février 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Février 2022
    Messages : 22
    Par défaut
    Effectivement...

    En tout cas ça fonctionne de mon coté.
    En faisait jouer l'enregistreur ça fonctionne aussi même si le code pique un peu les yeux. Mais au moins j'ai une base pour intégrer du power query dans ma grosse macro vba.

    Merci beaucoup pour l'aide!

    Physm

  6. #6
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 337
    Par défaut
    Bonjour

    A mon sens, ce n'est pas une bonne pratique de générer une requête Power Query avec VBA.
    Vous créez vos requêtes dans PQ et éventuellement vous les actualisez avec VBA. ActiveWorkbook.Connections("Requête - xxx").Refresh
    D'une manière générale, il est préférable d'importer et de traiter les données dans PQ qui est dédié à ça et non dans VBA.

    Stéphane

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

Discussions similaires

  1. [2.x] Faire passer des informations d'une page à l'autre
    Par Gaylord.P dans le forum Symfony
    Réponses: 9
    Dernier message: 29/12/2015, 18h43
  2. Réponses: 24
    Dernier message: 29/05/2015, 18h02
  3. Faire passer des informations dans une popup
    Par zyanya dans le forum Flex
    Réponses: 4
    Dernier message: 12/05/2011, 18h16
  4. Faire un log des informations de débogage
    Par vincentweb dans le forum C#
    Réponses: 4
    Dernier message: 26/08/2008, 17h50
  5. Réponses: 5
    Dernier message: 08/03/2004, 11h28

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