Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
j'ai donc fait une macro qui tourne - (à base de if, d'offset,...),
mais j'ai le temps d'aller boire un café, de faire un tennis, et de
prendre une douche avant d'obtenir un resultat
j'avais pensé a utiliser le find mais je coince pour passer les
arguments de recherche
Auriez vous un petite idée ?
Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
j'ai donc fait une macro qui tourne - (à base de if, d'offset,...),
mais j'ai le temps d'aller boire un café, de faire un tennis, et de
prendre une douche avant d'obtenir un resultat
j'avais pensé a utiliser le find mais je coince pour passer les
arguments de recherche
Auriez vous un petite idée ?
Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
j'ai donc fait une macro qui tourne - (à base de if, d'offset,...),
mais j'ai le temps d'aller boire un café, de faire un tennis, et de
prendre une douche avant d'obtenir un resultat
j'avais pensé a utiliser le find mais je coince pour passer les
arguments de recherche
Auriez vous un petite idée ?
Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
j'ai donc fait une macro qui tourne - (à base de if, d'offset,...),
mais j'ai le temps d'aller boire un café, de faire un tennis, et de
prendre une douche avant d'obtenir un resultat
j'avais pensé a utiliser le find mais je coince pour passer les
arguments de recherche
Auriez vous un petite idée ?
Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
j'ai donc fait une macro qui tourne - (à base de if, d'offset,...),
mais j'ai le temps d'aller boire un café, de faire un tennis, et de
prendre une douche avant d'obtenir un resultat
j'avais pensé a utiliser le find mais je coince pour passer les
arguments de recherche
Auriez vous un petite idée ?
Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
j'ai donc fait une macro qui tourne - (à base de if, d'offset,...),
mais j'ai le temps d'aller boire un café, de faire un tennis, et de
prendre une douche avant d'obtenir un resultat
j'avais pensé a utiliser le find mais je coince pour passer les
arguments de recherche
Auriez vous un petite idée ?
Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
j'ai donc fait une macro qui tourne - (à base de if, d'offset,...),
mais j'ai le temps d'aller boire un café, de faire un tennis, et de
prendre une douche avant d'obtenir un resultat
j'avais pensé a utiliser le find mais je coince pour passer les
arguments de recherche
Auriez vous un petite idée ?
Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
j'ai donc fait une macro qui tourne - (à base de if, d'offset,...),
mais j'ai le temps d'aller boire un café, de faire un tennis, et de
prendre une douche avant d'obtenir un resultat
j'avais pensé a utiliser le find mais je coince pour passer les
arguments de recherche
Auriez vous un petite idée ?
Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
j'ai donc fait une macro qui tourne - (à base de if, d'offset,...),
mais j'ai le temps d'aller boire un café, de faire un tennis, et de
prendre une douche avant d'obtenir un resultat
j'avais pensé a utiliser le find mais je coince pour passer les
arguments de recherche
Auriez vous un petite idée ?
Avec une plage (A2:A26001) nommée "tablo"
Si l'occurence cherchée se trouve dans les premiers milliers de lignes une
boucle (avec un exit for) se révèlera assez rapide :
For Each c In [tablo]
If Left(c, 1) = "6" And Len(c) = 9 Then c.Select: c.Select: Exit For
Next
Par contre si elle a des chances de se trouver en queue de peloton, une
matricielle "passée par la fonction Evaluate" peut s'avérer judicieuse :
x =
Evaluate("address(min(if((len(tablo)=9)*(mid(tablo,1,1)=""6""),row(tablo))),min(if((len(tablo)=9)*(mid(tablo,1,1)=""6"")*(row(tablo)=min(if((len(tablo)=9)*(mid(tablo,1,1)=""6""),row(tablo)))),column(tablo))))")
Range(x).Select
Attention : l'instruction x=.... est sur une seule ligne
PS : On pourrait utiliser la formule matricielle sur une feuille pour
renvoyer l'adresse recherchée mais compte tenu du nombre de cellules dans
la plage à parcourir, mieux vaut s'en abstenir (long temps de
calcul/recalcul)
AV
Avec une plage (A2:A26001) nommée "tablo"
Si l'occurence cherchée se trouve dans les premiers milliers de lignes une
boucle (avec un exit for) se révèlera assez rapide :
For Each c In [tablo]
If Left(c, 1) = "6" And Len(c) = 9 Then c.Select: c.Select: Exit For
Next
Par contre si elle a des chances de se trouver en queue de peloton, une
matricielle "passée par la fonction Evaluate" peut s'avérer judicieuse :
x =
Evaluate("address(min(if((len(tablo)=9)*(mid(tablo,1,1)=""6""),row(tablo))),min(if((len(tablo)=9)*(mid(tablo,1,1)=""6"")*(row(tablo)=min(if((len(tablo)=9)*(mid(tablo,1,1)=""6""),row(tablo)))),column(tablo))))")
Range(x).Select
Attention : l'instruction x=.... est sur une seule ligne
PS : On pourrait utiliser la formule matricielle sur une feuille pour
renvoyer l'adresse recherchée mais compte tenu du nombre de cellules dans
la plage à parcourir, mieux vaut s'en abstenir (long temps de
calcul/recalcul)
AV
Avec une plage (A2:A26001) nommée "tablo"
Si l'occurence cherchée se trouve dans les premiers milliers de lignes une
boucle (avec un exit for) se révèlera assez rapide :
For Each c In [tablo]
If Left(c, 1) = "6" And Len(c) = 9 Then c.Select: c.Select: Exit For
Next
Par contre si elle a des chances de se trouver en queue de peloton, une
matricielle "passée par la fonction Evaluate" peut s'avérer judicieuse :
x =
Evaluate("address(min(if((len(tablo)=9)*(mid(tablo,1,1)=""6""),row(tablo))),min(if((len(tablo)=9)*(mid(tablo,1,1)=""6"")*(row(tablo)=min(if((len(tablo)=9)*(mid(tablo,1,1)=""6""),row(tablo)))),column(tablo))))")
Range(x).Select
Attention : l'instruction x=.... est sur une seule ligne
PS : On pourrait utiliser la formule matricielle sur une feuille pour
renvoyer l'adresse recherchée mais compte tenu du nombre de cellules dans
la plage à parcourir, mieux vaut s'en abstenir (long temps de
calcul/recalcul)
AV
Pourquoi ce "6" ? (dans If Left(c, 1) = "6" ).
Quel est le sens de balayage des l aplage?
Pourquoi ce "6" ? (dans If Left(c, 1) = "6" ).
Quel est le sens de balayage des l aplage?
Pourquoi ce "6" ? (dans If Left(c, 1) = "6" ).
Quel est le sens de balayage des l aplage?
Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
Bnojour
Voici mon probleme
je dois rechercher sur une feuille la premiere cellule dans laquelle
le contenu est une chaine de caracteres de longueur égale à 9 ET dont
le premier caratere est un 6.
le souci est que la feuille est chargée : plus de 26 000 lignes et une
quinzaine de colonnes
testé sur une plage de 419986 valeurs : numérique, texte, vide (30000 lignes
15
colonnes)
moins de 2 secondes pour trouver en : $K$29942
testé sur une plage de 419986 valeurs : numérique, texte, vide (30000 lignes
15
colonnes)
moins de 2 secondes pour trouver en : $K$29942
testé sur une plage de 419986 valeurs : numérique, texte, vide (30000 lignes
15
colonnes)
moins de 2 secondes pour trouver en : $K$29942
Pourquoi ce "6" ? (dans If Left(c, 1) = "6" ).
Dans le cas présent (vba) c'est superfétatoire mais, d'une façon générale,
les fonctions texte renvoyant une valeur alphanumérique (et non
numérique), cette précaution n'est pas inutile
Exemple dans la feuille de calcul avec en A1 la valeur numérique 654312
=gauche(A1;1)=6
renvoie FAUX
alors que
=gauche(A1;1)="6"
renvoie VRAi (réponse attendue)Quel est le sens de balayage des l aplage?
ligne puis colonne
A1 > B1 > C1......
A2 > B2 .....
AV
Pourquoi ce "6" ? (dans If Left(c, 1) = "6" ).
Dans le cas présent (vba) c'est superfétatoire mais, d'une façon générale,
les fonctions texte renvoyant une valeur alphanumérique (et non
numérique), cette précaution n'est pas inutile
Exemple dans la feuille de calcul avec en A1 la valeur numérique 654312
=gauche(A1;1)=6
renvoie FAUX
alors que
=gauche(A1;1)="6"
renvoie VRAi (réponse attendue)
Quel est le sens de balayage des l aplage?
ligne puis colonne
A1 > B1 > C1......
A2 > B2 .....
AV
Pourquoi ce "6" ? (dans If Left(c, 1) = "6" ).
Dans le cas présent (vba) c'est superfétatoire mais, d'une façon générale,
les fonctions texte renvoyant une valeur alphanumérique (et non
numérique), cette précaution n'est pas inutile
Exemple dans la feuille de calcul avec en A1 la valeur numérique 654312
=gauche(A1;1)=6
renvoie FAUX
alors que
=gauche(A1;1)="6"
renvoie VRAi (réponse attendue)Quel est le sens de balayage des l aplage?
ligne puis colonne
A1 > B1 > C1......
A2 > B2 .....
AV
Bonsour® Modeste avec ferveur ;o))) vous nous disiez :testé sur une plage de 419986 valeurs : numérique, texte, vide (30000
lignes 15
colonnes)
moins de 2 secondes pour trouver en : $K$29942
;o))) le même en plus clean
Sub recherche_en_colonne()
zz = Now
Range("A1").Select
Set xx = Cells.Find(What:="6????????", After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse)
If xx Is Nothing Then
MsgBox " rien trouvé"
Else
xx.Select
MsgBox "trouvé : " & xx.Value _
& Chr(10) & " en : " & xx.Address() _
& Chr(10) & "durée :" & Format(Now - zz, "ss.000")
End If
Range("A6").Select
End Sub
Sub recherche_en_ligne()
zz = Now
Range("A1").Select
Set xx = Cells.Find(What:="6????????", After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse)
If xx Is Nothing Then
MsgBox " rien trouvé"
Else
xx.Select
MsgBox "trouvé : " & xx.Value _
& Chr(10) & " en : " & xx.Address() _
& Chr(10) & "durée :" & Format(Now - zz, "ss.000")
End If
Range("A6").Select
End Sub
--
--
@+
;o)))
Bonsour® Modeste avec ferveur ;o))) vous nous disiez :
testé sur une plage de 419986 valeurs : numérique, texte, vide (30000
lignes 15
colonnes)
moins de 2 secondes pour trouver en : $K$29942
;o))) le même en plus clean
Sub recherche_en_colonne()
zz = Now
Range("A1").Select
Set xx = Cells.Find(What:="6????????", After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse)
If xx Is Nothing Then
MsgBox " rien trouvé"
Else
xx.Select
MsgBox "trouvé : " & xx.Value _
& Chr(10) & " en : " & xx.Address() _
& Chr(10) & "durée :" & Format(Now - zz, "ss.000")
End If
Range("A6").Select
End Sub
Sub recherche_en_ligne()
zz = Now
Range("A1").Select
Set xx = Cells.Find(What:="6????????", After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse)
If xx Is Nothing Then
MsgBox " rien trouvé"
Else
xx.Select
MsgBox "trouvé : " & xx.Value _
& Chr(10) & " en : " & xx.Address() _
& Chr(10) & "durée :" & Format(Now - zz, "ss.000")
End If
Range("A6").Select
End Sub
--
--
@+
;o)))
Bonsour® Modeste avec ferveur ;o))) vous nous disiez :testé sur une plage de 419986 valeurs : numérique, texte, vide (30000
lignes 15
colonnes)
moins de 2 secondes pour trouver en : $K$29942
;o))) le même en plus clean
Sub recherche_en_colonne()
zz = Now
Range("A1").Select
Set xx = Cells.Find(What:="6????????", After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse)
If xx Is Nothing Then
MsgBox " rien trouvé"
Else
xx.Select
MsgBox "trouvé : " & xx.Value _
& Chr(10) & " en : " & xx.Address() _
& Chr(10) & "durée :" & Format(Now - zz, "ss.000")
End If
Range("A6").Select
End Sub
Sub recherche_en_ligne()
zz = Now
Range("A1").Select
Set xx = Cells.Find(What:="6????????", After:¬tiveCell, _
LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse)
If xx Is Nothing Then
MsgBox " rien trouvé"
Else
xx.Select
MsgBox "trouvé : " & xx.Value _
& Chr(10) & " en : " & xx.Address() _
& Chr(10) & "durée :" & Format(Now - zz, "ss.000")
End If
Range("A6").Select
End Sub
--
--
@+
;o)))