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

Le
SylVBA
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JB
Le #6924391
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
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


MichDenis
Le #6924371
| 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"
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
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


Youky
Le #6924361
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(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"
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
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






MichDenis
Le #6924351
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"
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(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"
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
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






SylVBA
Le #6937421
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
JB
Le #6937401
http://cjoint.com/?glst2n77XT

JB


On 11 juin, 17:57, 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


Youky
Le #6937361
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"
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
MichDenis
Le #6936351
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
'----------------------------------
SylVBA
Le #6986801
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
Publicité
Poster une réponse
Anonyme