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 :

Classer des colonnes disposés aléatoirement


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
    Employé voulant apprendre à automatiser
    Inscrit en
    Février 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Employé voulant apprendre à automatiser

    Informations forums :
    Inscription : Février 2018
    Messages : 61
    Par défaut Classer des colonnes disposés aléatoirement
    Bonjour à tous,

    Nouvelle question, mon code pour ma reconciliation issu de deux sources différentes est maintenant terminé :

    Cela fonctionne très bien sur mon ordinateur, seulement impossible de pouvoir le partager à mon équipe, on a des layout différent ce qui fait que les colonnes ne sont pas disposés au même endroit sur chacun de nos ordinateurs, est-il possible de créer une ligne de code qui pourrait rechercher l'intitulé des colonnes, puis les classer et ensuite lancer la suite du code une fois que les colonnes sont bien rangés comme il faut.


    Exemple rechercher la colonne avec comme titre "Quantity", la classer dans la colonne A, rechercher la colonne avec comme titre "ISIN" la classer dans la colonne B etc.

    Merci d'avance,

  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

  3. #3
    Membre averti
    Homme Profil pro
    Employé voulant apprendre à automatiser
    Inscrit en
    Février 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Employé voulant apprendre à automatiser

    Informations forums :
    Inscription : Février 2018
    Messages : 61
    Par défaut
    Citation Envoyé par Menhir Voir le message

    Merci Menhir pour l'astuce, je suis en train d'essayer de comprendre comment cela fonctionne, je ne pense pas que j'arriverai à produire quelque chose dans l'heure qui suit, je reviendrai sûrement avec une ligne de code après le weekend.

    Bonne fin de semaine

  4. #4
    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
    La méthode que je t'ai indiquée, c'est pour le cas où tu n'as qu'une colonne à chercher.

    Perso, j'ai une application sur laquelle j'ai eu ce problème (des export de données dont la position et le nombre des colonnes peut changer mais avec des titres fixés par données).
    Je me suis contenté de faire une boucle For To scruter toutes les entête et un Select Case qui conservait le numéro de colonne dans une variable pour les cas des titres que je cherchais.
    Ce n'est pas très élégant mais c'est fiable et souple.

  5. #5
    Membre averti
    Homme Profil pro
    Employé voulant apprendre à automatiser
    Inscrit en
    Février 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Employé voulant apprendre à automatiser

    Informations forums :
    Inscription : Février 2018
    Messages : 61
    Par défaut
    Citation Envoyé par Menhir Voir le message
    La méthode que je t'ai indiquée, c'est pour le cas où tu n'as qu'une colonne à chercher.

    Perso, j'ai une application sur laquelle j'ai eu ce problème (des export de données dont la position et le nombre des colonnes peut changer mais avec des titres fixés par données).
    Je me suis contenté de faire une boucle For To scruter toutes les entête et un Select Case qui conservait le numéro de colonne dans une variable pour les cas des titres que je cherchais.
    Ce n'est pas très élégant mais c'est fiable et souple.

    Salut Memhir,

    J'ai effectivement besoin de chercher 3 colonnes, les colonnes varient mais le titre reste fixé. Je pense que ton code serait adapté à ma situation, faut que je continue à creuser.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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
    Public Feuilles As ObjectPublic Entete As Object
    Sub test()
    Set Feuilles = CreateObject("Scripting.Dictionary")
    For i = 1 To ThisWorkbook.Sheets.Count
        Feuilles.Add ThisWorkbook.Sheets(i).Name, CreateObject("Scripting.Dictionary")
        With ThisWorkbook.Sheets(i).UsedRange
            For c = 1 To .Columns.Count
                Feuilles(ThisWorkbook.Sheets(i).Name).Add .Cells(1, c).Value, c
            Next
        End With
    Next
    For i = 1 To ThisWorkbook.Sheets.Count
           With ThisWorkbook.Sheets(i).UsedRange
            For c = 1 To .Columns.Count
             Debug.Print .Cells(1, c).Value, Feuilles(ThisWorkbook.Sheets(i).Name)(.Cells(1, c).Value)
            Next
        End With
    Next
    End Sub
    Fichiers attachés Fichiers attachés

  7. #7
    Expert éminent
    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
    Par défaut
    Bonjour,

    en dehors de l'évidente méthode Find déjà citée,
    il y a aussi la simple fonction de feuille de calculs EQUIV (Application.Match en VBA) renvoyant le numéro de la colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Demo1()
        V = [MATCH("Quantity",1:1,0)]
        MsgBox V
    End Sub
    Donc encore une fois sans boucle, juste en Pensant Excel Avant VBA …

    Et pour "classer" des colonnes d'une feuille à une autre, ne pas oublier le filtre avancé !

    ___________________________________________________________________________________________________________

         Merci de cliquer sur en bas à droite de chaque message ayant aidé puis sur pour clore cette discussion …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …


  8. #8
    Membre averti
    Homme Profil pro
    Employé voulant apprendre à automatiser
    Inscrit en
    Février 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Employé voulant apprendre à automatiser

    Informations forums :
    Inscription : Février 2018
    Messages : 61
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Bonjour,

    en dehors de l'évidente méthode Find déjà citée,
    il y a aussi la simple fonction de feuille de calculs EQUIV (Application.Match en VBA) renvoyant le numéro de la colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Demo1()
        V = [MATCH("Quantity",1:1,0)]
        MsgBox V
    End Sub
    Donc encore une fois sans boucle, juste en Pensant Excel Avant VBA …

    Et pour "classer" des colonnes d'une feuille à une autre, ne pas oublier le filtre avancé !

    ___________________________________________________________________________________________________________

         Merci de cliquer sur en bas à droite de chaque message ayant aidé puis sur pour clore cette discussion …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …


    Salut Marc,

    Si je comprends bien, avec ton code, un messagebox apparaitrait avec le numéro de colonne où se trouve le titre "Quantity" dans ton exemple, mais du coup il faudrait rentrer dans le code pour adapter cette colonne à mes formules, et le faire à chaque fois non ?

    Je dois partager ce fichier avec le reste de mon équipe, qui n'ont pas de connaissance VBA, ça me parait un peu compliqué de mettre en place, il faudrait le code le plus automatisé possible, de manière à ce que cela marche sans manipulation ou sans rentrer dans le code pour n'importe quel utilisateur.

  9. #9
    Expert éminent
    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
    Par défaut

    C'était une simple démonstration avec justement le B-A-BA d'Excel - une simple formule de calculs - et non du pur VBA
    prouvant l'utilité de la fonction de feuille de calculs EQUIV remplaçant donc tout un fatras de code utilisant une boucle
    par une simple et unique formule (!), le MsgBox servant juste à afficher le résultat de cette démonstration …

    Évidemment tu l'adaptes à ton besoin et si tu préfères ton usine à gaz à coup de boucle, libre à toi !
    Mais là ton argument concernant ton équipe ne tient évidemment plus …

    Quant au code utilisant la méthode Find, voir déjà l'aide VBA interne et son exemple.

    Et via un filtre avancé (voir le tutoriel, quoique déjà juste en lisant l'aide VBA interne d'AdvancedFilter)
    avec pour destination une autre feuille de calculs avec les colonnes déjà triées,
    non seulement il est possible de se passer d'un code mais si vraiment nécessaire, cela requière une seule ligne de code
    Comme quoi « Penser Excel Avant VBA » peut s'avérer extrêmement rentable …

  10. #10
    Membre averti
    Homme Profil pro
    Employé voulant apprendre à automatiser
    Inscrit en
    Février 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Employé voulant apprendre à automatiser

    Informations forums :
    Inscription : Février 2018
    Messages : 61
    Par défaut
    Pardonne moi mon manque d'experience, je ne suis pas sûr d'avoir tout saisi dans ton message,je suis tout nouveau dans le monde du VBA. Est-il possible d'exploiter la fonction EQUIV (MATCH) dans le cas d'un code VBA, admettons que l'on code cette ligne, que l'on enlève le MSGBox, et qu'on demande de copier cette colonne "matché" à la colonne A par exemple, cela serait-il possible ?

    Je vais regarder de plus près la fonction "AdvancedFilter", pour voir à quoi ça ressemble exactement.

  11. #11
    Membre averti
    Homme Profil pro
    Employé voulant apprendre à automatiser
    Inscrit en
    Février 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Employé voulant apprendre à automatiser

    Informations forums :
    Inscription : Février 2018
    Messages : 61
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    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
    Public Feuilles As ObjectPublic Entete As Object
    Sub test()
    Set Feuilles = CreateObject("Scripting.Dictionary")
    For i = 1 To ThisWorkbook.Sheets.Count
        Feuilles.Add ThisWorkbook.Sheets(i).Name, CreateObject("Scripting.Dictionary")
        With ThisWorkbook.Sheets(i).UsedRange
            For c = 1 To .Columns.Count
                Feuilles(ThisWorkbook.Sheets(i).Name).Add .Cells(1, c).Value, c
            Next
        End With
    Next
    For i = 1 To ThisWorkbook.Sheets.Count
           With ThisWorkbook.Sheets(i).UsedRange
            For c = 1 To .Columns.Count
             Debug.Print .Cells(1, c).Value, Feuilles(ThisWorkbook.Sheets(i).Name)(.Cells(1, c).Value)
            Next
        End With
    Next
    End Sub
    Salut Dysorthographie,

    Merci pour ton aide, j'ai un peu de mal à analyser ton code.

    Cela dit ça me fait penser, si je rajoutais une ligne pour classer les colonnes par ordre alphabetique au début du code, les colonnes seraient de cette façon toujours disposées dans le même ordre, c'est peut être ce que tu as fait dans ce code

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

Discussions similaires

  1. [XL-2010] Trier aléatoirement chacune des colonnes d'un tableau
    Par Palatinus dans le forum Excel
    Réponses: 6
    Dernier message: 17/05/2016, 12h33
  2. Réponses: 2
    Dernier message: 06/06/2010, 16h15
  3. [E-03] Classer des colonnes dans un TCD
    Par neiluj26 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/03/2009, 11h32
  4. classer des colonnes sur vb.net
    Par mohcheb90 dans le forum VB.NET
    Réponses: 4
    Dernier message: 23/06/2008, 19h06
  5. Réponses: 7
    Dernier message: 29/05/2008, 16h47

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