Rech resultat Cell et remplacer par resultat autre cell

Résolu/Fermé
Keusti_001 Messages postés 29 Date d'inscription mercredi 15 mai 2019 Statut Membre Dernière intervention 7 février 2023 - 31 mars 2022 à 14:36
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 - 5 avril 2022 à 12:01
Bonjour à tous,

Vrai novice en macro, je cale sur un élément qui me parait tout bête.


En case R3, j'ai la RECHV ci-dessous :
=RECHERCHEV(H7;'[2022-03-29 état stock appro.xlsx]PDLTAPP'!$H:$R;11;FAUX)


En E1 :
=SERIE.JOUR.OUVRE(C1;-1)
==> 2022-03-29
En G1 :
=SERIE.JOUR.OUVRE(E1;-1)
==> 2022-03-28

E1 et G1 sont au format date "aaaa-mm-jj"

Via macro, j'aimerais pouvoir rechercher la date dans la RECHV de R3 (égale à E1) et la remplacer par le résultat obtenu en G1.


J'ai tenté de faire la macro via la fonction "Enregistrer macro" et d'utiliser la fonction "Recherche et Remplacer".
J'obtiens le code ci-dessous :

Sub Macro4()
' Macro4 Macro
Range("R7").Select
ActiveCell.Replace What:="2022-03-29", Replacement:="2022-03-28", LookAt _
:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Cells.Find(What:="2022-03-29", After:=ActiveCell, LookIn:=xlFormulas2, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
End Sub


Je pensais que dans mon code il suffirait de remplacer :
ActiveCell.Replace What:="2022-03-29"

par
ActiveCell.Replace What:=E1


et

Replacement:="2022-03-28"

par
Replacement:=G1


Mais visiblement, c'est pas aussi simple. Probablement qu'au lieu d'aller chercher E1 et G1, je dois aller chercher les résultats convertis en texte ?

Une bonne âme pour adapter mon code et m'expliquer le fonctionnement?

Un grand merci pour votre aide les amis !

Bàv,

Keusti


Configuration: Windows / Chrome 99.0.4844.82
A voir également:

4 réponses

Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
5 avril 2022 à 12:01
Bonjour,
Petite oubli de ma part, remplacer:
Next
Application.ScreenUpdating = False
'Bloque l'actualisation de l'onglet


Par ceci :
>Next
Application.ScreenUpdating = True
'Active l'actualisation de la feuille


Note, l'onglet et le petit appendice qui permet de sélectionner la feuille



1
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
1 avril 2022 à 09:58
Bonjour,
Ce n'est pas clair du tout.
Je comprend que vous voulez modifier la date dans votre formule de recherche
=RECHERCHEV(H7;'[2022-03-29 état stock appro.xlsx]PDLTAPP'!$H:$R;11;FAUX)

devient:
=RECHERCHEV(H7;'[2022-03-28 état stock appro.xlsx]PDLTAPP'!$H:$R;11;FAUX)

Est-ce bien celà ?
0
Bonjour Pingou !

Oui, c'est tout à fait ça, mais en allant chercher les dates dans des cellules dont c'est le résultats.

En gros, dans la recherche V, chercher le résultats de E1 pour le remplacer par le résultat de G1.

Bàt,
Keusti
0
Le Pingou Messages postés 12187 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 14 novembre 2024 1 449
4 avril 2022 à 23:01
Bonjour,
Vous pouvez essayer ce code:
Sub Modifier_Formules_RECHV()
Dim c As Range, form As Variant
Dim Cell_E1 As Variant, Cell_G1 As Variant
Cell_E1 = Format(Range("E1"), "yyyy-mm-dd"): Cell_G1 = Format(Range("G1"), "yyyy-mm-dd")
Application.ScreenUpdating = False
For Each c In ActiveSheet.Range("R3")
    If InStr(c.FormulaLocal, Cell_E1) <> 0 Then
        form = Replace(c.FormulaLocal, Cell_E1, Cell_G1)
        c.FormulaLocal = form
    End If
Next
Application.ScreenUpdating = False
End Sub

0
Keusti_001 Messages postés 29 Date d'inscription mercredi 15 mai 2019 Statut Membre Dernière intervention 7 février 2023
5 avril 2022 à 10:56
Hello Pingou,

C'est exactement ça, merci beaucoup ! :)

Histoire de comprendre ce que dit la macro et gagner un peu en autonomie, pourrais-tu me confirmer/corriger mon interprétation de ton code?



Sub Modifier_Formules_RECHV()
'Défini c comme cellule cible ou appliquer la macro, et la formule de celle-ci comme variable.
Dim c As Range, form As Variant
'Défini les variables "Cell_G1" et "Cell_C1"
Dim Cell_G1 As Variant, Cell_C1 As Variant
'Défini le format de "Cell_G1" comme "yyyy-mm-dd". Idem pour "Cell_C1"
Cell_G1 = Format(Range("G1"), "yyyy-mm-dd"): Cell_C1 = Format(Range("C1"), "yyyy-mm-dd")
'Bloque l'actualisation de l'onglet
Application.ScreenUpdating = False
For Each c In ActiveSheet.Range("R3")
'Défini c, qui est la cellule ou appliquer la macro
If InStr(c.FormulaLocal, Cell_G1) <> 0 Then
'Si le résultat de "Cell_G1" est différent de 0, alors
form = Replace(c.FormulaLocal, Cell_G1, Cell_C1)
'Remplace, dans la formule de c, Cell_G1 par Cell_C1
c.FormulaLocal = form
'??
End If
Next
Application.ScreenUpdating = False
'Bloque l'actualisation de l'onglet
End Sub



Application.ScreenUpdating = False
==> Je comprends l'intérêt de bloquer l'actualisation du fichier, mais ne faut-il pas le ré-activer en fin de macro?

Bonne journée,

Keusti
0