OVH Cloud OVH Cloud

Chercher une cellule dans plusieurs feuilles

8 réponses
Avatar
HD
Bonjour,
J'ai un classeur Excel qui comporte 12 feuilles, une par mois.
Je cherche à réaliser une macro qui me chercherait une cellule contenant la
valeur : NomPersonne
Cette recherche se ferait sur toutes les feuilles.
Comment faire?
J'ai bien lancé la création d'une macro puis ouvert la boite de recherche,
mais cela ne marche pas, cela ne cherche que dans la feuille ouverte.
Par avance merci

Hervé

8 réponses

Avatar
anomymousA
bonjour,

une petite procédure juste pour te montrer une syntaxe qui fonctionne.Dans
le cas ou le programme trouve le nom recherché , la cellule est colorée en
marron.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count

ActiveWorkbook.Worksheets(I).Cells.Find(What:="Nom de Personne",
LookIn:=xlFormulas, LookAt:=xlPart, MatchCase:úlse).Interior.ColorIndex = 18

Next

A+ si tu as besoin


Bonjour,
J'ai un classeur Excel qui comporte 12 feuilles, une par mois.
Je cherche à réaliser une macro qui me chercherait une cellule contenant la
valeur : NomPersonne
Cette recherche se ferait sur toutes les feuilles.
Comment faire?
J'ai bien lancé la création d'une macro puis ouvert la boite de recherche,
mais cela ne marche pas, cela ne cherche que dans la feuille ouverte.
Par avance merci

Hervé





Avatar
HD
Je viens d'essayer ta formule et ça marche.
Par contre c'est juste après la recherche que je suis bloqué maintenant.
Lorsque j'ai trouvé la bonne cellule, il faut se décaller de 3 celules vers
la droite et copier la selection.
Je sais qu'il faut utiliser la commande Offset, mais elle s'applique à la
cellule active. Et Excell prend comme cellule active la cellule qui était
active lors de la dernière sauvegarde. Je n'arrive pas à lui dire que la
cellule active est la cellule qu'il vient de trouver.
Ca parait bête mais j'ai essayé Activate de plein de façon, je n'y arrive
pas.
Ca doit être une histoire de syntaxe?
MErci de ton aide.
Hervé


"anomymousA" a écrit dans le message
de news:
bonjour,

une petite procédure juste pour te montrer une syntaxe qui fonctionne.Dans
le cas ou le programme trouve le nom recherché , la cellule est colorée en
marron.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count

ActiveWorkbook.Worksheets(I).Cells.Find(What:="Nom de Personne",
LookIn:=xlFormulas, LookAt:=xlPart, MatchCase:úlse).Interior.ColorIndex
= 18

Next

A+ si tu as besoin



Avatar
anomymousA
re,

si j'ai bien compris , tu veux copier la cellule contenant Nom de personne 3
cellules plus loin.
Le code suivant te le permet et par ailleurs est une amélioration du
précédent code dans la mesure où il va détecter toutes les cellules de chaque
feuille répondant à la condition valeur=Nom de personne.
Attention, dans la procédure suivante la ligne ou apparait l'offset est
offset(0,3) pour lui permettre de copier 3 colonnes plus loin et la ligne
suivante offset(0,4) pour permettre de continuer la recherche au delà de la
colonne dans laquelle on vient d'inscrire la copie. Si tu ne fais pas 4=3+1,
il y a une boucle jusqu'à la fin des colonnes et ca ne fonctionne pas.
Si tu veux copier sur une colonne décalée de plus de 3 unités (p.e: X), il
te faut écrire le premier offset: offset(0,X) et le 2eme offset:
offset(0,X+1). enfin, il peut y avoir un risque de boucle infinie si X est <
0 mais ça m'étonnerait que ce soit ce que tu souhaites.

Espère avoir répondu exhaustivement à ta question.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count
With Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = c.Value
Set c = .FindNext(c.Offset(0, 4))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

A+


