code VBA pour transformer formule en valeur

hypo78

XLDnaute Impliqué
Bonjour à tous,

est-il possible via un code VBA de transformer le résultat d'une formule en valeur.
Le but de cette "manip" étant de réduire le temps à l'ouverture du fichier.

L'idée : si la date en colonne A est antérieure à aujourd'hui, la formule de la cellule en colonne B est remplacée par la valeur qu'elle a trouvé.

Cordialement.
 

Pièces jointes

  • ex_ED.xls
    17 KB · Affichages: 169
  • ex_ED.xls
    17 KB · Affichages: 180
  • ex_ED.xls
    17 KB · Affichages: 176

david84

XLDnaute Barbatruc
Re : code VBA pour transformer formule en valeur

Bonjour, Efgé:),
sous réserve d'avoir compris, à tester :
Code:
Sub test()
Dim DerLig&, i&
DerLig = Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To DerLig
    If Cells(i, 1) < Date Then
        Cells(i, 3) = Cells(i, 2)
    Else
        Cells(i, 3) = "=Feuil2!RC[-2]"
    End If
Next i
End Sub
A+
 

hypo78

XLDnaute Impliqué
Re : code VBA pour transformer formule en valeur

Re,
Je n'ai pas été assez clair.
Je souhaiterai que cette modif se fasse directement en colonne 2. La colonne 3 n'était qu'un exemple du résultat souhaité.
Cordialement

Efge : pas compris ton message
 

Efgé

XLDnaute Barbatruc
Re : code VBA pour transformer formule en valeur

Re hypo78, Bonjour david84 :),
J'avais eu un peu la même idée que david84, mais j'ai eu peur que cela ralentisse l'ouverture du classeur.
Donc une autre proposition, si, et seulement si, les dates sont classées comme dans l'exemple.
On peux écraser toutes les formules à l'enregistrement du classeur:
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim F As Range
With Sheets("Feuil1")
    Set F = .Columns("A:A").Find(Date, LookIn:=xlValues)
    With .Range(.Cells(1, 2), .Cells(F.Row - 1, 2))
        .Value = .Value
    End With
End With
End Sub
A mettre dans le ThisWokbook
Cordialement
 

DoubleZero

XLDnaute Barbatruc
Re : code VBA pour transformer formule en valeur

Bonjour, le Fil :), le Forum,

Peut-être, également, comme ceci :

Code:
Sub Formules_supprimer_si()
Dim c As Range
For Each c In Range("A1", [A65000].End(xlUp))
If Now > c Then c.Offset(0, 1).Value = c.Offset(0, 1).Value
Next c
End Sub
A bientôt :):)
 

hypo78

XLDnaute Impliqué
Re : code VBA pour transformer formule en valeur

Re,
Efge : petit problème avec ton code.
Double Zéro : ça fonctionne, dernière sollicitation, dans mon fichier j'ai des formules sur les colonnes suivantes, comment adapter le code pour qu'Il fonctionne sur plusieurs colonnes ou sur la ligne entière si c'est plus simple.
Cordialement.
 

Staple1600

XLDnaute Barbatruc
Re : code VBA pour transformer formule en valeur

Bonjour à tous


Une autre voie (parce je n'aime pas boucler ;) )
Code:
Sub Macro1()
Dim crit As Long
crit = CLng(Date)
With ActiveSheet
    .[A1].AutoFilter 1, "<" & crit, xlAnd
    With .[_FilterDataBase].SpecialCells(xlCellTypeVisible)
        .Value = .Value
    End With
    .AutoFilterMode = False
End With
End Sub
 
Dernière édition:

hypo78

XLDnaute Impliqué
Re : code VBA pour transformer formule en valeur

Merci Staple1600 de te pencher sur mon pb, mais ton code pour un débutant comme moi en VBA n'est pas très facile à comprendre donc à adapter.

Je le garde sous le coude sachant que celui de double zéro fonctionne faut juste l'adapter à plusieurs colonnes ou la ligne entière.

Cordialement.
 

Staple1600

XLDnaute Barbatruc
Re : code VBA pour transformer formule en valeur

Bonsoir le fil, Bonsoir 00

Merci Staple1600 de te pencher sur mon pb, mais ton code pour un débutant comme moi en VBA n'est pas très facile à comprendre donc à adapter.

Quand on me pose des questions , je réponds avec plaisir, sinon je suppose que le demandeur a compris ce que je propose ;)

