Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche avec Find et copy

5 réponses
Avatar
Sylian
Re-bonjour tout le monde !

Voilà, j'ai un souci sur une formule qui fonctionne à merveille dans un
cas et pas dans l'autre :

z = 2 'saute une ligne
For Each c In Range(fl1.Cells(ligneDébut1, ColonneDébut1),
fl1.Cells(ligneFin1, ColonneDébut1))
Set Cherch = c.Find(what:=RefEdit2.Value, LookAt:=xlWhole)
If Not Cherch Is Nothing And (c <> "") Then
c.EntireRow.Copy fl2.Cells(z, 1)
z = z + 1
End If

Next c
Set Cherch = Nothing

Quand je fonctionnais de plage à plage comme suit :
Set Cherch = Range(fl3.Cells(ligneDébut2, ColonneDébut2),
fl3.Cells(ligneFin2, ColonneDébut2)).Find(c, LookAt:=xlWhole)
If Not Cherch Is Nothing And (c <> "") Then
c.EntireRow.Copy fl2.Cells(z, 1)
z=z+1
etc...

Ca fonctionne super ! Mais quand je met une valeur comme "toto" ou "ex*"
la recherche ne fonctionne pas. J'ai du me tromper dans le Set Cherch =
c.Find(..)

Une idée ? J'essaye, je cherche, mais depuis plusieurs heures je tourne
en rond. Une piste ? Merci d'avance.

Cordialement,

Sylian

5 réponses

Avatar
MichDenis
Bonjour Sylian,

Voici ce que ton code "pourrait" donner :

A ) Quand on pose une question, il faut quand même soigner un peu sa présentation.
Disons que ça dispose mieux les bénévoles.

B ) Tu te dois d'énoncer clairement ce que tu veux que ta procédure exécute...
Exemple :
1- qu'est-ce que tu as dans tes cellules ? des nombres, du texte, des dates...
2- qu'est-ce que tu cherches ? (la méthode Find)
3- si la procédure trouve, que faire ?

C ) Avec l'information que tu donnes, il est très difficile de te donner une
réponse satisfaisante.

'--------------------------------------------------
Sub test()
Dim Z As Integer
Dim LigneDébut1 As Long
Dim ColonneDébut1 As Integer
Dim LigneFini1 As Long
Dim ColonneDébut1 As Integer
Dim Plage As Range, C As Range
Dim CherCh as Range
Dim F11 As Worksheet
Dim F12 As Worksheet
Dim MyVar As Variant
Dim Z As Long

LigneDébut1 = 1
ColonneDébut1 = 1
LigneFini1 = 50
ColonneDébut1 = 11

Set F11 = Worksheets("SonNom")
Set F12 = Worksheets("SonNom")

With F11
Set Plage = .Range(.Cells(LigneDébut1, ColonneDébut1), _
.Cells(ligneFin1, ColonneDébut1))
End With

MyVar = RefEdit2.Value
For Each C In Plage
Set Cherch = C.Find(what:=MyVar, lookat:=xlWhole)
If Not Cherch Is Nothing And (C <> "") Then
Z = Z + 1
C.EntireRow.Copy fl2.Cells(Z, 1)
End If
Next C
Set Cherch = Nothing

End Sub
'--------------------------------------------------



"Sylian" a écrit dans le message de groupe de discussion :
4a378e68$0$14817$
Re-bonjour tout le monde !

Voilà, j'ai un souci sur une formule qui fonctionne à merveille dans un
cas et pas dans l'autre :

z = 2 'saute une ligne
For Each c In Range(fl1.Cells(ligneDébut1, ColonneDébut1),
fl1.Cells(ligneFin1, ColonneDébut1))
Set Cherch = c.Find(what:=RefEdit2.Value, LookAt:=xlWhole)
If Not Cherch Is Nothing And (c <> "") Then
c.EntireRow.Copy fl2.Cells(z, 1)
z = z + 1
End If

Next c
Set Cherch = Nothing

Quand je fonctionnais de plage à plage comme suit :
Set Cherch = Range(fl3.Cells(ligneDébut2, ColonneDébut2),
fl3.Cells(ligneFin2, ColonneDébut2)).Find(c, LookAt:=xlWhole)
If Not Cherch Is Nothing And (c <> "") Then
c.EntireRow.Copy fl2.Cells(z, 1)
z=z+1
etc...

