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 :

Extraction d'une liste de cellules d'un tableau ayant la même valeur définie [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Extraction d'une liste de cellules d'un tableau ayant la même valeur définie
    Bonjour à tous,

    Je suis à la recherche d'une solution concernant un de mes projets. J'ai cherché sur la toile une éventuelle solution, sans réels succès...

    J'ai défini une plage excel C4 : DD129 comme étant une "zone géographique", chaque cellule étant l'équivalent d'une surface (cad une cellule égale 20mx20m). Je rempli manuellement chaque cellule suivant des codes bien définis : exemple "Y1" ou "Y2" etc...

    Ce que j'essaye de faire c'est d'extraire automatiquement dans la colonne DI a partir de la cellule DI4 la liste des cellules contenant la valeur "Y1" (l'adresse). En DJ, la liste des cellules contenant "Y2" etc ...

    Ces adresses me permettront après coup de faire le lien avec une autre feuille contenant les codes identifiants de chaque cellule. (structuré similairement C4 : DD129)

    Mon niveau en VBA est proche du néant et je n'ai pas trouvé de solutions avec les formules excel

    Merci d'avance

    jerodino

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Une piste avec une fonction personnalisée.
    Copiez le code suivant dans un module standard

    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
    'ADRESSE_VALEUR
    'Crée une adresse de(s) cellule(s) sous forme de texte, à partir de
    'la valeur de la cellule de recherche spécifiée.
    '
    '### Syntaxe ###
    'ADRESSE(Plage;Recherche;[Num_Absolu])
    '
    'Plage      est la plage de cellule(s) dont on recherche l'adresse.
    '
    'Recherche  est la cellule contenant le mot recherché.
    '
    'Num_Absolu spécifie le type de référence à renvoyer.
    '
    '--------------------------------------------------
    'L 'argument Num_Absolu renvoie ce type de référence
    '1 Absolue
    '2 Ligne absolue, colonne relative
    '3 Ligne relative, colonne absolue
    '4 ou omis Relative
     
    Function ADRESSE_VALEUR(Plage As Range, Recherche As Range, Optional Num_Absolu As Integer = 4) As String
    Dim C As Range
    Dim R As Range
    For Each C In Plage
      If C = Recherche Then
        If R Is Nothing Then
          Set R = C
        Else
          Set R = Application.Union(R, C)
        End If
      End If
    Next C
    If Not R Is Nothing Then
      Select Case Num_Absolu
        Case 1
          ADRESSE_VALEUR = R.Address
        Case 2
          ADRESSE_VALEUR = R.Address(True, False)
        Case 3
          ADRESSE_VALEUR = R.Address(False, True)
        Case 4
          ADRESSE_VALEUR = R.Address(False, False)
      End Select
    End If
    Set R = Nothing
    End Function
    Les 3 arguments de la fonction sont expliqués au début du code.

    Exemple d'utilisation :
    1) dans une nouvelle feuille, renseignez la colonne A (à partir de A1) des valeurs recherchées (Y1, Y2, etc)
    2) dans la cellule B1 tapez la formule
    =ADRESSE_VALEUR('Ma feuille data'!C4:DD129;$A1;4)
    Il faudra adapter 'Ma feuille data' du nom de votre feuille contenant les données
    3) la formule a le même comportement qu'une formule Excel intégrée, on peut donc la reproduire vers le bas en tirant le coin inférieur gauche avec la souris

    En faisant un copier/coller par valeurs, on récupère le texte résultant de la formule.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour PMO2017,

    Premièrement un grand merci pour la réponse !
    J'aime beaucoup le principe de la formule personnalisée, vraiment très intéressant. Tout a bien marché, cela me donne une liste de références et de plages de référence mais par contre dans une seule cellule.
    Est-il possible d'obtenir le même résultat mais avec une référence par cellule ? Si 100 cellules rencontrent le critère, j'ai besoin d'avoir 100 cellules résultats.

    En tout cas je commence à pleinement réaliser le pouvoir de VBA !

    Merci d'avance

    jerodino

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    J'avais cru comprendre que vous vouliez l'intégralité des adresses des cellules afin de pouvoir faire, en VBA, une affectation dans une variable Range de toute la plage concernée.
    J'ai mal compris.
    *******
    On peut contourner avec la démarche manuelle suivante :
    1) faire un copier/coller Spécial valeurs et sélectionner la plage obtenue (qui doit être sur une seule colonne)
    2) faire menu Données/Convertir
    3) dans la boîte de dialogue qui apparaît
    - cocher Délimité
    - cliquer sur Suivant
    - cocher Virgule
    - cliquer sur Terminer

    Obtenez-vous le résultat désiré ?
    Sinon, il faudra oublier la fonction personnalisée et faire un traitement par procédure Sub.
    A plus.

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    En fait j'avais pensé à ça mais j'ai vraiment besoin d'avoir l'adresse de chacune des cellules, j'ai essayé de bidouiller quelque chose ...

    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
    Sub Selection()
    Dim FL1 As Worksheet, Cell As Range, Plage As Range
    Dim R As Range
    Dim i As Integer
     
        Set FL1 = Worksheets("235")
        Set R = Range("DG3")
        Set i = 5
        With FL1
            Set Plage = Range("C4 : DD129")
            For Each Cell In Plage
                If Cell = R Then
                Cells(140, i) = Cell.Address(False, False)
                i = i + 1
                End If
            Next
        End With
        Set FL1 = Nothing
        Set Plage = Nothing
    End Sub
    mais il me met une erreur de définition d'objet

    Jerodino

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Voici votre code avec quelques remarques
    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
    '### Sub Selection() 'mieux vaut éviter d'utiliser des mots réservés du VBA
    Sub MaSelection()
    Dim FL1 As Worksheet, Cell As Range, Plage As Range
    Dim R As Range
    Dim i As Integer
    '---
    Set FL1 = Worksheets("235")
    Set R = Range("DG3")
    '### Set i = 5   'pas bon : Set est utilisé pour l'affection d'un Objet (on le référence dans la variable Objet)
    '### i a été déclaré comme Integer (ce n'est donc pas une variable Objet)
    i = 5
    With FL1
    '###  Set Plage = Range("C4D129") 'pas bon : ce n'est pas forcément la plage de FL1 mais celle de la feuille active
      Set Plage = .Range("C4:D129")
      For Each Cell In Plage
        If Cell = R Then
          '### là j'ai un doute, s'il s'agit d'inscrire dans la colonne 140 avec la ligne
          '### qui s'incrémente de 1 à chaque passage et qui commence en ligne 5, il faut écrire
          '### Cells(140, i) = Cell.Address(False, False)
          .Cells(i, 140) = Cell.Address(False, False)
          i = i + 1
        End If
      Next
    End With
    Set FL1 = Nothing
    Set Plage = Nothing
    End Sub
    Fonctionne-t-il ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour les commentaires ! Je commence à comprendre un peu mieux.
    Alors le code est le suivant maintenant :

    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
    Sub MaSelection()
    Dim FL1 As Worksheet, Cell As Range, Plage As Range
    Dim R As Range
    Dim i As Integer
    '---
    Set FL1 = Worksheets("235")
    Set R = Range("DG3")
    i = 5
    With FL1
      Set Plage = .Range("C4 : DD129")
      For Each Cell In Plage
        If Cell = R Then
          .Cells(i, 140) = Cell.Address(False, False)
          i = i + 1
        End If
      Next
    End With
    Set FL1 = Nothing
    Set Plage = Nothing
    End Sub
    La macro se déroule sans accrocs mais rien ne se passe, Cela vient peut être de la valeur Y1 en DG3 qui est du texte ?

  8. #8
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Mea Culpa ...

    Je viens de regarder à la droite de ma feuille ... et les résultats étaient là !

    Merci beaucoup pour votre aide

    Jerodino

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

Discussions similaires

  1. Extraction d'une liste à partir de la valeur d'une cellule
    Par lps02 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2012, 21h07
  2. Réponses: 25
    Dernier message: 26/06/2009, 15h15
  3. Création d'une fonction qui prend en argument une liste de cellule
    Par Dereck07 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/12/2007, 21h49
  4. Faire une extraction d'une liste
    Par frooja dans le forum Basic
    Réponses: 1
    Dernier message: 11/05/2007, 23h52
  5. [VBA]Parcourir une liste de cellule
    Par mwa33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/04/2007, 13h20

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