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

Traitement sur les cellules contenant la fonction rechercheV et seulement celles la ...

9 réponses
Avatar
SylVBA
Bonjour,

Je viens vers vous pour vous demander un peu d=92aide (je s=E8che !!!)

J=92ai un classeur avec plusieurs feuilles ou on trouve diff=E9rentes
formules dans de nombreuses cellules =85

Je cherche =E0 effectuer un traitement sur chaque feuille et SUR CHAQUE
CELLULE qui contiendrait la fonction RechercheV, et pas sur les autres
formules.

Une fois les cellules qui contiennent cette fonction identifi=E9es,
simplement copier les valeurs actuelles =E0 la place des formules (en
laissant les autres formules continuer =E0 fonctionner normalement)

Comment nos meilleurs contributeurs peuvent t=92ils m=92aider ???

Pour le traitement sur chaque feuille je pense utiliser qq chose comme
cela :

Dim F As Worksheet
For Each F In ActiveWorkbook.Sheets
=91Toto traitement
Next Feuille

Pour copier les valeurs seules je pense utiliser cela (dans le cas ou
on s=E9l=E9ctionne les cellules cibles )

With Selection
Range(.Address) =3D (Range(.Address))
End With

Pour ne le faire que sur les cellules qui contiennent la fonction
rechercheV alors l=E0 je suis toute seule devant mon =E9cran et je d=E9prime=

car j=92ai une bonne dizaine de feuilles et une bonne quarantaine de
cellules par feuille !!!

Je vous remercie par avance de votre bont=E9 !

Je reste connect=E9e pour suivre vos pistes,

Syl VBA

9 réponses

Avatar
JB
Bonjour,


Sub essai()
Dim a()
mot = "=vlookup("
For i = 1 To Sheets.Count
With Sheets(i).Cells
Set c = .Find(mot, LookIn:=xlFormulas, LookAt:=xlPart)
If Not c Is Nothing Then
premier = c.Address
Do
j = j + 1
ReDim Preserve a(1 To j)
a(j) = c.Address
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> premier
End If
End With
For k = 1 To j
Range(a(i)).Value = Range(a(i)).Value
Next k
Next i
End Sub

JB
http://boisgontierjacques.free.fr

On 11 juin, 15:42, SylVBA wrote:
Bonjour,

Je viens vers vous pour vous demander un peu d’aide (je sèche !!!)

J’ai un classeur avec plusieurs feuilles ou on trouve différentes
formules dans de nombreuses cellules …

Je cherche à effectuer un traitement sur chaque feuille et SUR CHAQUE
CELLULE qui contiendrait la fonction RechercheV, et pas sur les autres
formules.

Une fois les cellules qui contiennent cette fonction identifiées,
simplement copier les valeurs actuelles à la place des formules (en
laissant les autres formules continuer à fonctionner normalement)

Comment nos meilleurs contributeurs peuvent t’ils m’aider ???

Pour le traitement sur chaque feuille je pense utiliser qq chose comme
cela :

Dim F As Worksheet
For Each F In ActiveWorkbook.Sheets
‘Toto traitement
Next Feuille

Pour copier les valeurs seules je pense utiliser cela (dans le cas ou
on séléctionne les cellules cibles )

With Selection
Range(.Address) = (Range(.Address))
End With

Pour ne le faire que sur les cellules qui contiennent la fonction
rechercheV alors là je suis toute seule devant mon écran et je dépri me
car j’ai une bonne dizaine de feuilles et une bonne quarantaine de
cellules par feuille !!!

Je vous remercie par avance de votre bonté !

Je reste connectée pour suivre vos pistes,

Syl VBA


Avatar
MichDenis
| a(j) = c.Address

Si la procédure enregistre seulement l'adresse de la cellule, je
me demande comment elle fera pour retrouver cette même
adresse si elle peut appartenir à plusieurs feuilles différentes !

| j = j + 1
| ReDim Preserve a(1 To j)
| a(j) = c.Address


Est-ce qu'il y a une raison pour ne pas modifier la valeur
de la cellule trouvée par :

C.value = C.value

ça éviterais aussi ce bout de code :
| For k = 1 To j
| Range(a(i)).Value = Range(a(i)).Value
| Next k

IL doit y avoir un truc que je n'ai pas saisi ...




"JB" a écrit dans le message de news:

Bonjour,