Ca fonctionne super ! Mais quand je met une valeur comme "toto" ou "ex*"
la recherche ne fonctionne pas. J'ai du me tromper dans le Set Cherch c.Find(..)

Une idée ? J'essaye, je cherche, mais depuis plusieurs heures je tourne
en rond. Une piste ? Merci d'avance.

Cordialement,

Sylian
Avatar
Sylian
Désolé, je ne voulais pas surcharger le poste avec des explications
brumeuses car le but de la macros est très spécifique. Je pensais qu'en
écrivant une partie du code en précisant la ligne qui me posait problème
vous auriez peut-être remarquer une erreur de syntaxe simple qui
m'échappait à mon faible niveau.
Je vais essayer la méthode B)

1- Je dispose d'une plage de cellule avec des noms (une colonne limitée).
2-Je recherche toutes les cellule de cette plage comportant un nom
entrée dans une TextBox (comme si je cherchais "tot*" et que cela
correspondait aussi bien à "toto" que "tota" ou encore "totintabulle"
présent dans ma plage de nom.
3-A chaque fois que la procédure trouve, alors je copie la ligne entière
à partir de la plage pour chaque cellule correspondante.

J'espère que la présentation est plus soignée et que vous disposez
d'assez d'information pour m'aider à finaliser ma macro. C'est bête mais
c'est souvent lorsqu'on est tout prêt qu'on bloque.

Merci de votre aide et désolé pour le poste précédent. N'y voyez aucun
mal car je mesure l'envergure du travail des bénévoles présent sur les
news, soyez en assurés.

Sylian

MichDenis a écrit :
Bonjour Sylian,

Voici ce que ton code "pourrait" donner :

A ) Quand on pose une question, il faut quand même soigner un peu sa présentation.
Disons que ça dispose mieux les bénévoles.

B ) Tu te dois d'énoncer clairement ce que tu veux que ta procédure exécute...
Exemple :
1- qu'est-ce que tu as dans tes cellules ? des nombres, du texte, des dates...
2- qu'est-ce que tu cherches ? (la méthode Find)
3- si la procédure trouve, que faire ?

C ) Avec l'information que tu donnes, il est très difficile de te donner une
réponse satisfaisante.

'--------------------------------------------------
S


Avatar
MichDenis
Bonjour Sylian,

(les commentaires émises n'étaient pas un reproche)

Si j'avais à résoudre ta problématique, je procéderais de cette
manière, c'est beaucoup plus rapide qu'une boucle sur chacune
des cellules.

'------------------------------------------------------
Sub test()
Dim L As Long
Dim Cherche As String
Dim Rg As Range

'La chaîne de caractère recherchée
Cherche = "*" & "tot" & "*"
'OU
'Cherche = "*" & Userform1.TextBox1 & "*"

'Plage est une plage nommée
Set Rg = Range("Plage")

Application.ScreenUpdating = False
For Each r In Rg.Rows
If Application.CountIf(r, Cherche) > 0 Then
'Nom de la feuille où seront copiées les données
With Worksheets("Feuil2")
If .Range("A1") = "" Then
r.Copy .Range("A1")
Else
L = .Range("A65536").End(xlUp)(2).Row
r.Copy .Range("A" & L)
End If
End With
End If
Next
Application.ScreenUpdating = True
End Sub
'------------------------------------------------------



"Sylian" a écrit dans le message de groupe de discussion :
4a381123$0$23237$
Désolé, je ne voulais pas surcharger le poste avec des explications
brumeuses car le but de la macros est très spécifique. Je pensais qu'en
écrivant une partie du code en précisant la ligne qui me posait problème
vous auriez peut-être remarquer une erreur de syntaxe simple qui
m'échappait à mon faible niveau.
Je vais essayer la méthode B)

1- Je dispose d'une plage de cellule avec des noms (une colonne limitée).
2-Je recherche toutes les cellule de cette plage comportant un nom
entrée dans une TextBox (comme si je cherchais "tot*" et que cela
correspondait aussi bien à "toto" que "tota" ou encore "totintabulle"
présent dans ma plage de nom.
3-A chaque fois que la procédure trouve, alors je copie la ligne entière
à partir de la plage pour chaque cellule correspondante.

J'espère que la présentation est plus soignée et que vous disposez
d'assez d'information pour m'aider à finaliser ma macro. C'est bête mais
c'est souvent lorsqu'on est tout prêt qu'on bloque.

Merci de votre aide et désolé pour le poste précédent. N'y voyez aucun
mal car je mesure l'envergure du travail des bénévoles présent sur les
news, soyez en assurés.

Sylian

MichDenis a écrit :
Bonjour Sylian,

Voici ce que ton code "pourrait" donner :

A ) Quand on pose une question, il faut quand même soigner un peu sa présentation.
Disons que ça dispose mieux les bénévoles.

