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 :

Suppression colonne suivant valeur cellule 1ère ligne (en-tête) [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Points : 19
    Points
    19
    Par défaut Suppression colonne suivant valeur cellule 1ère ligne (en-tête)
    Bonjour,

    J'ai besoin d'une macro qui supprime les colonnes d'un fichier ayant pour valeur en cellule de 1ère ligne (en-tête de la colonne) "Service", "Métier exercé" et "Date formation".

    Ci-dessous le code que j'essaye d'utiliser pour cela mais il ne fonctionne pas... Je n'arrive pas à trouver la solution.

    Quelqu'un pour m'aider ? Par avance merci

    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
     
    Sub SupprCol()
     
    Dim i%
    Dim j%
     
    For i = 1 To 1 'La première ligne
    For j = 1 To 60 'les 60 premières colonnes
     
    If Cells(i, j) = "Service" Then
    If Cells(i, j) = "Métier exercé" Then
    If Cells(i, j) = "Date formation" Then
     
    Cells(i, j).EntireColumn.Delete
     
    End If
    End If
    End If
     
    Next
    Next
     
     
    End Sub

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim LastCol As Integer, i As Integer
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For i = LastCol To 1 Step -1
            If .Cells(1, i).Value <> "" Then
                If InStr("Service|Métier exercé|Date formation|", .Cells(1, i).Value) > 0 Then .Columns(i).Delete
            End If
        Next i
    End With
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Bonjour,

    Tu peux essayer ça.

    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
    Sub SupprCol()
     
    Dim i As Long
    Dim j As Long
     
    For i = 1 To 1 'La première ligne
     
        For j = 1 To 60 'les 60 premières colonnes
     
            If Cells(i, j) = "Service" Or Cells(i, j) = "Métier exercé" Or Cells(i, j) = "Date formation" Then
                Cells(i, j).EntireColumn.Delete
            End If
     
        Next
     
    Next
     
    End Sub
    Par contre ta variable i ne sert à rien vu qu'elle ne change pas. ( c'est peut être pour la suite du coup je l'ai laissé).

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Re bonjour,

    Ceux qui ont voté négativement pour mon poste, peuvent-il m'expliquer pourquoi? Je souhaite juste progresser, mais si on ne m'explique pas ce qui ne vas pas je resterai toujours au même stade. Merci d'avance.

  5. #5
    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
    Bonsoir
    Le vote négatif signifie que tu n'as pas testé avant de répondre.

    Suppose que tu as an A1: Service et en B1 Service et en C1 Toto
    Les colonne A et B devraient être supprimé

    Pour j=1, tu supprimes la colonne 1, la colonne 2 devient colonne 1 et colonne 3 devient colonne 2

    Pour j=2, en B1 tu as l'ancienne C1, càd Toto ne sera pas supprimé

    En fin de compte, tu auras Service en A1 (l'ancienne B1)

    Moralité:

    Pour la suppression, commence de la dernière colonne vers la première
    Pour la réponse au forum, il faudrait tester au préalable le code proposé
    Pour le vote, c'est un détail et n'est en aucun cas une insulte.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 273
    Points : 91
    Points
    91
    Par défaut
    Merci pour ta réponse

    J'avais fait un test mais j'ai pas pensé à mettre deux fois la même chose dans deux cellule côte à côte.

    Pour le vote ne t'inquiète pas je le prends pas mal du tout c'est juste que j'aime bien comprendre où sont mes erreurs, pour éviter de les refaire. Et sans explication ce n'est pas facile.

    Merci encore

    Du coup j'ai corrigé mon code je vous le mets même si ta solution me parait plus abouti.

    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
    Sub SupprCol()
     
    Dim i As Long
    Dim j As Long
     
    For i = 1 To 1 'La première ligne
     
        For j = 1 To 60 'les 60 premières colonnes
     
            If Cells(i, j) = "Service" Or Cells(i, j) = "Métier exercé" Or Cells(i, j) = "Date formation" Then
                Cells(i, j).EntireColumn.Delete
                j = j - 1
            End If
     
        Next
     
    Next
     
    End Sub

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Une autre option
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub SupprCol()
    Dim j As Long
      For j = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
        Select Case Cells(1, j)
         Case "Service", "Métier exercé", "Date formation"
          Columns(j).Delete
        End Select
      Next
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Mercatog, Mrfreeze117 et Corona : un grand merci pour votre aide
    J'ai utilisé le code de Corona, c'est le plus court (économie de lignes )
    Bonne journée

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 16
    Points : 13
    Points
    13
    Par défaut Même problème
    Bonjour,

    Je rencontre le même problème mais dans le sens opposé: je cherche à supprimer les colonnes dont la première cellule ne contient ni les valeurs "Service", "Métier exercé" et "Date formation" (pour reprendre l'exemple utilisé.

    J'ai beau utiliser <>, tout disparaît

    Quelqu'un pourrait-il m'aider?

    Judel

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu peux utiliser le Case Else pour effectuer la suppression. Il y a d'autres solutions mais pas le temps de m'y pencher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub SupprCol()
      Dim j As Long
      For j = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
        Select Case Cells(1, j)
         Case "Service", "Métier exercé", "Date formation"
         Case Else
           Columns(j).Delete
        End Select
      Next
    End Sub
    Attention que la casse doit être respectée sinon il faut changer le test en utilisant la fonction LCase ou UCase (lignes 4 et 5 à modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Select Case LCase(Cells(1, j))
         Case "service", "métier exercé", "date formation"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    C'était exactement ça!
    Merci beaucoup Philippe, je me serai arraché bien moins de cheveux si j'avais demandé cette aide bien plus tôt!

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

Discussions similaires

  1. [XL-2010] Masquer colonne selon valeur cellule sur autre onglet
    Par kit2412 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/05/2013, 17h11
  2. [XL-2003] Mise en forme conditonelle suivant valeur cellule supérieure
    Par jamesleouf dans le forum Excel
    Réponses: 3
    Dernier message: 09/04/2013, 16h09
  3. Renvoyer nom ligne/colonne suivant valeurs matrice
    Par Stepsbysteps dans le forum R
    Réponses: 5
    Dernier message: 25/03/2013, 15h23
  4. [XL-2003] afficher une cellule d'une colonne suivant sa valeur
    Par lafanchette2000 dans le forum Excel
    Réponses: 19
    Dernier message: 13/08/2009, 09h31
  5. [CR9]Masquer des données (colonnes) suivant valeur champ
    Par neo.51 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 05/09/2005, 09h43

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