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 :

Macro Excel pour supprimer colonnes dont le libellé ne contient pas certaines informations et fusionner


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Août 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Trésorier
    Secteur : Finance

    Informations forums :
    Inscription : Août 2018
    Messages : 5
    Points : 0
    Points
    0
    Par défaut Macro Excel pour supprimer colonnes dont le libellé ne contient pas certaines informations et fusionner
    Bonjour chers amis,

    c'est mon premier post (si vous avez des remarques sur le process à faire je suis à l'écoute) et je vous expose mon problème :

    j'ai à la base plus de 1700 fichiers excel que j'ai téléchargé d'un site publiant des informations financières (une publication sous format de fichier excel par jour), que j'ai réussi à fusionner en un seul fichier excel ( 70 Mégaoctets pour le fichier final).
    l'essentiel est de concaténer l'information en une seule feuille, que je pourrai alimenter au jour le jour, et sur laquelle je pourrai appliquer des filtres et faire des calculs simple (évolution d'un chiffre).

    Cependant, les 1700 feuilles que j'ai sur mon fichier excel n'ont pas le même nombre de colonnes (il y en a certaines qui vont jusqu'à la colonne Z, d'autres AB ou AC... ), donc il me faut une 1ere macro qui supprime les colonnes n'ayant pas "XXXX" et "YYYY" .... au niveau du libellé (l'entête) ou encore mieux une macro qui ne garde que les colonnes ayant "XXXX" et "YYYY" et .... (une 15ene de colonne) au niveau du libellé (comme ça je ne garde que les colonnes qui m’intéressent)

    par la suite il me faut une 2eme macro qui me permettra de fusionner toutes les feuilles en une seule, j'aurai une feuille finale comportant toute les informations, et sur laquelle je pourrai faire des tri.

    Enfin, il me faudra une 3eme macro pour supprimer les lignes contenant les libellés (suite à la fusion de toutes les feuilles on se retrouve avec la première ligne de chaque feuille contenant les libellés un peu partout).


    Je vous remercie pour votre aide et conseil.

    PS : y a t il une solution plus simple afin d'avoir un fichier moins lourd coté taille et plus rapide coté utilisation?

    Bien à vous

  2. #2
    Membre confirmé
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 365
    Points : 631
    Points
    631
    Par défaut
    Bonjour

    c'est certainement très clair pour toi.

    il me faut une 1ere macro qui supprime les colonnes n'ayant pas "XXXX" et "YYYY" .... au niveau du libellé (l'entête)
    ou encore mieux une macro qui ne garde que les colonnes ayant "XXXX" et "YYYY"

    Je ne comprends pas bien,il faudrait savoir.

  3. #3
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Points : 367
    Points
    367
    Par défaut
    "Je voudrais ca … par la suite ca … et enfin ca…" heu il faut que tu travailles aussi un peu, sinon il y a des sites de freelance

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Août 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Trésorier
    Secteur : Finance

    Informations forums :
    Inscription : Août 2018
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    bonsoir a_diard,

    pour ma première macro, je voulais dire que j'ai un nombre de colonne différent d'une page à l'autre, et je voudrai garder que les colonnes ayant un entête (libellé de colonnes, les titres) précis, exemple : ne garder que les colonnes contenant "souscripteur, prix, actif , type de placement" et supprimer toutes les colonnes ne contenant pas ces informations, et ce sur tout les feuilles du classeur.

    Bien cordialement.

  5. #5
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Points : 367
    Points
    367
    Par défaut
    Un léger progrès,
    vous remplacez "il me faut" par "je voudrai" ...

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Août 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Trésorier
    Secteur : Finance

    Informations forums :
    Inscription : Août 2018
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    sogedic je te remercie mais ce forum est un espace d'entre aide gratuit, où les gens passionnés et fort dans un domaine aident volontairement d'autres gens, donc je ne vois pas en quoi tes commentaires aident à part polluer le post, si tu n'aimes pas quoi que ce soi dans mon post je te prie de ne pas répondre et merci.

  7. #7
    Membre confirmé
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 365
    Points : 631
    Points
    631
    Par défaut
    regarde ceci pour une feuille

    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
    Option Base 1
    Sub charger()
    Dim extraitfeuille()
    colonneactive = Array("souscripteur", "prix", "actif", "type de placement")
     nblignes = ActiveSheet.UsedRange.Rows.Count
     dernierecolonne = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
     
     feuilleactive = Range(Cells(1, 1), Cells(nblignes, dernierecolonne))
    ReDim extraitfeuille(nblignes, UBound(colonneactive))
    For colonne = LBound(colonneactive) To UBound(colonneactive)
    extraitfeuille(1, colonne) = colonneactive(colonne)
    With ActiveSheet.Range(Cells(1, 1), Cells(1, dernierecolonne))
        Set c = .Find(colonneactive(colonne), LookIn:=xlValues)
        If Not c Is Nothing Then
            colonnedansfeuille = c.Column
            For ligne = 2 To nblignes
          extraitfeuille(ligne, colonne) = feuilleactive(ligne, colonnedansfeuille)
         Next
        End If
    End With
    Next
    ActiveSheet.Range(Cells(1, 1), Cells(nblignes, dernierecolonne)).ClearContents
    ActiveSheet.Range(Cells(1, 1), Cells(nblignes, 4)) = extraitfeuille
     
    End Sub
    ce code n'extrait que les intitulés indiqués dans

    colonneactive = Array("souscripteur", "prix", "actif", "type de placement")

    intitulés exacts..

  8. #8
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,
    Citation Envoyé par najmjob Voir le message
    par la suite il me faut une 2eme macro qui me permettra de fusionner toutes les feuilles en une seule, j'aurai une feuille finale comportant toute les informations, et sur laquelle je pourrai faire des tri.
    Fait une boucle sur toutes tes feuilles sauf la première dans laquelle tu fais un copier coller des données sur la première feuille

    Enfin, il me faudra une 3eme macro pour supprimer les lignes contenant les libellés (suite à la fusion de toutes les feuilles on se retrouve avec la première ligne de chaque feuille contenant les libellés un peu partout).
    C'est plus simple je pense de ne pas copier les entêtes lors de l'étape précédente

    sogedic je te remercie mais ce forum est un espace d'entre aide gratuit, où les gens passionnés et fort dans un domaine aident volontairement d'autres gens, donc je ne vois pas en quoi tes commentaires aident à part polluer le post, si tu n'aimes pas quoi que ce soi dans mon post je te prie de ne pas répondre et merci.
    Aide ne signifie pas tout faire à ta place, c'est ce que te faisait remarquer (je pense) sogedic, là tu arrive avec un cahier des charges et rien d'autres, tu ne demande pas de l'aide mais qu'on fasse le travail à ta place, ce qui contraire au règlement du forum.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Août 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Trésorier
    Secteur : Finance

    Informations forums :
    Inscription : Août 2018
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    Bonjour tout le monde,

    Merci beaucoup A_diard pour ta réponse et le temps que tu as prit à faire cette macro, ca marche effectivement, sauf que çà me supprime même le contenu des colonnes qui m’intéressent d'une part, et j'aurai besoin que la macro s'applique à toutes les feuilles du classeur. Merci deja pour ton effort.

    Halaster merci beaucoup pour tes réponses et remarques, effectivement c'est un peu lourd ce que je demande (dans le sens où c'est 3 macros dans un fichier qui me sera d'une grande utilité), c'est juste que j'ai des macros qui ne répondent pas forcement à ce que je recherche. ce n'est pas par paresse que je demande (ou sous traite comme pensent certains) mais par manque de connaissance pointues et de temps ... si je pouvais sous traiter cela en bonne et due forme là où je suis, j'aurai payé pour ça afin d'avoir un travail livré clé en main, j'ai déjà passé des jours à trouver comment extraite plus de 1700 fichier xls d'un site web, et faire l'analyse financière en parallèle. je n'ai pas de formation en VBA (légère, il y a 10 ans) et de mon coté je serai ravi de pouvoir aider en finance si je comprends la requête, sans penser que la personne sous traite ou quoi que ce soit (j'aide si je peux, je n'aide pas si je ne veux pas, sans rentrer dans les détails et interpréter le message d'aide de la personne etc,)

    Merci encore pour vos réponses.

  10. #10
    Membre confirmé
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 365
    Points : 631
    Points
    631
    Par défaut
    Citation Envoyé par najmjob Voir le message
    Bonjour tout le monde,

    Merci beaucoup A_diard pour ta réponse et le temps que tu as prit à faire cette macro, ca marche effectivement, sauf que çà me supprime même le contenu des colonnes qui m’intéressent d'une part, et j'aurai besoin que la macro s'applique à toutes les feuilles du classeur. Merci deja pour ton effort.

    Halaster merci beaucoup pour tes réponses et remarques, effectivement c'est un peu lourd ce que je demande (dans le sens où c'est 3 macros dans un fichier qui me sera d'une grande utilité), c'est juste que j'ai des macros qui ne répondent pas forcement à ce que je recherche. ce n'est pas par paresse que je demande (ou sous traite comme pensent certains) mais par manque de connaissance pointues et de temps ... si je pouvais sous traiter cela en bonne et due forme là où je suis, j'aurai payé pour ça afin d'avoir un travail livré clé en main, j'ai déjà passé des jours à trouver comment extraite plus de 1700 fichier xls d'un site web, et faire l'analyse financière en parallèle. je n'ai pas de formation en VBA (légère, il y a 10 ans) et de mon coté je serai ravi de pouvoir aider en finance si je comprends la requête, sans penser que la personne sous traite ou quoi que ce soit (j'aide si je peux, je n'aide pas si je ne veux pas, sans rentrer dans les détails et interpréter le message d'aide de la personne etc,)

    Merci encore pour vos réponses.
    Bonjour, je ne comprends pas bien.

    Pour récupérer d'autres colonnes , il suffit d'ajouter l’entête de la colonne désirée dans le code

    colonneactive = Array("souscripteur", "prix", "actif", "type de placement", "nouvellecolonnedesiree")

    pour le faire sur toutes les feuilles il suffit de faire une boucle sur les feuilles

    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub traitertouteslesfeuilles()
    Dim sh as worksheet
    For each sh in activeworkbook.sheets
    sh.activate
    call charger
    next sh
    end sub

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Août 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Trésorier
    Secteur : Finance

    Informations forums :
    Inscription : Août 2018
    Messages : 5
    Points : 0
    Points
    0
    Par défaut
    rebonjour a-diard,

    merci encore !
    au fait avec cette macro je ne garde que l’entête de la colonne avec rien en dessous que des cellules vides, alors que j'ai besoin de l’entête ainsi que des lignes en dessous contenant les informations.

    cordialement

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    en retard ayant vu ton message privé

    Pour ne garder que des colonnes dont les titres en ligne 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub SuppressionColonnes()
    Const LignesAgarder As String = "Titre1|Titre4|Titre6|Titre7|"    'Metrre les titres à laisser sépérés par un |
    Dim Ws As Worksheet
    Dim j As Integer
     
    Application.ScreenUpdating = False
    For Each Ws In ThisWorkbook.Worksheets
        With Ws
            For j = .Cells(1, .Columns.Count).End(xlToLeft).Column To 1 Step -1
                If InStr(LignesAgarder, .Cells(1, j) & "|") = 0 Then .Columns(j).Delete
            Next j
        End With
    Next Ws
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/08/2018, 20h47
  2. [XL-2013] Macro excel pour copier/coller des colonnes specifique du feuille A a Feuille B
    Par nono_12 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/10/2017, 21h08
  3. Réponses: 0
    Dernier message: 17/11/2012, 17h51
  4. macro excel pour supprimer des lignes comportant un caractere spécial
    Par fredo49 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/04/2011, 16h32
  5. Aide sur les macros Excel pour recopie auto de données
    Par nicoduhavre dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/11/2005, 08h38

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