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 :

Recherche verticale cellule vide et retour de l'intitulé de ligne [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Recherche verticale cellule vide et retour de l'intitulé de ligne
    Bonjour,

    J'ai quelques connaissances en vba mais je n'a pas pratiqué depuis un bon moment et je suis actuellement dans l'impasse. Je pense que ce n'est pas faisaible via des formules mais que cela est bien possible via VBA.

    Je vous expose ce que je souhaite faire :
    J'aimerai rechercher en fonction d'un critère (une date) les cellule vides correspondantes à la colonne et ce sur plusieurs feuilles et retourner ensuite l'intitulé de chaque ligne ayant une cellule vide sur une seule feuille.
    J'ai pensé utiliser mon critère via la cellule A1 de ma nouvelle feuille par exemple et effectuer la recherche sur les 3 feuilles et copier les résultats les uns en dessous des autres sur ma nouvelle feuille.
    Cependant je sèche un peu et je ne sais pas trop comment faire, si je me suis mal exprimé je peux fournir un fichier d'exemple.

    Je vous remercie par avance pour votre réponse.

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour Ithofithof,

    Voici une macro sans trop tester.
    Ce que j'ai compris de ton problème :
    1. On parcours quelques onglets de ton classeur
    2. On regarde en colonne C les dates identiques à celle que tu souhaites
    3. On vérifie qu'en colonne B la valeur en vide
    4. On récupère la colonne A si les deux conditions précédentes sont respectées
    5. On place cette valeur dans un autre onglet

    C'est ce que cette macro est censée faire :
    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
    Sub Ithofithof()
    Dim oRng As Range
    Dim oWksh As Worksheet
    Dim i As Integer
    Dim oDate As Date
     
    'Je définie ma date (variable qui peut être passé en paramètre, insérer dans une cellule, etc...)
    oDate = "00/00/0000"
     
    'Sur tout les feuilles de mon classeur
    For Each oWksh In Worksheets
        'Condition pour éliminer des feuilles non voules
        If oWksh.Name <> "Feuil1 que je ne veux pas prendre en compte" And oWksh.Name <> "Feuil2 que je ne veux pas prendre en compte" Then
            'Avec cette feuille
            With oWksh
                'Je set oRng sur B1
                Set oRng = .Range("B1")
     
                'Je parcours de la ligne 2 à la dernière ligne non-vide l'ensemble des cellules
                For i = 1 To .Cells(Rows.Count, 6).End(xlUp).Row - 1
                    'Si sur la cellule à droite de la colonne B (offset +1 sur la colonne), je trouve une date identique à oDate
                    If oRng.Offset(i, 1) = oDate Then
                        'Si l'élément de la colonne B est vide
                        If oRng.Offset(i, 0) = "" Then
                            'Alors sur la dernière cellule non-vide (+1 ligne) de la Feuille de résultats je place ce que je trouve dans ma colonne A de ma feuille courrante
                            Worksheets("Ma feuille de résultats").Cells(Rows.Count, 1).Offset(1, 0).End(xlUp) = .Cells(i + 1, 1)
                        End If
                    End If
                Next i
            End With
        End If
    Next oWksh
     
    End Sub
    Je te laisse adapter et revenir vers moi !

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonjour Kimy_IRe,

    Merci pour ta réponse ! Ce n'est pas tout à fait ce dont j'ai besoin mais c'est une très bonne piste, que je n'ai pas réussi à adapter à mon fichier.
    En fait j'aurai besoin de récupérer et d'utiliser la valeur présente dans la cellule A1 de la feuille "liste". Je souhaite ensuite, la effectivement je pense que ce que tu m'a fourni pourrait fonctionner, aller dans les feuilles "AM" et "AP", me positionner sur la colonne correspondant à la date (que j'ai récupéré dans la feuille "liste) et récupérer les noms présents dans la colonne A n'ayant pas de "x" dans la cellule de la colonne ou j'ai effectué la recherche.
    Encore une fois en me relisant je pense que j'explique mal ce que je souhaite obtenir.
    J'ai fais un fichier d'exemple ne pouvant envoyer le fichier original pour une meilleure compréhension.

    Merci pour votre aide
    Fichiers attachés Fichiers attachés

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour Ithofithof,

    En effet, ton explication est... hmm... disons vaseuse.

    Mais bon, avec le formalisme de ton fichier exemple, je crois avoir compris :
    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
    Option Explicit
     
    Sub Ithofithof()
    Dim oRng As Range
    Dim oWksh As Worksheet
    Dim i As Integer
    Dim oDate As Date
    Dim oStr As String
     
    'Je définie ma date (variable qui peut être passé en paramètre, insérer dans une cellule, etc...)
    oDate = Worksheets("liste").Range("A1")
     
    'Sur tout les feuilles de mon classeur
    For Each oWksh In Worksheets
        'Condition pour éliminer des feuilles non voules
        If oWksh.Name <> "liste" Then
            'Avec cette feuille
            With oWksh
                Set oRng = .Rows(2).Find(oDate, LookIn:=xlValues, LookAt:=xlWhole)
     
                oStr = "Dans " & oWksh.Name & " :" & vbCrLf
                For i = 1 To .Cells(Rows.Count, oRng.Column).End(xlUp).Row - 2
                    If oRng.Offset(i, 0) = "x" Then
                        oStr = oStr & .Cells(i + 2, 1) & vbCrLf
                    End If
                Next i
                MsgBox oStr
            End With
        End If
    Next oWksh
     
    End Sub
    Par contre... comme d'hab'... il manque des infos...
    Tu veux récupérer des valeurs, c'est bien ! Mais où doivent-elles être placer ou servir à quoi ?

    Bref, je te laisserai adapter. J'ai mis ça dans une MsgBox.

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonjour Kimy,

    Encore une fois merci pour tes réponses rapides, je vais essayer de sortir de ces explications vaseuses et être le plus précis possible.

    Le fichier de base comporte 9 onglet sans compter mon onglet liste où j'utilise mon paramètre de date.
    Je souhaite chercher mes informations uniquement dans 3 onglets qui s'appellent :
    - PRP M
    - PRP AM
    - PRP FT

    Les lignes comportant le "x" dans notre date d'exemple (10/01/2015) ne doivent pas remonter mais je dois avoir uniquement les lignes correspondants aux cases vides, sur ce point pas de soucis j'ai modifier la ligne correspondante.

    La date ne se trouve pas en ligne 2 mais en ligne 10 danse mes onglets PRP M, PRP AM et PRP FT. Ici aussi j'ai pu modifier les différents paramètres et cela me renvoi correctement ce que je souhaite.

    J'aimerai donc que les résultat soient donnés dans ma feuille liste à partir de la cellule A2 et la j'avoue bloquer à nouveau (décidément..).

    Voici ce que donne le bout de code que tu m'a donné et que j'ai adapté, je ne sais pas ou mettre le code pour l'écriture à partir de la cellule A2 de la feuille "liste", je pense que ça doit être dans la boucle for, afin d'écrire un résultat ligne par ligne ?

    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
    Sub Ithofithof()
    Dim oRng As Range
    Dim oWksh As Worksheet
    Dim i As Integer
    Dim oDate As Date
    Dim oStr As String
     
    'Je définie ma date (variable qui peut être passé en paramètre, insérer dans une cellule, etc...)
    oDate = Worksheets("liste").Range("A1")
     
    'Sur tout les feuilles de mon classeur
    For Each oWksh In Worksheets
        'Condition pour éliminer des feuilles non voules
        If oWksh.Name Like "PRP FT" Then
            'Avec cette feuille
            With oWksh
                Set oRng = .Rows(10).Find(oDate, LookIn:=xlValues, LookAt:=xlWhole)
                oStr = vbCrLf
                'oStr = "Dans " & oWksh.Name & " :" & vbCrLf
                For i = 1 To .Cells(Rows.Count, oRng.Column).End(xlUp).Row - 2
                    If oRng.Offset(i, 0) = "" Then
                        oStr = oStr & .Cells(i + 10, 1) & vbCrLf
                    End If
                Next i
                MsgBox oStr
            End With
        End If
    Next oWksh
     
    End Sub
    Merci encore pour tes informations et ton code détaillé

    Cordialement,

  6. #6
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    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
    37
    38
    Option Explicit
     
    Sub Ithofithof()
    Dim oRng As Range
    Dim oWksh As Worksheet
    Dim i As Integer
    Dim oDate As Date
     
    'Je définie ma date (variable qui peut être passé en paramètre, insérer dans une cellule, etc...)
    oDate = Worksheets("liste").Range("A1")
     
    'Sur tout les feuilles de mon classeur
    For Each oWksh In Worksheets
        'Condition pour éliminer des feuilles non voules
        If oWksh.Name <> "liste" Then
            'Avec cette feuille
            With oWksh
                'On place oRng sur la date trouvée en ligne 10
                Set oRng = .Rows(10).Find(oDate, LookIn:=xlValues, LookAt:=xlWhole)
     
                'Condition pour s'assurer de trouver la valeur
                If Not oRng Is Nothing Then
                    'Pour i = 1 à la dernière ligne non-vide
                    For i = 1 To .Cells(Rows.Count, oRng.Column).End(xlUp).Row - oRng.Row
                        'On vérifie qu'on a "x"
                        If oRng.Offset(i, 0) = "x" Then
                            'Si on a x, on place la valeur de la colonne A dans la feuille "liste"
                            Worksheets("liste").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = .Cells(i + oRng.Row, 1)
                        End If
                    Next i
                End If
     
                Set oRng = Nothing
            End With
        End If
    Next oWksh
     
    End Sub
    Je te laisse adapter avec les commentaires.

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonjour Kimy,

    Exactement ce que je cherchais ! je note ça dans un coin.
    Au final j'ai passé une inputbox pour choisir la feuille concernée et ainsi laisser le choix à l'utilisateur, les feuilles n'ayant pas toutes le même format...

    Merci pour ton aide !

    Je passe cette discussion en résolu !

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

Discussions similaires

  1. recherche de la 1 ere cellule vide et renvoi de valeur
    Par trustvittel dans le forum Excel
    Réponses: 2
    Dernier message: 13/11/2009, 10h28
  2. [XL-2003] recherche de cellule vide
    Par kazuzu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/06/2009, 07h09
  3. [XL-2007] recherche cellule et mettre info dans la premiere cellule vide
    Par croky23 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/04/2009, 13h24
  4. Recherche de cellule vide par colonne
    Par ceres02 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/10/2008, 11h05
  5. Recherche de cellules non vides dans une colonne
    Par John81 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 05/09/2008, 22h57

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