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 :

Tester si valeur d'une cellule est contenue dans une plage


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
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 57
    Par défaut Tester si valeur d'une cellule est contenue dans une plage
    Bonjour,


    Je cherche à supprimer toutes les colonnes inutiles d'une base de données qui en contient 100 et dont les entêtes de colonne se trouvent en ("A1:A100").

    Je dois donc supprimer 90 colonnes et ne laisser que les 10 colonnes utiles.

    Pour ce faire, je teste le nom de chaque entête de colonne. Si l'entête de colonne se retrouve dans MaPlage (qui contient les 10 noms de colonne que je veux conserver), alors ne rien faire, sinon supprimer la colonne et tester le nom de la suivante.

    Mais je patauge un peu ...


    Quelqu'un aurait-il un début de solution ?

    Merci d'avance.

    Fabert

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 115
    Par défaut
    Bonjour

    Perso, je testerai la présence du nom de la colonne via un cellule Excel avec le résultat dans une autre cellule ("MonTest")via une formule du genre :
    =SI(ESTNA(EQUIV(MaRecherche;MaPlage;0));FAUX;VRAI)

    Donc :
    Début Sub
    Pour toutes les entêtes de colonnes
    Chargement du nom de colonne cherchée dans une cellule nommée "MaRecherche"
    (Récupération du résultat dans dans la cellule "MonTest")
    Si "MonTest"=FAUX Alors Sélection de la colonne
    Fin Pour
    Effacement de la sélection
    Fin Sub

    Cordialement

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    une façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub suppCol()
        Dim dict, lig As Long, col As Long, pl() As Variant
        Set dict = CreateObject("Scripting.Dictionary")
        pl = [maPlage].Value
        For lig = 1 To UBound(pl)
            If pl(lig, 1) <> "" Then dict(pl(lig, 1)) = pl(lig, 1)
         Next lig
        Application.ScreenUpdating = False
        For col = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
            If Not dict.exists(Cells(1, col).Value) Then Columns(col).Delete
        Next col
    End Sub
    eric

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    Bonjour

    au premier abord la question semble simple mais c'est un peu ambiguë

    quand tu parle d'entête du parle bien de la 1 ere cellule de colonne ??

    si c'est ca c'est pas bien compliqué


    ta liste est en colonne A de 1 a 100

    ta base de donne c'est le reste si j'ai bien compris

    donc on testera la 1 cellule de chaque colonne
    je n'ai pas tester mais ca doit faire un truc comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    With ActiveSheet
    Application.ScreenUpdating = False
    For I = 2 To .Cells(1, Columns.Count).End(xlToLeft).Column
    If .Range("A1:A100").Find(.Cells(1, I)) Is Nothing Then
    .Columns(I).Delete Shift:=xlToLeft
    End If
    next
    End With
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 57
    Par défaut
    Un grand merci à chacun pour vos solutions.


    Je pense pouvoir trouver mon bonheur grâce à vos réponses.

    Voilà, j'ai utilisé la solution de Patricktoulon que j'ai légèrement modifiée afin de tester le nom des colonnes et de les supprimer de la droite vers la gauche.

    J'ai tenté de comprendre la solution de Eriiic qui était probablement bonne aussi, mais j'avoue que je n'ai pas tout compris ;-(

    Merci en tout cas à chacun pour votre aide.

    Fabert

    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
    Sub test()
     
        With ActiveSheet
     
            For I = .Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
     
                If Sheets("Feuil2").Range("A1:C1").Find(.Cells(1, I)) Is Nothing Then
     
                    .Columns(I).Delete Shift:=xlToLeft
     
                End If
     
            Next
     
        End With
     
    End Sub

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    En fait dans un premier temps je met en mémoire les titres à supprimer (dictionary) puis je supprime.
    eric

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

Discussions similaires

  1. [XL-2007] Sélectionner une feuille dont le nom est contenu dans une cellule
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/06/2014, 20h47
  2. Réponses: 4
    Dernier message: 27/08/2013, 19h21
  3. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  4. Réponses: 5
    Dernier message: 20/08/2010, 10h01
  5. [VBA-E] Savoir si une cellule est contenue dans une plage
    Par psych0o0 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2006, 14h12

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