Je viens d'essayer ta formule et ça marche.
Par contre c'est juste après la recherche que je suis bloqué maintenant.
Lorsque j'ai trouvé la bonne cellule, il faut se décaller de 3 celules vers
la droite et copier la selection.
Je sais qu'il faut utiliser la commande Offset, mais elle s'applique à la
cellule active. Et Excell prend comme cellule active la cellule qui était
active lors de la dernière sauvegarde. Je n'arrive pas à lui dire que la
cellule active est la cellule qu'il vient de trouver.
Ca parait bête mais j'ai essayé Activate de plein de façon, je n'y arrive
pas.
Ca doit être une histoire de syntaxe?
MErci de ton aide.
Hervé


"anomymousA" a écrit dans le message
de news:
bonjour,

une petite procédure juste pour te montrer une syntaxe qui fonctionne.Dans
le cas ou le programme trouve le nom recherché , la cellule est colorée en
marron.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count

ActiveWorkbook.Worksheets(I).Cells.Find(What:="Nom de Personne",
LookIn:=xlFormulas, LookAt:=xlPart, MatchCase:úlse).Interior.ColorIndex
= 18

Next

A+ si tu as besoin








Avatar
HD
Non je me suis mal exprimé.
Il y a dans la macro, avant de lancer la recherche, une selection de 3
cellules, avec la commande Copy.
Puis je lance la recherche. Quand j'ai trouvé le nom, je souhaite que les 3
cellules précédentes se collent 3 cellules plus loin que le nom que je viens
de trouver.
Or ces 3 cellules se collent, mais dans une autre cellule du classeur. (qui
correspond en fait à la cellule qui était sélectionnée lors de la dernière
sauvegarde du classeur), d'ou le bug.
C'est juste une histoire de pouvoir sélectionner la cellule trouvée, de
décaller de 3, et de copier mes 3 cellules précédentes avec la fontion :
coller.

Hervé


"anomymousA" a écrit dans le message
de news:
re,

si j'ai bien compris , tu veux copier la cellule contenant Nom de personne
3
cellules plus loin.
Le code suivant te le permet et par ailleurs est une amélioration du
précédent code dans la mesure où il va détecter toutes les cellules de
chaque
feuille répondant à la condition valeur=Nom de personne.
Attention, dans la procédure suivante la ligne ou apparait l'offset est
offset(0,3) pour lui permettre de copier 3 colonnes plus loin et la ligne
suivante offset(0,4) pour permettre de continuer la recherche au delà de
la
colonne dans laquelle on vient d'inscrire la copie. Si tu ne fais pas
4=3+1,
il y a une boucle jusqu'à la fin des colonnes et ca ne fonctionne pas.
Si tu veux copier sur une colonne décalée de plus de 3 unités (p.e: X), il
te faut écrire le premier offset: offset(0,X) et le 2eme offset:
offset(0,X+1). enfin, il peut y avoir un risque de boucle infinie si X est
<
0 mais ça m'étonnerait que ce soit ce que tu souhaites.

Espère avoir répondu exhaustivement à ta question.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count
With Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = c.Value
Set c = .FindNext(c.Offset(0, 4))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

A+


Je viens d'essayer ta formule et ça marche.
Par contre c'est juste après la recherche que je suis bloqué maintenant.
Lorsque j'ai trouvé la bonne cellule, il faut se décaller de 3 celules
vers
la droite et copier la selection.
Je sais qu'il faut utiliser la commande Offset, mais elle s'applique à la
cellule active. Et Excell prend comme cellule active la cellule qui était
active lors de la dernière sauvegarde. Je n'arrive pas à lui dire que la
cellule active est la cellule qu'il vient de trouver.
Ca parait bête mais j'ai essayé Activate de plein de façon, je n'y arrive
pas.
Ca doit être une histoire de syntaxe?
MErci de ton aide.
Hervé


"anomymousA" a écrit dans le
message
de news:
bonjour,

une petite procédure juste pour te montrer une syntaxe qui
fonctionne.Dans
le cas ou le programme trouve le nom recherché , la cellule est colorée
en
marron.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count

