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
Voici ce que j'ai trouvé, sans offset --------------- Sub atteindre() For Each c In Range("playa") If Left(c, 1) = 6 Then If Len(c) = 9 Then c.Interior.ColorIndex = 3 End If End If Next End Sub -------------------------- Ceci dit, perso je continuerais à prendre une douche après le tennis.....-) Si problème, la porte est ouverte. -- Bien amicalmement, Vivement conseillés: http://www.excelabo.net http://jacxl.free.fr/mpfe/trombino.html http://dj.joss.free.fr/netiquet.htm http://frederic.sigonneau.free.fr/
Jacquouille.
<penelope> a écrit dans le message de news:
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 ?
Bonjour Pénélope,
Voici ce que j'ai trouvé, sans offset
---------------
Sub atteindre()
For Each c In Range("playa")
If Left(c, 1) = 6 Then
If Len(c) = 9 Then
c.Interior.ColorIndex = 3
End If
End If
Next
End Sub
--------------------------
Ceci dit, perso je continuerais à prendre une douche après le tennis.....-)
Si problème, la porte est ouverte.
--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/
Jacquouille.
<penelope> a écrit dans le message de news:
qar0235g7u0uaitcci5cl5rjf04acuora4@4ax.com...
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
Voici ce que j'ai trouvé, sans offset --------------- Sub atteindre() For Each c In Range("playa") If Left(c, 1) = 6 Then If Len(c) = 9 Then c.Interior.ColorIndex = 3 End If End If Next End Sub -------------------------- Ceci dit, perso je continuerais à prendre une douche après le tennis.....-) Si problème, la porte est ouverte. -- Bien amicalmement, Vivement conseillés: http://www.excelabo.net http://jacxl.free.fr/mpfe/trombino.html http://dj.joss.free.fr/netiquet.htm http://frederic.sigonneau.free.fr/
Jacquouille.
<penelope> a écrit dans le message de news:
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 ?
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)
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
JB
Bonjour,
Sub Macro2() ' 8 sec pour 10 colonnes t = Timer Set champ = [A:J] champ.Interior.ColorIndex = xlNone For Each c In champ If Len(c) = 9 And Left(c, 1) = "6" Then c.Interior.ColorIndex = 3 End If Next c MsgBox Timer() - t End Sub
Si le nombre de cellules contenant 6 est faible:
Sub Macro1() ' 1,35 s pour 10 colonnes t = Timer Set champ = [A:J] champ.Interior.ColorIndex = xlNone Set c = champ.Find(What:="6", LookIn:=xlValues, LookAt:=xlPart) If Not c Is Nothing Then premier = c.Address Do If Len(c) = 9 And Left(c, 1) = "6" Then c.Interior.ColorIndex = 3 End If Set c = champ.FindNext(c) Loop While Not c Is Nothing And c.Address <> premier End If MsgBox Timer() - t End Sub
Cordialement JB
On 14 avr, 08:03, penelope wrote:
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 ?
Bonjour,
Sub Macro2() ' 8 sec pour 10 colonnes
t = Timer
Set champ = [A:J]
champ.Interior.ColorIndex = xlNone
For Each c In champ
If Len(c) = 9 And Left(c, 1) = "6" Then
c.Interior.ColorIndex = 3
End If
Next c
MsgBox Timer() - t
End Sub
Si le nombre de cellules contenant 6 est faible:
Sub Macro1() ' 1,35 s pour 10 colonnes
t = Timer
Set champ = [A:J]
champ.Interior.ColorIndex = xlNone
Set c = champ.Find(What:="6", LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
premier = c.Address
Do
If Len(c) = 9 And Left(c, 1) = "6" Then
c.Interior.ColorIndex = 3
End If
Set c = champ.FindNext(c)
Loop While Not c Is Nothing And c.Address <> premier
End If
MsgBox Timer() - t
End Sub
Cordialement JB
On 14 avr, 08:03, penelope wrote:
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
Sub Macro2() ' 8 sec pour 10 colonnes t = Timer Set champ = [A:J] champ.Interior.ColorIndex = xlNone For Each c In champ If Len(c) = 9 And Left(c, 1) = "6" Then c.Interior.ColorIndex = 3 End If Next c MsgBox Timer() - t End Sub
Si le nombre de cellules contenant 6 est faible:
Sub Macro1() ' 1,35 s pour 10 colonnes t = Timer Set champ = [A:J] champ.Interior.ColorIndex = xlNone Set c = champ.Find(What:="6", LookIn:=xlValues, LookAt:=xlPart) If Not c Is Nothing Then premier = c.Address Do If Len(c) = 9 And Left(c, 1) = "6" Then c.Interior.ColorIndex = 3 End If Set c = champ.FindNext(c) Loop While Not c Is Nothing And c.Address <> premier End If MsgBox Timer() - t End Sub
Cordialement JB
On 14 avr, 08:03, penelope wrote:
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 ?
JB
Pour 10 colonnes 0,26 sec
Sub macro3() t = Timer() temp = [A1].CurrentRegion For i = 1 To UBound(temp, 1) For j = 1 To UBound(temp, 2) If Len(temp(i, j)) = 9 Then If Left(temp(i, j), 1) = "6" Then Cells(i, j).Interior.ColorIndex = 3 End If End If Next j Next i MsgBox Timer() - t End Sub
JB
On 14 avr, 08:03, penelope wrote:
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 ?
Pour 10 colonnes 0,26 sec
Sub macro3()
t = Timer()
temp = [A1].CurrentRegion
For i = 1 To UBound(temp, 1)
For j = 1 To UBound(temp, 2)
If Len(temp(i, j)) = 9 Then
If Left(temp(i, j), 1) = "6" Then
Cells(i, j).Interior.ColorIndex = 3
End If
End If
Next j
Next i
MsgBox Timer() - t
End Sub
JB
On 14 avr, 08:03, penelope wrote:
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
Sub macro3() t = Timer() temp = [A1].CurrentRegion For i = 1 To UBound(temp, 1) For j = 1 To UBound(temp, 2) If Len(temp(i, j)) = 9 Then If Left(temp(i, j), 1) = "6" Then Cells(i, j).Interior.ColorIndex = 3 End If End If Next j Next i MsgBox Timer() - t End Sub
JB
On 14 avr, 08:03, penelope wrote:
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 ?
Jacquouille
Salut Président Deuyx petites questions..... Pourquoi ce "6" ? (dans If Left(c, 1) = "6" ). Perso, j'ai fait des cel 6aaaa et il me fait la recherche avec If Left(c, 1) = 6 Deuxio: Quel est le sens de balayage des l aplage? Analyse-t-il la ligne 1 complète, puis la 2 ... ou balaye-t-il la colonne A, puis l'abbé? Ceci, afin de comprendre la pertinence de ta remarque concernant la queue de peloton. Un bien grand merci et surtout un bon WE bien pastissé.
-- Bien amicalmement, Vivement conseillés: http://www.excelabo.net http://jacxl.free.fr/mpfe/trombino.html http://dj.joss.free.fr/netiquet.htm http://frederic.sigonneau.free.fr/
Jacquouille.
"AV" a écrit dans le message de news:
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
Salut Président
Deuyx petites questions.....
Pourquoi ce "6" ? (dans If Left(c, 1) = "6" ). Perso, j'ai fait des cel
6aaaa et il me fait la recherche avec If Left(c, 1) = 6
Deuxio:
Quel est le sens de balayage des l aplage?
Analyse-t-il la ligne 1 complète, puis la 2 ... ou balaye-t-il la colonne A,
puis l'abbé?
Ceci, afin de comprendre la pertinence de ta remarque concernant la queue de
peloton.
Un bien grand merci et surtout un bon WE bien pastissé.
--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/
Jacquouille.
"AV" <alainPFFFvallon@wanadoo.fr> a écrit dans le message de news:
Osr3GgmfHHA.4704@TK2MSFTNGP06.phx.gbl...
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)
Salut Président Deuyx petites questions..... Pourquoi ce "6" ? (dans If Left(c, 1) = "6" ). Perso, j'ai fait des cel 6aaaa et il me fait la recherche avec If Left(c, 1) = 6 Deuxio: Quel est le sens de balayage des l aplage? Analyse-t-il la ligne 1 complète, puis la 2 ... ou balaye-t-il la colonne A, puis l'abbé? Ceci, afin de comprendre la pertinence de ta remarque concernant la queue de peloton. Un bien grand merci et surtout un bon WE bien pastissé.
-- Bien amicalmement, Vivement conseillés: http://www.excelabo.net http://jacxl.free.fr/mpfe/trombino.html http://dj.joss.free.fr/netiquet.htm http://frederic.sigonneau.free.fr/
Jacquouille.
"AV" a écrit dans le message de news:
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
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 .....
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
Modeste
Bonsour® penelope avec ferveur ;o))) vous nous disiez :
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
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) MsgBox "trouvé : " & xx.Value & Chr(10) & " en : " & xx.Address() & Chr(10) & "durée :" & Format(Now - zz, "ss.000") 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) MsgBox "trouvé : " & xx.Value & Chr(10) & " en : " & xx.Address() & Chr(10) & "durée :" & Format(Now - zz, "ss.000") End Sub
-- -- @+ ;o)))
Bonsour® penelope avec ferveur ;o))) vous nous disiez :
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
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)
MsgBox "trouvé : " & xx.Value & Chr(10) & " en : " & xx.Address() &
Chr(10) & "durée :" & Format(Now - zz, "ss.000")
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)
MsgBox "trouvé : " & xx.Value & Chr(10) & " en : " & xx.Address() &
Chr(10) & "durée :" & Format(Now - zz, "ss.000")
End Sub
Bonsour® penelope avec ferveur ;o))) vous nous disiez :
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
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) MsgBox "trouvé : " & xx.Value & Chr(10) & " en : " & xx.Address() & Chr(10) & "durée :" & Format(Now - zz, "ss.000") 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) MsgBox "trouvé : " & xx.Value & Chr(10) & " en : " & xx.Address() & Chr(10) & "durée :" & Format(Now - zz, "ss.000") End Sub
-- -- @+ ;o)))
Modeste
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
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)))
Jacquouille
Un tout grand merci Jacques.
-- Bien amicalmement, Vivement conseillés: http://www.excelabo.net http://jacxl.free.fr/mpfe/trombino.html http://dj.joss.free.fr/netiquet.htm http://frederic.sigonneau.free.fr/
Jacquouille.
"AV" a écrit dans le message de news: e$
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
Un tout grand merci
Jacques.
--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/
Jacquouille.
"AV" <alainPFFFvallon@wanadoo.fr> a écrit dans le message de news:
e$2Uv9mfHHA.4868@TK2MSFTNGP06.phx.gbl...
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 .....
-- Bien amicalmement, Vivement conseillés: http://www.excelabo.net http://jacxl.free.fr/mpfe/trombino.html http://dj.joss.free.fr/netiquet.htm http://frederic.sigonneau.free.fr/
Jacquouille.
"AV" a écrit dans le message de news: e$
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
Jacquouille
Pfffft 2 sec, c'est vraiment un tout petit tennis. -)
-- Bien amicalmement, Vivement conseillés: http://www.excelabo.net http://jacxl.free.fr/mpfe/trombino.html http://dj.joss.free.fr/netiquet.htm http://frederic.sigonneau.free.fr/
Jacquouille.
"Modeste" a écrit dans le message de news: e$
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)))
Pfffft
2 sec, c'est vraiment un tout petit tennis. -)
--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/
Jacquouille.
"Modeste" <nomail@nomail.net> a écrit dans le message de news:
e$kfBqnfHHA.1220@TK2MSFTNGP03.phx.gbl...
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
Pfffft 2 sec, c'est vraiment un tout petit tennis. -)
-- Bien amicalmement, Vivement conseillés: http://www.excelabo.net http://jacxl.free.fr/mpfe/trombino.html http://dj.joss.free.fr/netiquet.htm http://frederic.sigonneau.free.fr/
Jacquouille.
"Modeste" a écrit dans le message de news: e$
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