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

utilisation de Find

5 réponses
Avatar
aurelie
Bonjour à tous,
Dans une colonne(D) d'un fichier (source),j'ai des nombres (toujours
différents) et des cellules vides.
Je voudrais trouver les cellules non vides, récupérer la valeur et l'adresse
de la cellule trouvée, puis chercher la valeur trouvée dans un autre fichier
(destination), ce qui me permettra ensuite de faire une mise à jours des
cellules voisines.
Puis passer à la cellule non vide suivante dans le fichier source et ainsi
de suite...

J'aimerai savoir si le critére de sélection de la méthode Find peut être
"une négation", soit un truc du genre Find(What:=<>"")
Est ce que je peux imbriqué plusieurs boucles Find dans une procédure? (En
effet, ici je dois trouver les cellules non vides, et ensuite trouver la
valeur de la cellule correspondante dans le fichier destination)

Merci d'avance pour votre aide et vos conseils,
Cordialement,

Aurélie

5 réponses

Avatar
anonymousA
bonjour,

on va supposer que ton fichier source où se trouve les données de base
s'appelle source.xls et la feuille où sont les données s'appelle sourcesheet.
de la même manière on va supposer que ton fichier destination où tu mets à
jour les données s'appelle dest.xls et la feuille où sont les données à
rechercher s'appelle destsheet.
on suppose evidemment que les 2 fichies sont ouverts et que la feuille
destsheet n'est pas protégée.

Dim wshsource As Worksheet
Dim wshdest as worksheet
Dim plage as range, plage1 as range, plage2 as range, rngdest as range
Dim rngfind as range

Set wshsource = workbooks("source.xls").Sheets("sourcesheet")
Set wshdest = workbooks("dest.xls").Sheets("destsheet")

Set plage1 = wshsource.Cells.SpecialCells(xlCellTypeConstants)
Set plage2 = wshsource.Cells.SpecialCells(xlCellTypeFormulas)
Set plage = Union(plage1, plage2)

set rngdest= wshdest.cells

For Each c In plage
With rngdest
Set rngfind = .Find(What:= c.value, lookat:=xlwhole)
If Not rngfind Is Nothing Then
firstaddress = rngfind.Address
rngfind.offset(0,1).value="tutu"
Set rngfind= .FindNext(rngfind)
Do While rngfind.Address <> firstaddress And Not rngfind Is
Nothing
rngfind.offset(0,1).value="tutu"
Set rngfind= .FindNext(rngfind)
Loop
End If
End With
Next