ActiveWorkbook.Worksheets(I).Cells.Find(What:="Nom de Personne",
LookIn:=xlFormulas, LookAt:=xlPart,
MatchCase:úlse).Interior.ColorIndex
= 18

Next

A+ si tu as besoin










Avatar
anomymousA
bonjour, HD

je reprends le fil

pour répondre à ta question: plutot que te faire selection.copy, je te
propose juste de selectionner tes 3 cellules et de faire ensuite tourner le
programme suivant qui est une modulation de celui que je t'ai fait parvenir
hier

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count
With Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = Range(Selection.Address).Value
c.Offset(0, 4).Value = Range(Selection.Offset(0, 1).Address).Value
c.Offset(0, 5).Value = Range(Selection.Offset(0, 2).Address).Value
Set c = .FindNext(c.Offset(0, 6))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

J'espère que cette fois-ci j'ai bien répondu à ta demande.

A+


Non je me suis mal exprimé.
Il y a dans la macro, avant de lancer la recherche, une selection de 3
cellules, avec la commande Copy.
Puis je lance la recherche. Quand j'ai trouvé le nom, je souhaite que les 3
cellules précédentes se collent 3 cellules plus loin que le nom que je viens
de trouver.
Or ces 3 cellules se collent, mais dans une autre cellule du classeur. (qui
correspond en fait à la cellule qui était sélectionnée lors de la dernière
sauvegarde du classeur), d'ou le bug.
C'est juste une histoire de pouvoir sélectionner la cellule trouvée, de
décaller de 3, et de copier mes 3 cellules précédentes avec la fontion :
coller.

Hervé


"anomymousA" a écrit dans le message
de news:
re,

si j'ai bien compris , tu veux copier la cellule contenant Nom de personne
3
cellules plus loin.
Le code suivant te le permet et par ailleurs est une amélioration du
précédent code dans la mesure où il va détecter toutes les cellules de
chaque
feuille répondant à la condition valeur=Nom de personne.
Attention, dans la procédure suivante la ligne ou apparait l'offset est
offset(0,3) pour lui permettre de copier 3 colonnes plus loin et la ligne
suivante offset(0,4) pour permettre de continuer la recherche au delà de
la
colonne dans laquelle on vient d'inscrire la copie. Si tu ne fais pas
4=3+1,
il y a une boucle jusqu'à la fin des colonnes et ca ne fonctionne pas.
Si tu veux copier sur une colonne décalée de plus de 3 unités (p.e: X), il
te faut écrire le premier offset: offset(0,X) et le 2eme offset:
offset(0,X+1). enfin, il peut y avoir un risque de boucle infinie si X est
<
0 mais ça m'étonnerait que ce soit ce que tu souhaites.

Espère avoir répondu exhaustivement à ta question.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count
With Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = c.Value
Set c = .FindNext(c.Offset(0, 4))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

A+


Je viens d'essayer ta formule et ça marche.
Par contre c'est juste après la recherche que je suis bloqué maintenant.
Lorsque j'ai trouvé la bonne cellule, il faut se décaller de 3 celules
vers
la droite et copier la selection.
Je sais qu'il faut utiliser la commande Offset, mais elle s'applique à la
cellule active. Et Excell prend comme cellule active la cellule qui était
active lors de la dernière sauvegarde. Je n'arrive pas à lui dire que la
cellule active est la cellule qu'il vient de trouver.
Ca parait bête mais j'ai essayé Activate de plein de façon, je n'y arrive
pas.
Ca doit être une histoire de syntaxe?
MErci de ton aide.
Hervé


"anomymousA" a écrit dans le
message
de news:
bonjour,

une petite procédure juste pour te montrer une syntaxe qui
fonctionne.Dans
le cas ou le programme trouve le nom recherché , la cellule est colorée
en
marron.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count

ActiveWorkbook.Worksheets(I).Cells.Find(What:="Nom de Personne",
LookIn:=xlFormulas, LookAt:=xlPart,
MatchCase:úlse).Interior.ColorIndex
= 18

Next

A+ si tu as besoin