B ) Tu te dois d'énoncer clairement ce que tu veux que ta procédure exécute...
Exemple :
1- qu'est-ce que tu as dans tes cellules ? des nombres, du texte, des dates...
2- qu'est-ce que tu cherches ? (la méthode Find)
3- si la procédure trouve, que faire ?

C ) Avec l'information que tu donnes, il est très difficile de te donner une
réponse satisfaisante.

'--------------------------------------------------
S


Avatar
Mishell
Bonjour.

Pour reprendre ton code, tu pourrais y aller comme ceci:

Private Sub CommandButton1_Click()

Dim ChercherQuoi As Variant

Set fl2 = Sheets("feuil2").Range("a1")

Set fl1 = Range("A:B")
ligneDébut1 = 1
ColonneDébut1 = 1
ligneFin1 = 21

z = 2 'saute une ligne

Dim Plage As String

Plage = RefEdit2.Value
ChercherQuoi = Range(Plage)

For Each c In Range(fl1.Cells(ligneDébut1, ColonneDébut1), _
fl1.Cells(ligneFin1, ColonneDébut1))


Set Cherch = c.Find(what:=ChercherQuoi, LookAt:=xlWhole,
LookIn:=xlFormulas)
If Not Cherch Is Nothing And (c <> "") Then
c.EntireRow.Copy


fl2.Cells(z, 1).PasteSpecial Paste:=xlValues, _
Operation:=xlNone, SkipBlanks:úlse, Transpose:úlse

fl2.Cells(z, 1).PasteSpecial Paste:=xlFormats, _
Operation:=xlNone, SkipBlanks:úlse, Transpose:úlse

z = z + 1
End If

Next c

End Sub


Mishell


"Sylian" wrote in message
news:4a381123$0$23237$
Désolé, je ne voulais pas surcharger le poste avec des explications
brumeuses car le but de la macros est très spécifique. Je pensais qu'en
écrivant une partie du code en précisant la ligne qui me posait problème
vous auriez peut-être remarquer une erreur de syntaxe simple qui
m'échappait à mon faible niveau.
Je vais essayer la méthode B)

1- Je dispose d'une plage de cellule avec des noms (une colonne limitée).
2-Je recherche toutes les cellule de cette plage comportant un nom entrée
dans une TextBox (comme si je cherchais "tot*" et que cela correspondait
aussi bien à "toto" que "tota" ou encore "totintabulle" présent dans ma
plage de nom.
3-A chaque fois que la procédure trouve, alors je copie la ligne entière à
partir de la plage pour chaque cellule correspondante.

J'espère que la présentation est plus soignée et que vous disposez d'assez
d'information pour m'aider à finaliser ma macro. C'est bête mais c'est
souvent lorsqu'on est tout prêt qu'on bloque.

Merci de votre aide et désolé pour le poste précédent. N'y voyez aucun mal
car je mesure l'envergure du travail des bénévoles présent sur les news,
soyez en assurés.

Sylian

MichDenis a écrit :
Bonjour Sylian,

Voici ce que ton code "pourrait" donner :

A ) Quand on pose une question, il faut quand même soigner un peu sa
présentation.
Disons que ça dispose mieux les bénévoles.

B ) Tu te dois d'énoncer clairement ce que tu veux que ta procédure
exécute...
Exemple :
1- qu'est-ce que tu as dans tes cellules ? des nombres, du texte, des
dates...
2- qu'est-ce que tu cherches ? (la méthode Find)
3- si la procédure trouve, que faire ?

C ) Avec l'information que tu donnes, il est très difficile de te donner
une
réponse satisfaisante.

'--------------------------------------------------
S




Avatar
Sylian
Merci à vous deux ! En combinant vos idées j'ai réussi à arriver à mes
fins. Le résultat est plus que satisfaisant et vous y êtes pour beaucoup.

Merci à vous et à ce formidable newsgroups

Sylian