Sub essai()
Dim a()
mot = "=vlookup("
For i = 1 To Sheets.Count
With Sheets(i).Cells
Set c = .Find(mot, LookIn:=xlFormulas, LookAt:=xlPart)
If Not c Is Nothing Then
premier = c.Address
Do
j = j + 1
ReDim Preserve a(1 To j)
a(j) = c.Address
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> premier
End If
End With
For k = 1 To j
Range(a(i)).Value = Range(a(i)).Value
Next k
Next i
End Sub

JB
http://boisgontierjacques.free.fr

On 11 juin, 15:42, SylVBA wrote:
Bonjour,

Je viens vers vous pour vous demander un peu d’aide (je sèche !!!)

J’ai un classeur avec plusieurs feuilles ou on trouve différentes
formules dans de nombreuses cellules …

Je cherche à effectuer un traitement sur chaque feuille et SUR CHAQUE
CELLULE qui contiendrait la fonction RechercheV, et pas sur les autres
formules.

Une fois les cellules qui contiennent cette fonction identifiées,
simplement copier les valeurs actuelles à la place des formules (en
laissant les autres formules continuer à fonctionner normalement)

Comment nos meilleurs contributeurs peuvent t’ils m’aider ???

Pour le traitement sur chaque feuille je pense utiliser qq chose comme
cela :

Dim F As Worksheet
For Each F In ActiveWorkbook.Sheets
‘Toto traitement
Next Feuille

Pour copier les valeurs seules je pense utiliser cela (dans le cas ou
on séléctionne les cellules cibles )

With Selection
Range(.Address) = (Range(.Address))
End With

Pour ne le faire que sur les cellules qui contiennent la fonction
rechercheV alors là je suis toute seule devant mon écran et je déprime
car j’ai une bonne dizaine de feuilles et une bonne quarantaine de
cellules par feuille !!!

Je vous remercie par avance de votre bonté !

Je reste connectée pour suivre vos pistes,

Syl VBA


Avatar
Youky
Bonjour,
J'envoie aussi la mienne puisque je viens de la faire avec Like
Youky

Sub Macro1()
For k = 1 To Sheets.Count
For Each c In Sheets(k).UsedRange
If c.Formula Like "*VLOOKUP*" Then
c.Value = c.Value
End If
Next
Next
End Sub

"MichDenis" a écrit dans le message de news:

| a(j) = c.Address

Si la procédure enregistre seulement l'adresse de la cellule, je
me demande comment elle fera pour retrouver cette même
adresse si elle peut appartenir à plusieurs feuilles différentes !

| j = j + 1
| ReDim Preserve a(1 To j)
| a(j) = c.Address


Est-ce qu'il y a une raison pour ne pas modifier la valeur
de la cellule trouvée par :

C.value = C.value

ça éviterais aussi ce bout de code :
| For k = 1 To j
| Range(a(i)).Value = Range(a(i)).Value
| Next k

IL doit y avoir un truc que je n'ai pas saisi ...




"JB" a écrit dans le message de news:

Bonjour,


Sub essai()
Dim a()
mot = "=vlookup("
For i = 1 To Sheets.Count
With Sheets(i).Cells
Set c = .Find(mot, LookIn:=xlFormulas, LookAt:=xlPart)
If Not c Is Nothing Then
premier = c.Address
Do
j = j + 1
ReDim Preserve a(1 To j)
a(j) = c.Address
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> premier
End If
End With
For k = 1 To j
Range(a(i)).Value = Range(a(i)).Value
Next k
Next i
End Sub

JB
http://boisgontierjacques.free.fr

On 11 juin, 15:42, SylVBA wrote:
Bonjour,

Je viens vers vous pour vous demander un peu d'aide (je sèche !!!)

J'ai un classeur avec plusieurs feuilles ou on trouve différentes
formules dans de nombreuses cellules .

Je cherche à effectuer un traitement sur chaque feuille et SUR CHAQUE
CELLULE qui contiendrait la fonction RechercheV, et pas sur les autres
formules.

Une fois les cellules qui contiennent cette fonction identifiées,
simplement copier les valeurs actuelles à la place des formules (en
laissant les autres formules continuer à fonctionner normalement)

Comment nos meilleurs contributeurs peuvent t'ils m'aider ???

Pour le traitement sur chaque feuille je pense utiliser qq chose comme
cela :

Dim F As Worksheet
For Each F In ActiveWorkbook.Sheets
'Toto traitement
Next Feuille

Pour copier les valeurs seules je pense utiliser cela (dans le cas ou
on séléctionne les cellules cibles )

With Selection
Range(.Address) = (Range(.Address))
End With

