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 :

Rechercher une valeur dans une colonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 78
    Par défaut Rechercher une valeur dans une colonne
    Bonjour,

    dans une colonne, comment rechercher la première cellule dont la valeur est <31. Ensuite je souhaite récuperer le numéro de ligne.

    d'avance merci

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Aaristocat, bonjour le forum,

    Essaie comme ça :

    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
    Sub Macro1()
    Dim O As Object 'déclare la variable O (Onglet)
    Dim COL As Integer 'déclare la variable COL (COLonne)
    Dim DL As Long 'déclare la variable DL (Dernière Ligne)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim CEL As Range 'déclare la variable CEL (CELlule)
    Dim NL As Long 'déclare la variable NL (Numéro de Ligne)
     
    Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter)
    COL = 1 'définit la colonne COL (à adapter)
    DL = O.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet O
    Set PL = O.Range(O.Cells(1, COL), O.CEL(DL, COL)) 'définit la plage PL
    For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
        If CEL.Value < 31 Then NL = CEL.Row 'si la valeur de la cellule est supérieure à 31, définit la numéro de ligne NL
        Exit For 'sort de la boucle
    Next CEL 'prochaine cellule de la boucle
    MsgBox NL 'message
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 78
    Par défaut
    j'ai testé : message d'erreur

    Nom : img01.JPG
Affichages : 2412
Taille : 74,0 Ko

    problème ici : Set PL = O.Range(O.Cells(214, COL), O.CEL(DL, COL)) 'définit la plage PL

  4. #4
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour,
    Essayes également ce code, paramétré ici pour des valeurs en colonne C
    Data.Cells (i, 3) correspond à la ligne i colonne 3 - donc C ( i prend une valeur de 1 pour terminer au nombre total de ligne de ton tableau)
    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
    Option Explicit
    Sub infvaleur()
    Dim i As Integer
    Dim Data As Worksheet
    Set Data = ThisWorkbook.Sheets("Feuil1")
    i = 1
    Do While Data.Cells(i, 3) <> ""
    If Data.Cells(i, 3).Value > "31" Then
    i = i + 1
    Else
    MsgBox (" la valeur < 31 se trouve en ligne" & " " & i)
    i = i + 1
    End If
    Loop
    End Sub
    Si tu ne connais pas la colonne dans laquelle se trouvent les données (ici limité à la recherche dans les 26 premières colonnes, des colonnes ou se trouvent les données numériques), essayes cela
    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
    Option Explicit
    Sub infvaleur()
    Dim i As Integer
    Dim j As Integer
    Dim Data As Worksheet
    Set Data = ThisWorkbook.Sheets("Feuil1")
    i = 1
    j = 1
     
    For j = 1 To 26
    If Data.Cells(i, j) = "" Or Not IsNumeric(Data.Cells(i, j)) Then
    j = j + 1
    Else
    Do While Data.Cells(i, j) <> ""
    If Data.Cells(i, j).Value > "31" Then
    i = i + 1
    Else
    MsgBox (" la valeur < 31 se trouve en ligne" & " " & i)
     
    i = i + 1
    End If
    Loop
    End If
    Next j
    End Sub
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  5. #5
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    J'avoue que je n'ai pas testé, désolé ! La ligne corrigée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set PL = O.Range(O.Cells(1, COL), O.Cells(DL, COL)) 'définit la plage PL

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    En tenant compte du fait que par définition :
    • Les filtres auto renvoient une plage de sélections discontinues de lignes visibles
    • La propriété Areas de l’objet Range renvoie une collection Areas qui englobe toutes les plages dans une sélection de plusieurs zones
    • Que ton tableau comporte des en-têtes, mais on ne sait pas à quelle ligne elles se situent, j’ai donc pris comme postulat de nommer l’’étiquette de 1ère colonne « Origine » et de considérer que la colonne visée était la 2 de ta table de données, le tout se situant dans la feuille active.
    • On fait un IF Then car si d’aventure la valeur cherchée est juste la 1ère sous l’en-tête dans le tableau, il faut en tenir compte et elle se situera alors en dernière ligne de la 1ère area.
    • Sinon, ta valeur cherchée sera en deuxième area vu le filtre..S’il y en a 2 ou plus à suivre dans cette area c’est la 1ère que tu veux et il est dit que : La propriété Row de l’objet Range, elle, renvoie le numéro de la première ligne de la première zone de la plage.
    • Sur une plage avec beaucoup de lignes, ça devrait être bien rapide.


    Tu testes le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub gogo()
     
    With ActiveSheet.Range("Origine")
        .AutoFilter field:=2, Criteria1:="<31", Operator:=xlAnd
        If .SpecialCells(xlCellTypeVisible).Areas(1).Rows.Count > .Row Then 'on raisonne par rapport à la ligne d'en-tête
            MsgBox "ligne cherchée = " & .Row + 1
        Else
             MsgBox "ligne cherchée = " & .SpecialCells(xlCellTypeVisible).Areas(2).Row
        End If
    End With
    'après tu gères le résultat et t'enlève le filtre
    End Sub
    cordialement,

    Didier

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Réponses: 5
    Dernier message: 27/03/2014, 10h59
  3. Réponses: 10
    Dernier message: 07/07/2012, 17h11
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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