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 -
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 :
En E1 :
En G1 :
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 :
Je pensais que dans mon code il suffirait de remplacer :
par
et
par
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
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
-
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
-
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à ? -
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
-
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 SubApplication.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