Avatar
HD
Bon le problème, c'est que je prends mes 3 cellules dans un autre classeur.
En fait au départ j'ai un classeur avec NomPersonne ainsi que 2 autre
cellule (C1, C2), une avec la date, une avec un montant.
Ensuite j'ouvre mon nouveau classeur avec mes 12 feuilles et je cherche
NomPersonne dans une des 12 feuilles.
Une fois la bonne cellule trouvée, je veux copier C1 et C2 3 cellules plus
loin que la cellules contenant NomPersonne trouvée.
Voilà.
Je ne suis pas certain que ta macro tourne avec des classeurs différents.
Qu'en penses-tu?
Merci
Hervé

"anomymousA" a écrit dans le message
de news:
bonjour, HD

je reprends le fil

pour répondre à ta question: plutot que te faire selection.copy, je te
propose juste de selectionner tes 3 cellules et de faire ensuite tourner
le
programme suivant qui est une modulation de celui que je t'ai fait
parvenir
hier

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count
With Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = Range(Selection.Address).Value
c.Offset(0, 4).Value = Range(Selection.Offset(0,
1).Address).Value
c.Offset(0, 5).Value = Range(Selection.Offset(0,
2).Address).Value
Set c = .FindNext(c.Offset(0, 6))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

J'espère que cette fois-ci j'ai bien répondu à ta demande.

A+


Non je me suis mal exprimé.
Il y a dans la macro, avant de lancer la recherche, une selection de 3
cellules, avec la commande Copy.
Puis je lance la recherche. Quand j'ai trouvé le nom, je souhaite que les
3
cellules précédentes se collent 3 cellules plus loin que le nom que je
viens
de trouver.
Or ces 3 cellules se collent, mais dans une autre cellule du classeur.
(qui
correspond en fait à la cellule qui était sélectionnée lors de la
dernière
sauvegarde du classeur), d'ou le bug.
C'est juste une histoire de pouvoir sélectionner la cellule trouvée, de
décaller de 3, et de copier mes 3 cellules précédentes avec la fontion :
coller.

Hervé


"anomymousA" a écrit dans le
message
de news:
re,

si j'ai bien compris , tu veux copier la cellule contenant Nom de
personne
3
cellules plus loin.
Le code suivant te le permet et par ailleurs est une amélioration du
précédent code dans la mesure où il va détecter toutes les cellules de
chaque
feuille répondant à la condition valeur=Nom de personne.
Attention, dans la procédure suivante la ligne ou apparait l'offset est
offset(0,3) pour lui permettre de copier 3 colonnes plus loin et la
ligne
suivante offset(0,4) pour permettre de continuer la recherche au delà
de
la
colonne dans laquelle on vient d'inscrire la copie. Si tu ne fais pas
4=3+1,
il y a une boucle jusqu'à la fin des colonnes et ca ne fonctionne pas.
Si tu veux copier sur une colonne décalée de plus de 3 unités (p.e: X),
il
te faut écrire le premier offset: offset(0,X) et le 2eme offset:
offset(0,X+1). enfin, il peut y avoir un risque de boucle infinie si X
est
<
0 mais ça m'étonnerait que ce soit ce que tu souhaites.

Espère avoir répondu exhaustivement à ta question.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count
With Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = c.Value
Set c = .FindNext(c.Offset(0, 4))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

A+


Je viens d'essayer ta formule et ça marche.
Par contre c'est juste après la recherche que je suis bloqué
maintenant.
Lorsque j'ai trouvé la bonne cellule, il faut se décaller de 3 celules
vers
la droite et copier la selection.
Je sais qu'il faut utiliser la commande Offset, mais elle s'applique à
la
cellule active. Et Excell prend comme cellule active la cellule qui
était
active lors de la dernière sauvegarde. Je n'arrive pas à lui dire que
la
cellule active est la cellule qu'il vient de trouver.
Ca parait bête mais j'ai essayé Activate de plein de façon, je n'y
arrive
pas.
Ca doit être une histoire de syntaxe?
MErci de ton aide.
Hervé


"anomymousA" a écrit dans le
message
de news:
bonjour,

