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
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
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
j'ai testé : message d'erreur
problème ici : Set PL = O.Range(O.Cells(214, COL), O.CEL(DL, COL)) 'définit la plage PL
Bonjour,
Essayes également ce code, paramétré ici pour des valeurs en colonne CData.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)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 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
Eric
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
"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
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
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 :
cordialement,
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
Didier
Partager