Donc voici la même macro avec commentaires inside.
VB:
Sub Macro1()
Dim crit As Long ' déclaration d'un variable nommée crit en Long
'J'ai choisi crit pour crière
crit = CLng(Date) ' * Ici je converti la date du jour en Long, obtenu avec Date
'ce qui correspond dans Excel à : =AUJOURDHUI()
With ActiveSheet 'ici je spécifie quelle feuille est visée
'On voit que c'est la feuille active comme son nom l'indique
    .[A1].AutoFilter 1, "<" & crit, xlAnd 'on applique un filtre automatique
'avec comme critère personnalisé: < à aujourdhui
    With .[_FilterDataBase].SpecialCells(xlCellTypeVisible)
        .Value = .Value 'ici conversion en valeurs seules des cellules visibles renvoyées par le filtre
    End With
    .AutoFilterMode = False 'on désactive le filtre
End With
End Sub

As-tu besoin d'autres précisions ?
(car théoriquement le * plus haut devrait te poser question ;) )

PS: Merci à toi hypo78, d'avoir demandé des éclaircissements, c'est rare (donc apprécié).
D'habitude, un grand nombre de nouveaux membres (quoi que tu n'es déjà plus un tit nouveau ;)) consomment les réponses sans chercher à comprendre comment elles fonctionnent.
 
Dernière édition:

hypo78

XLDnaute Impliqué
Re : code VBA pour transformer formule en valeur

Bonjour à tous,
Désolé de n'avoir répondu plus tôt, mais au boulot l'antivirus m'interdit d'ouvrir ce post..., et pas eu le temps d'allumer le pc à la maison.
Je regarde çà ce WE à tête reposée et je reviens ici si j'ai besoin.
Bonne soirée et encore merci.

Cordialement.

PS : Staple1600 l'explication me parait très claire, par contre pour revenir qque post plus haut et l'adapter à plusieurs colonnes (B, C, D.... selon la date en A)... merci d'avance
DoubleZéro : impeccable, merci pour le fichier joint
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : code VBA pour transformer formule en valeur

Bonsoir


hypo78:
Tu as quoi comme antivirus ??
Tu veux dire que tu peux ouvrir d'autres fils sur le forum, mais pas celui-ci ???

PS:Ma macro traite déjà toutes les colonnes
(Fais le test avec plusieurs colonnes, tu verras qu'elle agit sur plusieurs colonnes)

00
Bonne idée que la tienne (même si j'évite de boucler en général)
Ne penses-tu pas qu'on peut réduire le Row en le combinant avec SpecialCells ?
(Car tel quel ton code traite toute la ligne en rapport avec c (et donc transforme en valeurs les cellules vides aussi, ce qui n'est pas forcément nécessaire, tu en conviendras ;) )
 
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : code VBA pour transformer formule en valeur

Bonjour, le Fil, le Forum,

Ne penses-tu pas qu'on peut réduire le Row en le combinant avec SpecialCells ?

Et comme ceci :

Code:
Sub Formules_supprimer_si()
With Application: .ScreenUpdating = False: .Calculation = xlCalculationManual: End With
Dim c As Range
For Each c In Range("A1", [A65000].End(xlUp))
If Now > c And c.Offset(, 1) <> "" Then Rows(c.Row).Value = Rows(c.Row).Value
Next
With Application: .ScreenUpdating = True: .Calculation = xlCalculationAutomatic: End With
End Sub


Le gain de temps serait-il important sur une base de données très volumineuse :confused: Merci :)

A bientôt :)
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87