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 :

Récupération de données en fonction de critères [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Août 2007
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Récupération de données en fonction de critères
    Bonjour à tous,

    Je n'arrive pas à écrire la procédure vba qui me permettrait de récupérer les valeurs de cellule d'une colonne en fonction des valeurs de cellule d'une autre colonne.
    Je m'explique:
    Je voudrais récupérer les valeurs de chaque cellule de la colonne A3:A79 si la cellule correspondante de la colonne B3:B79 est renseignée.
    Par exemple: si B3="" alors ne pas récupérer A3
    si B4<>"" alors récupérer A4

    Est-ce que quelqu'un aurait une idée?

    Je vous remercie par avance de votre aide,

  2. #2
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Slt
    voici le début du code que tu pourrais écrire:
    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
    Sub recuperer()
    Dim plage As Range
     
    Set plage = Range("B3:B79")
     
    'Pour chaque cellule de la plage
    For Each c In plage
     'Si la cellule est pleine alors 
      If c <> "" Then
     
      'ici met ce que tu veux faire
     
      End If
    Next c
     
    End Sub
    Le tout c'est de savoir ce que tu souhaites faire des valeurs une fois que tu les a récupérées, mais comme tu ne l'as pas dit on peu pas deviner

    A+

    EDIT: J'ai oublié les valeurs a récupérer sont-elles du texte, des chiffres, une date .... ??

  3. #3
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    tu peux regarder cette fonction :
    http://www.developpez.net/forums/d40...concatenation/

    il suffit de rentrer "?*" en critère et de choisir l'option de concaténation.

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Août 2007
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Tout d'abord, merci pour votre réponse rapide. Ce sont des données texte que je voudrais récupérer.

    Le code que j'ai commencer à écrire est le suivant:

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim Institution As String
    Dim Cell As Range
     
    'Procédure déclenchée quand la cellule B28 est changée
    If Not Application.Intersect(Target, Range("B28")) Is Nothing Then
     
    Entreprise = Cells(28, 2)
     
      Select Case Entreprise
        Case "Entreprise 1"
        ActiveSheet.Range("A29:A106").ClearContents
     
          For Each Cell In Feuil2.Range("C3:C79")
            If Cell.Value <> "" Then
            Feuil2.Range("B3:B79").Copy Feuil3.Range("A29")
            End If
          Next Cell
     
        Case "Entreprise 2"
        ActiveSheet.Range("A29:A106").ClearContents
     
            For Each Cell In Feuil2.Range("E3:E79")
            If Cell.Value <> "" Then
            Feuil2.Range("B3:B79").Copy Feuil3.Range("A29")
            End If
          Next Cell
      End Select
     
    End If
    End Sub
    Le problème, c'est que cela me renvoie toute la colonne B au lieu de me renvoyer que les valeurs de la colonne B pour lesquelles les valeurs de la colonne D sont renseignées. (pas sûre d'être claire...)

    Merci encore

  5. #5
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Slt,

    j'ai modifié quelques lignes de ton code comme ceci:
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim Institution As String
    Dim Cell As Range, x as Long
     
    'Procédure déclenchée quand la cellule B28 est changée
    If Not Application.Intersect(Target, Range("B28")) Is Nothing Then
     
    Entreprise = Cells(28, 2)
     
    Select Case Entreprise
    Case "Entreprise 1"
    ActiveSheet.Range("A29:A106").ClearContents
     
    'ici tu fais une recherche sur la colonne C
    For Each Cell In Feuil2.Range("C3:C79")
    If Cell.Value <> "" Then
    x = Cell.row
    Feuil2.Range("B" & x).Copy Feuil3.Range("A29")
    End If
    Next Cell
     
    Case "Entreprise 2"
    ActiveSheet.Range("A29:A106").ClearContents
    'ici tu fais une recherche sur la colonne E
    For Each Cell In Feuil2.Range("E3:E79")
    If Cell.Value <> "" Then
    x = Cell.row
    Feuil2.Range("B" & x).Copy Feuil3.Range("A29")
     
    End If
    Next Cell
    End Select
     
    End If
    End Sub
    remarque: dans ce code seul la dernière référence trouvé sera copié dans la cellule A29 car lorsqu'il copie toujours sur la même cellule.
    ex: il y a 20 cellule pleine sur ta plage à chaque fois qu'il en trouve une il va la copié dans la cellule A29 donc à la fin de la boucle ce sera la dernière qui sera affichée. Je pense pas que ce soit le résultat que tu recherche.

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Août 2007
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Effectivement, tu as raison, seule la dernière valeur concernée est reprise. Ca y'est, ça s'est vu que je débute!
    Ce que je recherche, c'est à récupérer toutes les valeurs concernées à partir de la cellule A29. Mais là, je vois pas...
    J'ai essayé de sélectionner la plage sur laquelle je veux récupérer les données, mais ca me renvoie autant de fois la dernière valeur.

  7. #7
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Il y a un début à tout .
    Je te rassure je suis pas un pro non plus

    voici le code modifié pour coller les valeurs à partir de la cellule A29.
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim Institution As String
    Dim Cell As Range, x as Long, y as long
     
    'Procédure déclenchée quand la cellule B28 est changée
    If Not Application.Intersect(Target, Range("B28")) Is Nothing Then
     
    Entreprise = Cells(28, 2)
     
    Select Case Entreprise
    Case "Entreprise 1"
    ActiveSheet.Range("A29:A106").ClearContents
    y=29 
    'ici tu fais une recherche sur la colonne C
    For Each Cell In Feuil2.Range("C3:C79")
    If Cell.Value <> "" Then
    x = Cell.row
    Feuil2.Range("B" & x).Copy Feuil3.Range("A"& y)
    y=y+1
    End If
    Next Cell
     
    Case "Entreprise 2"
    ActiveSheet.Range("A29:A106").ClearContents
    y=29
     
    'ici tu fais une recherche sur la colonne E
    For Each Cell In Feuil2.Range("E3:E79")
    If Cell.Value <> "" Then
    x = Cell.row
    Feuil2.Range("B" & x).Copy Feuil3.Range("A" & y)
     y=y+1
    End If
    Next Cell
    End Select
     
    End If
    End Sub
    je crois qu'on progresse

    ps: j'ai pas testé le code

  8. #8
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Août 2007
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Ca fonctionne parfaitement!! Merci beaucoup (cela faisait 1 semaine que je planchais sur ce problème...que tu m'a résolu en 2 heures)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/04/2015, 15h27
  2. Réponses: 0
    Dernier message: 11/06/2014, 22h37
  3. [DOM] Récupération de donnée en fonction de la valeur d'un attribut
    Par Space Cowboy dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 25/11/2010, 11h59
  4. [MySQL] Problème de récupération des données dans une fonction
    Par highman dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/10/2006, 20h04
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

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