Pour ne le faire que sur les cellules qui contiennent la fonction
rechercheV alors là je suis toute seule devant mon écran et je déprime
car j'ai une bonne dizaine de feuilles et une bonne quarantaine de
cellules par feuille !!!

Je vous remercie par avance de votre bonté !

Je reste connectée pour suivre vos pistes,

Syl VBA






Avatar
MichDenis
Si tu veux vraiment boucler, pourquoi ne pas te limiter
aux cellules de la plage qui contiennent des formules.
Tu peux y arriver en utilisant Specialcells()

For Each c In Sheets(k).UsedRange.Specialcells(...)

Je n'ai pas vraiment "UsedRange"... tu aurais pu ajouter
quelques lignes de code pour trouver la vraie dernière
cellules de la plage...

C'était seulement pour le plaisir ! ;-))


"Youky" a écrit dans le message de news:

Bonjour,
J'envoie aussi la mienne puisque je viens de la faire avec Like
Youky

Sub Macro1()
For k = 1 To Sheets.Count
For Each c In Sheets(k).UsedRange
If c.Formula Like "*VLOOKUP*" Then
c.Value = c.Value
End If
Next
Next
End Sub

"MichDenis" a écrit dans le message de news:

| a(j) = c.Address

Si la procédure enregistre seulement l'adresse de la cellule, je
me demande comment elle fera pour retrouver cette même
adresse si elle peut appartenir à plusieurs feuilles différentes !

| j = j + 1
| ReDim Preserve a(1 To j)
| a(j) = c.Address


Est-ce qu'il y a une raison pour ne pas modifier la valeur
de la cellule trouvée par :

C.value = C.value

ça éviterais aussi ce bout de code :
| For k = 1 To j
| Range(a(i)).Value = Range(a(i)).Value
| Next k

IL doit y avoir un truc que je n'ai pas saisi ...




"JB" a écrit dans le message de news:

Bonjour,


Sub essai()
Dim a()
mot = "=vlookup("
For i = 1 To Sheets.Count
With Sheets(i).Cells
Set c = .Find(mot, LookIn:=xlFormulas, LookAt:=xlPart)
If Not c Is Nothing Then
premier = c.Address
Do
j = j + 1
ReDim Preserve a(1 To j)
a(j) = c.Address
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> premier
End If
End With
For k = 1 To j
Range(a(i)).Value = Range(a(i)).Value
Next k
Next i
End Sub

JB
http://boisgontierjacques.free.fr

On 11 juin, 15:42, SylVBA wrote:
Bonjour,

Je viens vers vous pour vous demander un peu d'aide (je sèche !!!)

J'ai un classeur avec plusieurs feuilles ou on trouve différentes
formules dans de nombreuses cellules .

Je cherche à effectuer un traitement sur chaque feuille et SUR CHAQUE
CELLULE qui contiendrait la fonction RechercheV, et pas sur les autres
formules.

Une fois les cellules qui contiennent cette fonction identifiées,
simplement copier les valeurs actuelles à la place des formules (en
laissant les autres formules continuer à fonctionner normalement)

Comment nos meilleurs contributeurs peuvent t'ils m'aider ???

Pour le traitement sur chaque feuille je pense utiliser qq chose comme
cela :

Dim F As Worksheet
For Each F In ActiveWorkbook.Sheets
'Toto traitement
Next Feuille

Pour copier les valeurs seules je pense utiliser cela (dans le cas ou
on séléctionne les cellules cibles )

With Selection
Range(.Address) = (Range(.Address))
End With

Pour ne le faire que sur les cellules qui contiennent la fonction
rechercheV alors là je suis toute seule devant mon écran et je déprime
car j'ai une bonne dizaine de feuilles et une bonne quarantaine de
cellules par feuille !!!

Je vous remercie par avance de votre bonté !

Je reste connectée pour suivre vos pistes,

Syl VBA






Avatar
SylVBA
re Bonjour,

je suis les différentes solutions depuis, et je suis vraiment perdue..

Sur la proc de JB, les cellules ne sont pas transformer en valeur (il
me semble)
Pour MichDenis, j'ai essayé plusieurs versions de la :
For Each c In Sheets(k).UsedRange.Specialcells(...)

je ne trouve pas la bonne fin

Il semble que celle de Youki marche mais je suis encore en test

PS: Si il y a des cellules protégées, il faut ajouter quoi devant pour
agir en vba dejà ??

Merci si vous pouvez continuer à m'aider a choisir le bon code