une petite procédure juste pour te montrer une syntaxe qui
fonctionne.Dans
le cas ou le programme trouve le nom recherché , la cellule est
colorée
en
marron.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count

ActiveWorkbook.Worksheets(I).Cells.Find(What:="Nom de Personne",
LookIn:=xlFormulas, LookAt:=xlPart,
MatchCase:úlse).Interior.ColorIndex
= 18

Next

A+ si tu as besoin

















Avatar
anomymousA
re,

c'est un vrai jeu de piste notre fil.
Aucun problème pour ta question. Dans la procédure syuivante, tu remarqueras
que j'ai remplacé Activeworkbook par Thisworkbook et que j'ai rajouté
Thisworkbook avant Worksheets(I).cells. Ceci pour te montrer que si tu mets
cette procédure dasn un fichier et que tu sélectionnes ta plage à copier sur
un autre, il te copiera dans le fichier qui contient la procédure les 3
cellules après avoir trouvé dans le ficheir qui contient la procédure sur
toutes les feuilles toutes les cellules répondant à Nom de Personne.

For I = 1 To ThisWorkbook.Worksheets.Count
With ThisWorkbook.Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = Range(Selection.Address).Value
c.Offset(0, 4).Value = Range(Selection.Offset(0, 1).Address).Value
c.Offset(0, 5).Value = Range(Selection.Offset(0, 2).Address).Value
Set c = .FindNext(c.Offset(0, 6))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Next

Bon courage ou amusement, c'est selon !


Bon le problème, c'est que je prends mes 3 cellules dans un autre classeur.
En fait au départ j'ai un classeur avec NomPersonne ainsi que 2 autre
cellule (C1, C2), une avec la date, une avec un montant.
Ensuite j'ouvre mon nouveau classeur avec mes 12 feuilles et je cherche
NomPersonne dans une des 12 feuilles.
Une fois la bonne cellule trouvée, je veux copier C1 et C2 3 cellules plus
loin que la cellules contenant NomPersonne trouvée.
Voilà.
Je ne suis pas certain que ta macro tourne avec des classeurs différents.
Qu'en penses-tu?
Merci
Hervé

"anomymousA" a écrit dans le message
de news:
bonjour, HD

je reprends le fil

pour répondre à ta question: plutot que te faire selection.copy, je te
propose juste de selectionner tes 3 cellules et de faire ensuite tourner
le
programme suivant qui est une modulation de celui que je t'ai fait
parvenir
hier

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count
With Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = Range(Selection.Address).Value
c.Offset(0, 4).Value = Range(Selection.Offset(0,
1).Address).Value
c.Offset(0, 5).Value = Range(Selection.Offset(0,
2).Address).Value
Set c = .FindNext(c.Offset(0, 6))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

J'espère que cette fois-ci j'ai bien répondu à ta demande.

A+


Non je me suis mal exprimé.
Il y a dans la macro, avant de lancer la recherche, une selection de 3
cellules, avec la commande Copy.
Puis je lance la recherche. Quand j'ai trouvé le nom, je souhaite que les
3
cellules précédentes se collent 3 cellules plus loin que le nom que je
viens
de trouver.
Or ces 3 cellules se collent, mais dans une autre cellule du classeur.
(qui
correspond en fait à la cellule qui était sélectionnée lors de la
dernière
sauvegarde du classeur), d'ou le bug.
C'est juste une histoire de pouvoir sélectionner la cellule trouvée, de
décaller de 3, et de copier mes 3 cellules précédentes avec la fontion :
coller.

Hervé


"anomymousA" a écrit dans le
message
de news:
re,

