Valeur Absolue à Relative sur une plage de données

La dugue

XLDnaute Nouveau
Bonjour à tous et merci pour l'aide que vous avez pu m'apporter précédement en tant que lecteur attentif de certaine de vos discussions.

Etant un garçon aimant bien passer sous les radars (on ne commence pas avec les jeux de mots hein...), je n'avais, j'usqu'à présent, pas eu le besoin de m'inscrire pour poster. Mais comme chacun le sait, "le besoin est la mère de l'invention", dans ce cas je dirais plutôt le père de ma démarche...

(Promis je ne ferait pas une tartine à chaque fois, mais je me devais de marquer mon premier post et de saluer tout le monde. Ceci étant fait.)

J'ai donc un VRAI (lol) problème :

Je souhaiterai faire passer toutes les valeurs d'une plage de données (composées de formules très simples : additions) de l'état de valeurs absolues à valeurs relatives et réciproquement.

Bien sûr avant de demander j'ai cherché... Et j'ai trouvé un gentil contributeur sur un autre site ayant déjà répondu à cette question via un code VBA sur ce site : Mettre des $ automatiquement à toutes les formules? : Forum Excel

Le fait est que cela fonctionne très bien.

Là ou le problème apparait pour moi est que ce code n'est pas fait pour être appliqué à des formules contenant des références externes. Dans mon cas à d'autre onglets du même classeur.
Je crois que Excel est perturbé par les réfèrences du style "Feuil1!" lors de l'execution.

Et comme je suis un peintre en programmation VBA et que le temps me manque pour en apprendre toute les subtilités d'ici deux semaines. Je sollicite votre aide pour transformer ce code :

Sub Relatif_To_Absolu_Ou_Vice_Versa()
Dim c As Range
Dim LaFormule As String
For Each c In Selection
LaFormule = c.Formula
If LaFormule Like "*$*" Then
c.Value = Application.ConvertFormula _
(Formula:=LaFormule, fromReferenceStyle:=xlA1, _
toReferenceStyle:=xlA1, ToAbsolute:=xlRelative)
Else
c.Value = Application.ConvertFormula _
(Formula:=LaFormule, fromReferenceStyle:=xlA1, _
toReferenceStyle:=xlA1, ToAbsolute:=xlAbsolute)
End If
Next c


End Sub

Ou m'en proposer un autre.

Merci d'avance pour votre aide.
 

Pièces jointes

  • Absolue à relative.xls
    180 KB · Affichages: 87

pierrejean

XLDnaute Barbatruc
Re : Valeur Absolue à Relative sur une plage de données

Bonjour La Dugue

Et bienvenue sur XLD

Un essai:
Attention!! Valable uniquement sur le type de formule de ton fichier ( avec ! )

Code:
Sub test()
For Each c In Selection
x = c.Formula
If InStr(x, "$") = 0 Then
x = Replace(x, "!", "!$")
For n = Len(x) To 1 Step -1
  If Mid(x, n, 1) = "$" Then
    For m = n + 1 To n + 6
      If IsNumeric(Mid(x, m, 1)) Then
        x = Left(x, m - 1) & "$" & Mid(x, m)
        c.Formula = x
        Exit For
      End If
    Next
  End If
Next
Else
x = Replace(x, "$", "")
c.Formula = x
End If
Next
End Sub
 

Discussions similaires

Réponses
6
Affichages
194

Statistiques des forums

Discussions
312 911
Messages
2 093 509
Membres
105 744
dernier inscrit
laure.mg