A de suite

T'it SylVBA
Avatar
JB
http://cjoint.com/?glst2n77XT

JB


On 11 juin, 17:57, SylVBA wrote:
re Bonjour,

je suis les différentes solutions depuis, et je suis vraiment perdue..

Sur la proc de JB, les cellules ne sont pas transformer en valeur (il
me semble)
Pour MichDenis, j'ai essayé plusieurs versions de la :
For Each c In Sheets(k).UsedRange.Specialcells(...)

je ne trouve pas la bonne fin

Il semble que celle de Youki marche mais je suis encore en test

PS: Si il y a des cellules protégées, il faut ajouter quoi devant pour
agir en vba dejà ??

Merci si vous pouvez continuer à m'aider a choisir le bon code

A de suite

T'it SylVBA


Avatar
Youky
Re
Comme là subgéré MichDenis, voici....
avec protection voir si mot passe et enlever l'apostrophe
Youky

Sub Recherchv()
For k = 1 To Sheets.Count
Sheets(k).Unprotect '("mot passe si besoin")
On Error GoTo fin
For Each c In Sheets(k).UsedRange.SpecialCells(xlFormulas)
If c.Formula Like "*VLOOKUP*" Then
c.Value = c.Value
End If
Next
Sheets(k).Protect
Next
fin:
End Sub

"SylVBA" a écrit dans le message de news:

re Bonjour,

je suis les différentes solutions depuis, et je suis vraiment perdue..

Sur la proc de JB, les cellules ne sont pas transformer en valeur (il
me semble)
Pour MichDenis, j'ai essayé plusieurs versions de la :
For Each c In Sheets(k).UsedRange.Specialcells(...)

je ne trouve pas la bonne fin

Il semble que celle de Youki marche mais je suis encore en test

PS: Si il y a des cellules protégées, il faut ajouter quoi devant pour
agir en vba dejà ??

Merci si vous pouvez continuer à m'aider a choisir le bon code

A de suite

T'it SylVBA
Avatar
MichDenis
Solution que j'avais proposé à Youki :
Elle semble fonctionner très bien !

P.S- Ce n'est jamais une bonne idée de boucler
sur la collection Sheets plutôt que Worksheets car
la première contient en outre les feuilles graphiques
et la macro peut à ce moment là avoir de la difficulté
à touver les cellules.

'--------------------------------------------
Sub Macro1()
Dim F As Worksheet, Rg As Range, C As Range
Dim DerCol As Integer, DerLig As Long

On Error Resume Next
For Each F In ThisWorkbook.Worksheets
With F
'donne la dernière colonne occupée de la feuille
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

'donne la dernière colonne occupée de la feuille
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column

'Détermination de la plage occupée par les formules seulement
Set Rg = .Range("A1", .Cells(DerLig, DerCol)). _
SpecialCells(xlCellTypeFormulas)

'Pour chacune des cellules de la plage de la feuille occupée par une formule
For Each C In Rg
'En VBA, tu dois traduire en anglais le nom de la fonction que tu recherches
'RechercheV -> VLOOKUP
'Peu importe où se trouve la fonction VLOOKUP dans la formule de la
'cellule, c'est ce à quoi sert les * avant et après VLOOKUP
'Voir l'aide Excel-vba pour Like
If C.Formula Like "*VLOOKUP*" Then
C.Value = C.Value
End If
Next
End With
Next
End Sub
'--------------------------------------------


La procédure de JB
'----------------------------------
Sub essai()
Dim C As Range, Mot As String, F As Worksheet
Mot = "=vlookup("
On Error Resume Next
For Each F In ThisWorkbook.Worksheets
With F.Cells
Set C = .Find(Mot, LookIn:=xlFormulas, LookAt:=xlPart)
If Not C Is Nothing Then
premier = C.Address
Do
C.Value = C.Value
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> premier
End If
End With
Next
End Sub
'----------------------------------
Avatar
SylVBA
Bonjour et merci à vous 3

Le fichier de JB, le code de youki, et la longue explication de
MichDenis.

J'ai maintenant une explication complète de ce problème, merci
MichDenis pour le détail de ton dernier post, j'ai déjà changé de
nombreux "For Each F In ActiveWorkbook.Sheets" (en ..Worksheets)

Si cela continue, je viendrai à la prochaine soirée du forum pour vous
dire combien vous comptez pour nous tous ...(nous les nuls !!!)

Bonne fin de journée (et à bientôt car je pense revenir rapidemant !)

Syl VBA