si j'ai bien compris , tu veux copier la cellule contenant Nom de
personne
3
cellules plus loin.
Le code suivant te le permet et par ailleurs est une amélioration du
précédent code dans la mesure où il va détecter toutes les cellules de
chaque
feuille répondant à la condition valeur=Nom de personne.
Attention, dans la procédure suivante la ligne ou apparait l'offset est
offset(0,3) pour lui permettre de copier 3 colonnes plus loin et la
ligne
suivante offset(0,4) pour permettre de continuer la recherche au delà
de
la
colonne dans laquelle on vient d'inscrire la copie. Si tu ne fais pas
4=3+1,
il y a une boucle jusqu'à la fin des colonnes et ca ne fonctionne pas.
Si tu veux copier sur une colonne décalée de plus de 3 unités (p.e: X),
il
te faut écrire le premier offset: offset(0,X) et le 2eme offset:
offset(0,X+1). enfin, il peut y avoir un risque de boucle infinie si X
est
<
0 mais ça m'étonnerait que ce soit ce que tu souhaites.

Espère avoir répondu exhaustivement à ta question.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count
With Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = c.Value
Set c = .FindNext(c.Offset(0, 4))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

A+


Je viens d'essayer ta formule et ça marche.
Par contre c'est juste après la recherche que je suis bloqué
maintenant.
Lorsque j'ai trouvé la bonne cellule, il faut se décaller de 3 celules
vers
la droite et copier la selection.
Je sais qu'il faut utiliser la commande Offset, mais elle s'applique à
la
cellule active. Et Excell prend comme cellule active la cellule qui
était
active lors de la dernière sauvegarde. Je n'arrive pas à lui dire que
la
cellule active est la cellule qu'il vient de trouver.
Ca parait bête mais j'ai essayé Activate de plein de façon, je n'y
arrive
pas.
Ca doit être une histoire de syntaxe?
MErci de ton aide.
Hervé


"anomymousA" a écrit dans le
message
de news:
bonjour,

une petite procédure juste pour te montrer une syntaxe qui
fonctionne.Dans
le cas ou le programme trouve le nom recherché , la cellule est
colorée
en
marron.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count

ActiveWorkbook.Worksheets(I).Cells.Find(What:="Nom de Personne",
LookIn:=xlFormulas, LookAt:=xlPart,
MatchCase:úlse).Interior.ColorIndex
= 18

Next

A+ si tu as besoin






















Avatar
HD
J'ai un peu bidouillé ton code, et mirâââââcle, ça a marché.
Merci beaucoup, c'était un peu compliqué pour moi au départ, mais en
relisant très len-t-e-ment tes posts, j'ai compris plein de trucs.
Chapeau

Hervé

"anomymousA" a écrit dans le message
de news:
re,

c'est un vrai jeu de piste notre fil.
Aucun problème pour ta question. Dans la procédure syuivante, tu
remarqueras
que j'ai remplacé Activeworkbook par Thisworkbook et que j'ai rajouté
Thisworkbook avant Worksheets(I).cells. Ceci pour te montrer que si tu
mets
cette procédure dasn un fichier et que tu sélectionnes ta plage à copier
sur
un autre, il te copiera dans le fichier qui contient la procédure les 3
cellules après avoir trouvé dans le ficheir qui contient la procédure sur
toutes les feuilles toutes les cellules répondant à Nom de Personne.

For I = 1 To ThisWorkbook.Worksheets.Count
With ThisWorkbook.Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = Range(Selection.Address).Value
c.Offset(0, 4).Value = Range(Selection.Offset(0,
1).Address).Value
c.Offset(0, 5).Value = Range(Selection.Offset(0,
2).Address).Value
Set c = .FindNext(c.Offset(0, 6))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Next

Bon courage ou amusement, c'est selon !


Bon le problème, c'est que je prends mes 3 cellules dans un autre
classeur.
En fait au départ j'ai un classeur avec NomPersonne ainsi que 2 autre
cellule (C1, C2), une avec la date, une avec un montant.
Ensuite j'ouvre mon nouveau classeur avec mes 12 feuilles et je cherche
NomPersonne dans une des 12 feuilles.
Une fois la bonne cellule trouvée, je veux copier C1 et C2 3 cellules
plus
loin que la cellules contenant NomPersonne trouvée.
Voilà.
Je ne suis pas certain que ta macro tourne avec des classeurs différents.
Qu'en penses-tu?
Merci
Hervé

"anomymousA" a écrit dans le
message
de news:
bonjour, HD