Ce que fait cette proc, c'est qu'elle constitue tout d'abord une plage des
constantes et des résultats de formules ( c'est le résultat du Union) dans la
feuille sourcesheet du fichier sourec.xls.
Puis ensuite , à partir des cellules contenues dans le Union, elle controle
si dans le fichier dest.xls à la feuille destsheet, il existe une ou des
cellules répondant aux valeurs de plage du Union ( attention, la recherche
ici s'execute sur la valeur complète , d'où le lookat:=xlwhole ).
Si elle trouve une ou des cellules correspondantes, elle écrit sur la même
ligne et avec une colonne de décalage vers la droite (
rngfind.offset(0,1).value) une valeur qui est ici "tutu" dans la feuille
destsheet du fichier dest.xls.

Voilà, tu peux adapter cette proc à ton besoin. Elle fonctionne sans
difficulté aucune sous les conditions préalablement citées.

A+



Bonjour à tous,
Dans une colonne(D) d'un fichier (source),j'ai des nombres (toujours
différents) et des cellules vides.
Je voudrais trouver les cellules non vides, récupérer la valeur et l'adresse
de la cellule trouvée, puis chercher la valeur trouvée dans un autre fichier
(destination), ce qui me permettra ensuite de faire une mise à jours des
cellules voisines.
Puis passer à la cellule non vide suivante dans le fichier source et ainsi
de suite...

J'aimerai savoir si le critére de sélection de la méthode Find peut être
"une négation", soit un truc du genre Find(What:=<>"")
Est ce que je peux imbriqué plusieurs boucles Find dans une procédure? (En
effet, ici je dois trouver les cellules non vides, et ensuite trouver la
valeur de la cellule correspondante dans le fichier destination)

Merci d'avance pour votre aide et vos conseils,
Cordialement,

Aurélie


Avatar
aurelie
Merci bcp pour ta réponse très compléte! Je me met dès maintenant au travail!


bonjour,

on va supposer que ton fichier source où se trouve les données de base
s'appelle source.xls et la feuille où sont les données s'appelle sourcesheet.
de la même manière on va supposer que ton fichier destination où tu mets à
jour les données s'appelle dest.xls et la feuille où sont les données à
rechercher s'appelle destsheet.
on suppose evidemment que les 2 fichies sont ouverts et que la feuille
destsheet n'est pas protégée.

Dim wshsource As Worksheet
Dim wshdest as worksheet
Dim plage as range, plage1 as range, plage2 as range, rngdest as range
Dim rngfind as range

Set wshsource = workbooks("source.xls").Sheets("sourcesheet")
Set wshdest = workbooks("dest.xls").Sheets("destsheet")

Set plage1 = wshsource.Cells.SpecialCells(xlCellTypeConstants)
Set plage2 = wshsource.Cells.SpecialCells(xlCellTypeFormulas)
Set plage = Union(plage1, plage2)

set rngdest= wshdest.cells

For Each c In plage
With rngdest
Set rngfind = .Find(What:= c.value, lookat:=xlwhole)
If Not rngfind Is Nothing Then
firstaddress = rngfind.Address
rngfind.offset(0,1).value="tutu"
Set rngfind= .FindNext(rngfind)
Do While rngfind.Address <> firstaddress And Not rngfind Is
Nothing
rngfind.offset(0,1).value="tutu"
Set rngfind= .FindNext(rngfind)
Loop
End If
End With
Next

Ce que fait cette proc, c'est qu'elle constitue tout d'abord une plage des
constantes et des résultats de formules ( c'est le résultat du Union) dans la
feuille sourcesheet du fichier sourec.xls.
Puis ensuite , à partir des cellules contenues dans le Union, elle controle
si dans le fichier dest.xls à la feuille destsheet, il existe une ou des
cellules répondant aux valeurs de plage du Union ( attention, la recherche
ici s'execute sur la valeur complète , d'où le lookat:=xlwhole ).
Si elle trouve une ou des cellules correspondantes, elle écrit sur la même
ligne et avec une colonne de décalage vers la droite (
rngfind.offset(0,1).value) une valeur qui est ici "tutu" dans la feuille
destsheet du fichier dest.xls.

Voilà, tu peux adapter cette proc à ton besoin. Elle fonctionne sans
difficulté aucune sous les conditions préalablement citées.

A+



Bonjour à tous,
Dans une colonne(D) d'un fichier (source),j'ai des nombres (toujours
différents) et des cellules vides.
Je voudrais trouver les cellules non vides, récupérer la valeur et l'adresse
de la cellule trouvée, puis chercher la valeur trouvée dans un autre fichier
(destination), ce qui me permettra ensuite de faire une mise à jours des
cellules voisines.
Puis passer à la cellule non vide suivante dans le fichier source et ainsi
de suite...

J'aimerai savoir si le critére de sélection de la méthode Find peut être
"une négation", soit un truc du genre Find(What:=<>"")
Est ce que je peux imbriqué plusieurs boucles Find dans une procédure? (En
effet, ici je dois trouver les cellules non vides, et ensuite trouver la
valeur de la cellule correspondante dans le fichier destination)

Merci d'avance pour votre aide et vos conseils,
Cordialement,

Aurélie




Avatar
aurelie
j'ai encore un petit probléme. Je dois récupérer la ligne de la cellule
selectionner dans le fichier source afin de pouvoir effectuer ma mise à jour,
voici mon code:
For Each c In plage
With rngdest
Set cellule = .Find(What:=c.Value, lookat:=xlWhole)
If Not cellule Is Nothing Then
Lignedest = cellule.Rows
Lignesource = c.Rows
For i = 4 To 8
If wshsource.Cells(Lignesource, i).Value <>
wshdest.Cells(Lignedest, i).Value Then
wshdest.Activate
wshdest.Cells(Lignedest, i).Select
Selection.Interior.ColorIndex = 6
wshdest.Cells(Lignedest, colonneModifs).Select
ActiveCell.FormulaR1C1 = "X"
End If
Next i
Else .....etc...

Le programme bloque à la ligne Lignesource = c.Rows, il me dit
"incompatibilité de type". Peut être s'agit il juste d'un probléme de
syntaxe, en tout cas je bloque!

Merci de m'aider (encore!) si vous pouvez!

Aurélie


Merci bcp pour ta réponse très compléte! Je me met dès maintenant au travail!


bonjour,

on va supposer que ton fichier source où se trouve les données de base
s'appelle source.xls et la feuille où sont les données s'appelle sourcesheet.
de la même manière on va supposer que ton fichier destination où tu mets à
jour les données s'appelle dest.xls et la feuille où sont les données à
rechercher s'appelle destsheet.
on suppose evidemment que les 2 fichies sont ouverts et que la feuille
destsheet n'est pas protégée.

Dim wshsource As Worksheet
Dim wshdest as worksheet
Dim plage as range, plage1 as range, plage2 as range, rngdest as range
Dim rngfind as range

Set wshsource = workbooks("source.xls").Sheets("sourcesheet")
Set wshdest = workbooks("dest.xls").Sheets("destsheet")

Set plage1 = wshsource.Cells.SpecialCells(xlCellTypeConstants)
Set plage2 = wshsource.Cells.SpecialCells(xlCellTypeFormulas)
Set plage = Union(plage1, plage2)

set rngdest= wshdest.cells

For Each c In plage
With rngdest
Set rngfind = .Find(What:= c.value, lookat:=xlwhole)
If Not rngfind Is Nothing Then
firstaddress = rngfind.Address
rngfind.offset(0,1).value="tutu"
Set rngfind= .FindNext(rngfind)
Do While rngfind.Address <> firstaddress And Not rngfind Is
Nothing
rngfind.offset(0,1).value="tutu"
Set rngfind= .FindNext(rngfind)
Loop
End If
End With
Next

Ce que fait cette proc, c'est qu'elle constitue tout d'abord une plage des
constantes et des résultats de formules ( c'est le résultat du Union) dans la
feuille sourcesheet du fichier sourec.xls.
Puis ensuite , à partir des cellules contenues dans le Union, elle controle
si dans le fichier dest.xls à la feuille destsheet, il existe une ou des
cellules répondant aux valeurs de plage du Union ( attention, la recherche
ici s'execute sur la valeur complète , d'où le lookat:=xlwhole ).
Si elle trouve une ou des cellules correspondantes, elle écrit sur la même
ligne et avec une colonne de décalage vers la droite (
rngfind.offset(0,1).value) une valeur qui est ici "tutu" dans la feuille
destsheet du fichier dest.xls.

Voilà, tu peux adapter cette proc à ton besoin. Elle fonctionne sans
difficulté aucune sous les conditions préalablement citées.

A+



Bonjour à tous,
Dans une colonne(D) d'un fichier (source),j'ai des nombres (toujours
différents) et des cellules vides.
Je voudrais trouver les cellules non vides, récupérer la valeur et l'adresse
de la cellule trouvée, puis chercher la valeur trouvée dans un autre fichier
(destination), ce qui me permettra ensuite de faire une mise à jours des
cellules voisines.
Puis passer à la cellule non vide suivante dans le fichier source et ainsi
de suite...

J'aimerai savoir si le critére de sélection de la méthode Find peut être
"une négation", soit un truc du genre Find(What:=<>"")
Est ce que je peux imbriqué plusieurs boucles Find dans une procédure? (En
effet, ici je dois trouver les cellules non vides, et ensuite trouver la
valeur de la cellule correspondante dans le fichier destination)

Merci d'avance pour votre aide et vos conseils,
Cordialement,

Aurélie






Avatar
ChrisV
Bonjour Aurélie,

Lignesource = c.Row


ChrisV


"aurelie" a écrit dans le message de
news:
j'ai encore un petit probléme. Je dois récupérer la ligne de la cellule
selectionner dans le fichier source afin de pouvoir effectuer ma mise à
jour,
voici mon code:
For Each c In plage
With rngdest
Set cellule = .Find(What:=c.Value, lookat:=xlWhole)
If Not cellule Is Nothing Then
Lignedest = cellule.Rows
Lignesource = c.Rows
For i = 4 To 8
If wshsource.Cells(Lignesource, i).Value <>
wshdest.Cells(Lignedest, i).Value Then
wshdest.Activate
wshdest.Cells(Lignedest, i).Select
Selection.Interior.ColorIndex = 6
wshdest.Cells(Lignedest, colonneModifs).Select
ActiveCell.FormulaR1C1 = "X"
End If
Next i
Else .....etc...

Le programme bloque à la ligne Lignesource = c.Rows, il me dit
"incompatibilité de type". Peut être s'agit il juste d'un probléme de
syntaxe, en tout cas je bloque!

Merci de m'aider (encore!) si vous pouvez!

Aurélie


Merci bcp pour ta réponse très compléte! Je me met dès maintenant au
travail!


bonjour,

on va supposer que ton fichier source où se trouve les données de base
s'appelle source.xls et la feuille où sont les données s'appelle
sourcesheet.
de la même manière on va supposer que ton fichier destination où tu
mets à
jour les données s'appelle dest.xls et la feuille où sont les données à
rechercher s'appelle destsheet.
on suppose evidemment que les 2 fichies sont ouverts et que la feuille
destsheet n'est pas protégée.

Dim wshsource As Worksheet
Dim wshdest as worksheet
Dim plage as range, plage1 as range, plage2 as range, rngdest as range
Dim rngfind as range

Set wshsource = workbooks("source.xls").Sheets("sourcesheet")
Set wshdest = workbooks("dest.xls").Sheets("destsheet")

Set plage1 = wshsource.Cells.SpecialCells(xlCellTypeConstants)
Set plage2 = wshsource.Cells.SpecialCells(xlCellTypeFormulas)
Set plage = Union(plage1, plage2)

set rngdest= wshdest.cells

For Each c In plage
With rngdest
Set rngfind = .Find(What:= c.value, lookat:=xlwhole)
If Not rngfind Is Nothing Then
firstaddress = rngfind.Address
rngfind.offset(0,1).value="tutu"
Set rngfind= .FindNext(rngfind)
Do While rngfind.Address <> firstaddress And Not rngfind
Is
Nothing
rngfind.offset(0,1).value="tutu"
Set rngfind= .FindNext(rngfind)
Loop
End If
End With
Next

Ce que fait cette proc, c'est qu'elle constitue tout d'abord une plage
des
constantes et des résultats de formules ( c'est le résultat du Union)
dans la
feuille sourcesheet du fichier sourec.xls.
Puis ensuite , à partir des cellules contenues dans le Union, elle
controle
si dans le fichier dest.xls à la feuille destsheet, il existe une ou
des
cellules répondant aux valeurs de plage du Union ( attention, la
recherche
ici s'execute sur la valeur complète , d'où le lookat:=xlwhole ).
Si elle trouve une ou des cellules correspondantes, elle écrit sur la
même
ligne et avec une colonne de décalage vers la droite (
rngfind.offset(0,1).value) une valeur qui est ici "tutu" dans la
feuille
destsheet du fichier dest.xls.

Voilà, tu peux adapter cette proc à ton besoin. Elle fonctionne sans
difficulté aucune sous les conditions préalablement citées.

A+



Bonjour à tous,
Dans une colonne(D) d'un fichier (source),j'ai des nombres (toujours
différents) et des cellules vides.
Je voudrais trouver les cellules non vides, récupérer la valeur et
l'adresse
de la cellule trouvée, puis chercher la valeur trouvée dans un autre
fichier
(destination), ce qui me permettra ensuite de faire une mise à jours
des
cellules voisines.
Puis passer à la cellule non vide suivante dans le fichier source et
ainsi
de suite...

J'aimerai savoir si le critére de sélection de la méthode Find peut
être
"une négation", soit un truc du genre Find(What:=<>"")
Est ce que je peux imbriqué plusieurs boucles Find dans une
procédure? (En
effet, ici je dois trouver les cellules non vides, et ensuite trouver
la
valeur de la cellule correspondante dans le fichier destination)

Merci d'avance pour votre aide et vos conseils,
Cordialement,

Aurélie








Avatar
aurelie
Je me sens un peu bête là!
C'est vraiment une erreur bête de syntaxe!! Merci de me l'avoir montrer, à
force d'être toujours le nez dans une programmation, on ne vois plus les
petites erreurs!
Encore merci :-)



Bonjour Aurélie,

Lignesource = c.Row


ChrisV


"aurelie" a écrit dans le message de
news:
j'ai encore un petit probléme. Je dois récupérer la ligne de la cellule
selectionner dans le fichier source afin de pouvoir effectuer ma mise à
jour,
voici mon code:
For Each c In plage
With rngdest
Set cellule = .Find(What:=c.Value, lookat:=xlWhole)
If Not cellule Is Nothing Then
Lignedest = cellule.Rows
Lignesource = c.Rows
For i = 4 To 8
If wshsource.Cells(Lignesource, i).Value <>
wshdest.Cells(Lignedest, i).Value Then
wshdest.Activate
wshdest.Cells(Lignedest, i).Select
Selection.Interior.ColorIndex = 6
wshdest.Cells(Lignedest, colonneModifs).Select
ActiveCell.FormulaR1C1 = "X"
End If
Next i
Else .....etc...

Le programme bloque à la ligne Lignesource = c.Rows, il me dit
"incompatibilité de type". Peut être s'agit il juste d'un probléme de
syntaxe, en tout cas je bloque!

Merci de m'aider (encore!) si vous pouvez!

Aurélie


Merci bcp pour ta réponse très compléte! Je me met dès maintenant au
travail!


bonjour,

on va supposer que ton fichier source où se trouve les données de base
s'appelle source.xls et la feuille où sont les données s'appelle
sourcesheet.
de la même manière on va supposer que ton fichier destination où tu
mets à
jour les données s'appelle dest.xls et la feuille où sont les données à
rechercher s'appelle destsheet.
on suppose evidemment que les 2 fichies sont ouverts et que la feuille
destsheet n'est pas protégée.

Dim wshsource As Worksheet
Dim wshdest as worksheet
Dim plage as range, plage1 as range, plage2 as range, rngdest as range
Dim rngfind as range

Set wshsource = workbooks("source.xls").Sheets("sourcesheet")
Set wshdest = workbooks("dest.xls").Sheets("destsheet")

Set plage1 = wshsource.Cells.SpecialCells(xlCellTypeConstants)
Set plage2 = wshsource.Cells.SpecialCells(xlCellTypeFormulas)
Set plage = Union(plage1, plage2)

set rngdest= wshdest.cells

For Each c In plage
With rngdest
Set rngfind = .Find(What:= c.value, lookat:=xlwhole)
If Not rngfind Is Nothing Then
firstaddress = rngfind.Address
rngfind.offset(0,1).value="tutu"
Set rngfind= .FindNext(rngfind)
Do While rngfind.Address <> firstaddress And Not rngfind
Is
Nothing
rngfind.offset(0,1).value="tutu"
Set rngfind= .FindNext(rngfind)
Loop
End If
End With
Next

Ce que fait cette proc, c'est qu'elle constitue tout d'abord une plage
des
constantes et des résultats de formules ( c'est le résultat du Union)
dans la
feuille sourcesheet du fichier sourec.xls.
Puis ensuite , à partir des cellules contenues dans le Union, elle
controle
si dans le fichier dest.xls à la feuille destsheet, il existe une ou
des
cellules répondant aux valeurs de plage du Union ( attention, la
recherche
ici s'execute sur la valeur complète , d'où le lookat:=xlwhole ).
Si elle trouve une ou des cellules correspondantes, elle écrit sur la
même
ligne et avec une colonne de décalage vers la droite (
rngfind.offset(0,1).value) une valeur qui est ici "tutu" dans la
feuille
destsheet du fichier dest.xls.

Voilà, tu peux adapter cette proc à ton besoin. Elle fonctionne sans
difficulté aucune sous les conditions préalablement citées.

A+



Bonjour à tous,
Dans une colonne(D) d'un fichier (source),j'ai des nombres (toujours
différents) et des cellules vides.
Je voudrais trouver les cellules non vides, récupérer la valeur et
l'adresse
de la cellule trouvée, puis chercher la valeur trouvée dans un autre
fichier
(destination), ce qui me permettra ensuite de faire une mise à jours
des
cellules voisines.
Puis passer à la cellule non vide suivante dans le fichier source et
ainsi
de suite...

J'aimerai savoir si le critére de sélection de la méthode Find peut
être
"une négation", soit un truc du genre Find(What:=<>"")
Est ce que je peux imbriqué plusieurs boucles Find dans une
procédure? (En
effet, ici je dois trouver les cellules non vides, et ensuite trouver
la
valeur de la cellule correspondante dans le fichier destination)

Merci d'avance pour votre aide et vos conseils,
Cordialement,

Aurélie