Remplacer une plage de formule par leur valeur

barbenault

XLDnaute Nouveau
Bonjour,

Je pensais que je pourrais facilement trouver la solution par moi-même, il faut croire que mes limites sont atteintes rapidement. Mon code génère une formule sur une plage en colonne BC, cette plage n'est pas fixe et la dernière ligne peut varier (dernière ligne non vide). Je souhaiterais que la plage en question soit remplacée par les résultats (valeurs données par les formules).

Je me suis dit, c'est tout simple, il me suffit de faire un copier de la plage (BC:BC) et un coller spécial (valeur) sur cette même plage. Le problème, c'est que la valeur renvoyée est celle de la cellule BC1, comme si le code copiait la première valeur de la plage et la copiait sur l'ensemble des cellules.

Pourriez vous m'éclairer sur ce problème?

Voici mon code

Code:
Columns("BC:BC").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
 

barbenault

XLDnaute Nouveau
Re : Remplacer une plage de formule par leur valeur

Re,

essaye ceci :
Code:
With Range("BC2:BC" & Cells(Rows.Count, "BC").End(xlUp).Row)
    .FormulaR1C1 = "=TEXT(RC[-52],""mm"")& ""/"" &YEAR(RC[-52])"
    .NumberFormat = "@"
    .Value = .Value
End With

Merci Pierrot, on peut dire que tu ne ménages pas ta peine, premier test concluant, mais je vais faire d'autres tests et te fait un retour. Encore merci.
 

merinos

XLDnaute Accro
Re : Remplacer une plage de formule par leur valeur

Salut,

tu écris dans ta macro:
Cells(2, 54).Value = "=IF(LEFT(RC[-52],1)=""E"",""international"",""local"")"
(désolé mon excel traduit en anglais)

or tu introduis une formule.

tu dois donc faire quelquechose comme
Cells(2, 54).FormulaR1C1 = "=IF(LEFT(RC[-52],1)=""E"",""international"",""local"")"


Ceci dit, le fond du probleme c'est que tu stockes tes dates sous forme de texte...
Cela prend plein de place et n'est pas flexible. (tu l'as dis toi-même)

la solution est de constituer une valeur date à partir du texte:

=DATE(RIGHT(C47;4);MID(C47;4;2);LEFT(C47;2))

et te voila avec une colonne date... qui ne sera pas sensible...
 

barbenault

XLDnaute Nouveau
Re : Remplacer une plage de formule par leur valeur

Re,

essaye ceci :
Code:
With Range("BC2:BC" & Cells(Rows.Count, "BC").End(xlUp).Row)
    .FormulaR1C1 = "=TEXT(RC[-52],""mm"")& ""/"" &YEAR(RC[-52])"
    .NumberFormat = "@"
    .Value = .Value
End With

Merci pierrot, mais j'ai toujours un problème, voilà ce qui apparaît dans la colonne BC :
Code:
=TEXT(RC[-52],"mm")& "/" &YEAR(RC[-52])

Je ne comprends pas ...
 

Pièces jointes

  • Test.xlsm
    88.6 KB · Affichages: 125
  • Test.xlsm
    88.6 KB · Affichages: 37
  • Test.xlsm
    88.6 KB · Affichages: 44

Pierrot93

XLDnaute Barbatruc
Re : Remplacer une plage de formule par leur valeur

Re,

modifie comme suit :

Code:
Sub Update_BFU()

Dim Concatenate_fields As Range

Application.ScreenUpdating = False

Cells(1, 54).Value = "EXP_Type"
Cells(1, 55).Value = "EXP_Month"
Cells(1, 56).Value = "Concatenate_fields"

Cells(2, 54).Value = "=IF(LEFT(RC[-52],1)=""E"",""international"",""local"")"
Cells(2, 54).Select
Selection.AutoFill Destination:=Range("BB2:BB" & Range("A65536").End(xlUp).Row), Type:=xlFillDefault

With Range("BC2:BC" & Cells(Rows.Count, "BC").End(xlUp).Row)
    .NumberFormat = "General"
    .FormulaR1C1 = "=TEXT(RC[-52],""mm"")& ""/"" &YEAR(RC[-52])"
    .NumberFormat = "@"
    .Value = .Value
End With

Cells(2, 56).Value = "=CONCATENATE(RC[-42],RC[-44],RC[-14],RC[-1],RC[-2])"
Cells(2, 56).Select
Selection.AutoFill Destination:=Range("BD2:BD" & Range("A65536").End(xlUp).Row), Type:=xlFillDefault

Columns("BD:BD").Select
ActiveWorkbook.Names.Add Name:="Concatenate_fields", RefersToR1C1:="='3.ExportSAGA'!C56"

Application.ScreenUpdating = True

End Sub
 

barbenault

XLDnaute Nouveau
Re : Remplacer une plage de formule par leur valeur

J'ai testé, nous obtenons, un résultat correct sur la cellule BC2, la formule fonctionne, puis la valeur obtenue est conservée tandis que la formule est supprimée. Par contre les cellules de BC3 à BCx n'affiche rien (""). Et dernière chose, la cellule BC1 affiche une #VALEUR#... si je lance la macro une seconde fois, la cellule BB1 affiche le nom que je lui ai donné en début de script...

Je peux toujours renommer cette cellule en fin de script, mais pourquoi cette erreur lors du premier lancement. Enfin, il ne reste plus qu'à reproduire l'action qui fonctionne en BC2 sur l'ensemble de la plage. C'est pas simple cette histoire.
 

barbenault

XLDnaute Nouveau
Re : Remplacer une plage de formule par leur valeur

Oui, en fait, si tu effaces la colonne BB, ou BD, la macro remet les bonnes infos, par contre si tu effaces la colonne BC, alors le problème survient.

A la base les colonnes BB, BC et BD n'existe pas, elles sont ajoutées par la macro et alimente un tableau. Le problème vient t-il du range tel qu'il est défini...

Edit : La macro fonctionne à condition que les cellules de la colonne BC ne soient pas vides : je viens de tester en collant n'importe quoi dans la colonne, puis en cliquant sur le bouton et ça fonctionne... mais dès qu'elle est vide, ça ne marche plus.

Du coup le problème vient de
Code:
With Range("BC2:BC" & Cells(Rows.Count, "BC").End(xlUp).Row)
, normal la colonne est vide, donc le code ne peut être étendu ... je peux faire référence à la dernière ligne de la colonne C (où il va chercher la date). Je teste.

Voilà qui semble fonctionner :

Code:
With Range("BC2:BC" & Cells(Rows.Count, "C").End(xlUp).Row)
    .NumberFormat = "General"
    .FormulaR1C1 = "=TEXT(RC[-52],""mm"")& ""/"" &YEAR(RC[-52])"
    .NumberFormat = "@"
    .Value = .Value
End With

Merci Pierrot, je vais faire d'autres tests en changeant mes paramètres régionaux pour voir comment réagit la formule. Je vais aussi demander un développement de l'extracteur de mon SI car des dates au format texte ce n'est pas possible !!!

Tu m'as non seulement bien aidé mais appris des trucs.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 327
Messages
2 087 314
Membres
103 513
dernier inscrit
adel.01.01.80.19