je reprends le fil

pour répondre à ta question: plutot que te faire selection.copy, je te
propose juste de selectionner tes 3 cellules et de faire ensuite
tourner
le
programme suivant qui est une modulation de celui que je t'ai fait
parvenir
hier

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count
With Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = Range(Selection.Address).Value
c.Offset(0, 4).Value = Range(Selection.Offset(0,
1).Address).Value
c.Offset(0, 5).Value = Range(Selection.Offset(0,
2).Address).Value
Set c = .FindNext(c.Offset(0, 6))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

J'espère que cette fois-ci j'ai bien répondu à ta demande.

A+


Non je me suis mal exprimé.
Il y a dans la macro, avant de lancer la recherche, une selection de 3
cellules, avec la commande Copy.
Puis je lance la recherche. Quand j'ai trouvé le nom, je souhaite que
les
3
cellules précédentes se collent 3 cellules plus loin que le nom que je
viens
de trouver.
Or ces 3 cellules se collent, mais dans une autre cellule du classeur.
(qui
correspond en fait à la cellule qui était sélectionnée lors de la
dernière
sauvegarde du classeur), d'ou le bug.
C'est juste une histoire de pouvoir sélectionner la cellule trouvée,
de
décaller de 3, et de copier mes 3 cellules précédentes avec la fontion
:
coller.

Hervé


"anomymousA" a écrit dans le
message
de news:
re,

si j'ai bien compris , tu veux copier la cellule contenant Nom de
personne
3
cellules plus loin.
Le code suivant te le permet et par ailleurs est une amélioration du
précédent code dans la mesure où il va détecter toutes les cellules
de
chaque
feuille répondant à la condition valeur=Nom de personne.
Attention, dans la procédure suivante la ligne ou apparait l'offset
est
offset(0,3) pour lui permettre de copier 3 colonnes plus loin et la
ligne
suivante offset(0,4) pour permettre de continuer la recherche au
delà
de
la
colonne dans laquelle on vient d'inscrire la copie. Si tu ne fais
pas
4=3+1,
il y a une boucle jusqu'à la fin des colonnes et ca ne fonctionne
pas.
Si tu veux copier sur une colonne décalée de plus de 3 unités (p.e:
X),
il
te faut écrire le premier offset: offset(0,X) et le 2eme offset:
offset(0,X+1). enfin, il peut y avoir un risque de boucle infinie si
X
est
<
0 mais ça m'étonnerait que ce soit ce que tu souhaites.

Espère avoir répondu exhaustivement à ta question.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count
With Worksheets(I).Cells
Set c = .Find(What:="Nom de Personne", LookIn:=xlFormulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 3).Value = c.Value
Set c = .FindNext(c.Offset(0, 4))
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

A+


Je viens d'essayer ta formule et ça marche.
Par contre c'est juste après la recherche que je suis bloqué
maintenant.
Lorsque j'ai trouvé la bonne cellule, il faut se décaller de 3
celules
vers
la droite et copier la selection.
Je sais qu'il faut utiliser la commande Offset, mais elle
s'applique à
la
cellule active. Et Excell prend comme cellule active la cellule qui
était
active lors de la dernière sauvegarde. Je n'arrive pas à lui dire
que
la
cellule active est la cellule qu'il vient de trouver.
Ca parait bête mais j'ai essayé Activate de plein de façon, je n'y
arrive
pas.
Ca doit être une histoire de syntaxe?
MErci de ton aide.
Hervé


"anomymousA" a écrit dans le
message
de news:
bonjour,

une petite procédure juste pour te montrer une syntaxe qui
fonctionne.Dans
le cas ou le programme trouve le nom recherché , la cellule est
colorée
en
marron.

On Error Resume Next
For I = 1 To ActiveWorkbook.Worksheets.Count

ActiveWorkbook.Worksheets(I).Cells.Find(What:="Nom de Personne",
LookIn:=xlFormulas, LookAt:=xlPart,
MatchCase:úlse).Interior.ColorIndex
= 18

Next

A+ si tu as besoin