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 :

Selection données filtre en fonction d'une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de backx3
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 173
    Points : 89
    Points
    89
    Par défaut Selection données filtre en fonction d'une colonne
    Bonjour bonjour !
    Je fais encore appel à vous parce que vous êtes les meilleurs et qu'un nouveau problème se présente à moi !

    J'ai un tableau avec plusieurs filtres de données, et j'aimerais que dans ma macro, je sélectionne certaines données d'une colonne avec un filtre mais pas en fonction du numéro de la colonne mais en fonction du nom de cette colonne.

    Le code pour sélectionner mes données en fonction du numéro de la colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub filtre()
    ' filtre Macro
     
        ActiveSheet.Range("$A$1:$AP$9087").AutoFilter Field:=30, Criteria1:=Array( _
            "DE-VA POLE AMERIQUES", "DE-VA POLE FRANCE", "DE-VA POLE ROUMANIE", _
            "DE-VB POLE AMERIQUES", "DE-VB POLE COREE", "DE-VB POLE FRANCE", _
            "DE-VB POLE ROUMANIE", "DE-VD POLE AMERIQUES", "DE-VD POLE COREE", _
            "DE-VD POLE FRANCE", "DE-VD POLE ROUMANIE", "DE-VE POLE AMERIQUES", _
            "DE-VE POLE COREE", "DE-VE POLE FRANCE", "DE-VE POLE ROUMANIE"), Operator:= _
            xlFilterValues
    End Sub
    Auriez-vous une petite idée pour faire ça en fonction du nom de la colonne ? (Le nom de la colonne c'est "PoleTrait")


  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une piste ici

    Cordialement.

  3. #3
    Membre régulier Avatar de backx3
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 173
    Points : 89
    Points
    89
    Par défaut
    Merci de ta réponse rapide.
    Mais ton code sert à repérer la présence d'une cellule, et j'ai ce code là moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Set Cel = Cells.Find(what:="Fonction*") '(Où fonction est le nom de ma cellule)
      If Not Cel Is Nothing Then
        Cells(1, Cel.Column).Resize(Cells(Rows.Count, Cel.Column).End(xlUp).Row).Select
      Else
        MsgBox "Pas trouvé le nom "
        Exit Sub
      End If
    Mais je voudrais, à travers le filtre, cocher des données en fonction du nom de ma cellule, et dans ton code il n'y a rien qui me mette sur cette piste..
    (Ou alors j'ai pas compris ton code ^^)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par backx3 Voir le message
    (Ou alors j'ai pas compris ton code ^^)
    Si le principe est de trouver la colonne s'appelant "PoleTrait" dans la ligne 1 (ligne de titre), le code ci-dessous fonctionne.

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Option Explicit
     
    Public DetectionColonnes As String
     
    Sub Filtre()
     
    Dim LigneDeTitre As Long
    Dim ColPoleTrait As Integer
     
        With ActiveSheet
     
             LigneDeTitre = 1
             DetectionColonnes = "Absence colonnes :" & Chr(10)
             ColPoleTrait = ColonneFeuille(ActiveSheet, LigneDeTitre, "PoleTrait")
     
             If DetectionColonnes = "Absence colonnes :" & Chr(10) Then
                .Range("$A$1:$AP$9087").AutoFilter Field:=ColPoleTrait, Criteria1:=Array( _
                    "DE-VA POLE AMERIQUES", "DE-VA POLE FRANCE", "DE-VA POLE ROUMANIE", _
                    "DE-VB POLE AMERIQUES", "DE-VB POLE COREE", "DE-VB POLE FRANCE", _
                    "DE-VB POLE ROUMANIE", "DE-VD POLE AMERIQUES", "DE-VD POLE COREE", _
                    "DE-VD POLE FRANCE", "DE-VD POLE ROUMANIE", "DE-VE POLE AMERIQUES", _
                    "DE-VE POLE COREE", "DE-VE POLE FRANCE", "DE-VE POLE ROUMANIE"), Operator:= _
                    xlFilterValues
            Else
                MsgBox DetectionColonnes, vbCritical
            End If
        End With
     
    End Sub
     
     
     
    Function ColonneFeuille(ByVal FeuilleTitre As Worksheet, ByVal LigneTitre As Long, ByVal TitreRecherche As String) As Long
     
    Dim NbColonnes As Long
    Dim Cellule As Range
    Dim Aire As Range
     
        With FeuilleTitre
     
             ColonneFeuille = 0
             NbColonnes = .Cells(LigneTitre, .Columns.Count).End(xlToLeft).Column
             Set Aire = .Range(.Cells(LigneTitre, 1), .Cells(LigneTitre, NbColonnes))
     
             For Each Cellule In Aire
                 Select Case Mid(Cellule.Value, 1, Len(TitreRecherche))
                        Case TitreRecherche
                             ColonneFeuille = Cellule.Column
                             Exit For
                 End Select
             Next
     
             If ColonneFeuille = 0 Then DetectionColonnes = DetectionColonnes & Chr(10) & TitreRecherche
     
             Set Aire = Nothing
     
        End With
     
    End Function

    Cordialement.

  5. #5
    Membre régulier Avatar de backx3
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 173
    Points : 89
    Points
    89
    Par défaut
    Ton code fonctionne mais j'aimerais essayer de l'insérer dans ma macro et donc le "Public DetectionColonnes As String" me dérange car je ne peux pas le mettre dans mon sub.
    Aurais-tu une alternative pour que je puisse le mettre dans ma macro stp ? (Désolé je m'y connais pas énormément)
    C'est la première fois que je vois un "Public" comme déclaration ^^

  6. #6
    Invité
    Invité(e)
    Par défaut
    De quelle macro s'agit-il ?

    Quant à Public DetectionColonnes As String, il n'y a pas besoin d'y toucher, cette déclaration doit être en tête de module. La déclaration est là parce que cette variable est utilisée dans les deux procédures. J'aurais pu remplacer Public par Private tant que les deux procédures sont dans le même module.

    Cordialement.
    Dernière modification par AlainTech ; 07/03/2015 à 14h33. Motif: Suppression de la citation inutile

  7. #7
    Membre régulier Avatar de backx3
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 173
    Points : 89
    Points
    89
    Par défaut
    Aaah oui d'accord tu fais ça en deux modules toi.
    En fait moi, j'ai une seule macro avec du code dedans, et j'aimerais entrer ton code en plein milieu du miens.

    Et je ne sais pas comment on fait pour changer de module dans la macro.

    Pourrais-tu m'expliquer comment tu fais pour que la machine sache quand aller sur l'autre module, puis revenir sur la macro d'origine stp ?
    Ou alors plus simple, comment je dois faire pour faire de ton code un seul et même module que je puisse insérer dans mon code ^^

    Désolé si c'est pas très clair

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par backx3 Voir le message
    Et je ne sais pas comment on fait pour changer de module dans la macro.
    Pour info : le module, c'est tout le code que j'ai envoyé. Il comprend une procédure Sub et une procédure Function et la déclaration de la variable et Option Explicit. Il n'y a pas à changer de module.

    Citation Envoyé par backx3 Voir le message
    Pourrais-tu m'expliquer comment tu fais pour que la machine sache quand aller sur l'autre module, puis revenir sur la macro d'origine stp ?
    La deuxième procédure est une fonction. La particularité de la fonction, c'est qu'elle contient le résultat comme une variable (ici de type long). Il suffit de faire appel à la fonction dans la première procédure pour que le programme comprenne qu'il faut aller chercher le résultat dans la deuxième.

    Citation Envoyé par backx3 Voir le message
    Ou alors plus simple, comment je dois faire pour faire de ton code un seul et même module que je puisse insérer dans mon code ^^
    C'est inutile.


    Si le code correspond au fonctionnement que vous souhaitiez à l'origine, prenez le en l'état. Lorsque vous aurez suffisamment avancé dans le code VBA, vous pourrez modifier la procédure à volonté pour grouper les deux codes.

    Je me décroche de cette discussion.

    Bon courage à vous.

    Cordialement.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/05/2010, 09h07
  2. Supprimer lignes en fonction d'une colonne
    Par eillon dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/12/2007, 11h15
  3. [MySQL] Trier les résultats en fonction d'une colonne ordre
    Par eclipse012 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 05/01/2007, 13h59
  4. [formulaire]appliquer un filtre en fonction d'une liste
    Par hansaplast dans le forum Access
    Réponses: 1
    Dernier message: 24/07/2006, 12h31
  5. Données contenant un apostrophe dans une colonne
    Par david71 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 13/09/2005, 17h02

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