Rech resultat Cell et remplacer par resultat autre cell

Résolu
Keusti_001 Messages postés 31 Statut Membre -  
Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   -
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

4 réponses

  1. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
  2. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
    1. Keusti
       
      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
  3. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
  4. Keusti_001 Messages postés 31 Statut Membre
     
    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