Effacer une valeur en préservant la formule (VBA)

Bonjour

Une fois de plus je viens faire appel à vos lumières

Je travaille sur une macro et je cherche un code qui pourrait remplacer mon : Range("").ClearContents

Car celui-ci efface la formule à l’intérieur de ma cellule (et ce pour plusieurs cellules).

Merci d'avance pour votre aide

Bonjour Max0490 le forum

bah là ???? par définition si tu as une valeur dans la cellule qui comporte une formule, c'est que le résultat de ta formule donne JUSTEMENT un Résultat !!!

alors si tu veux effacer le résultat là moi je ne comprend pas trop ta demande

de deux choses l'une ou tu effaces la formule, ou tu auras le résultat de ta formule.

a+

Papou

Ma macro fait plusieurs boucles et dans chaque boucle j'ai mes cellules qui sont calculées (jusqu'ici rien d'anormal)

A chaque fin de boucle les valeurs calculées sont imprimées, mais en changeant de boucle les valeurs calculées précédemment induisent en erreur les nouveaux calculs car certaines cellules sont dépendantes des autres suivant leurs résultat... (d'où le fait que je veuille faire seulement disparaître les valeurs pour pouvoir obtenir des calculs propres)

J’espère avoir été assez clair...

J'ai pensé à changer le range.clear par un range.value = "" mais je ne sais pas si cela sera correct.


Je viens d'essayer Range.value = "" ... Il efface la cellule aussi

Sub essai()

    Dim DLig As Long, Lig As Long
    Dim ShtS As Worksheet
    Dim a As Integer
    Dim PT As PivotTable
    Dim PF As PivotField
    Dim PI As PivotItem
    Dim Societe As String
    Societe = Sheets("TCD Perso").Range("B3").Value
    Set PT = Sheets("TCD Perso").PivotTables("Tableau croisé dynamique3")
    Set PF = PT.PivotFields("Agence")

  ' Définir la feuille source = TCD Perso
    Set ShtS = Worksheets("TCD Perso")
  ' Récupérer la dernière ligne des noms
    DLig = ShtS.Range("A" & Rows.Count).End(xlUp).Row
  ' Vérifier qu'il s'agit du total
    If InStr(1, ShtS.Range("A" & DLig).Value, "Total", vbTextCompare) > 0 Then
    ' si oui, dernière ligne = -1
        DLig = DLig - 1
    End If

        For Each PI In PF.PivotItems

        a = 0

        Sheets("TCD Perso").Range("B4") = PI

        If Not IsEmpty(Sheets("TCD Perso").Range("A9").Value) Then

   ' Avec la feuille à imprimer
    With Sheets("Diagramme")

    ' Vider les cellules des noms

        Sheets("Diagramme").Range("B22").ClearContents
       ' Sheets("Diagramme").Range("D23").ClearContents
        Sheets("Diagramme").Range("B35").ClearContents
        Sheets("Diagramme").Range("B48").ClearContents

' Pour chaque ligne de la feuille source à partir de la 7ème

    For Lig = 9 To DLig

            If a = 0 Then
                 Sheets("Diagramme").Range("B22").Value = ShtS.Range("A" & Lig).Value
                 a = a + 1
            Else
            Lig = Lig - 1
                 'Si nom calculé = cellule B48 alors on garde le même nom
                If Sheets("Diagramme").Range("B48").Value = Sheets("Diagramme").Range("C22").Value Then
                    Sheets("Diagramme").Range("B22").Value = ShtS.Range("A" & Lig).Value
            '        'Si différent, on prend le nom suivant : Lig + 1
                Else
                    Sheets("Diagramme").Range("B22").Value = ShtS.Range("A" & Lig + 1).Value
                   Lig = Lig + 1
                End If
            End If
            Sheets("Diagramme").Calculate
            Sheets("TCD données références").Calculate
            Sheets("Diagramme").Calculate

                'Si nom calculé = cellule B22 alors on garde le même nom
            If Sheets("Diagramme").Range("C35").Value = Sheets("Diagramme").Range("B22").Value Then
                Sheets("Diagramme").Range("B35").Value = ShtS.Range("A" & Lig).Value
                'Si différent, on prend le nom suivant : Lig + 1
            Else
                Sheets("Diagramme").Range("B35").Value = ShtS.Range("A" & Lig + 1).Value
                Lig = Lig + 1
            End If
            Sheets("Diagramme").Calculate
            Sheets("TCD données références").Calculate
            Sheets("Diagramme").Calculate

                'Si nom calculé = cellule B36 alors on garde le même nom
            If Sheets("Diagramme").Range("C48").Value = Sheets("Diagramme").Range("B35").Value Then
                Sheets("Diagramme").Range("B48").Value = ShtS.Range("A" & Lig).Value
                'Si différent, on prend le nom suivant : Lig + 1
            Else
                Sheets("Diagramme").Range("B48").Value = ShtS.Range("A" & Lig + 1).Value
                Lig = Lig + 1
            End If
            Sheets("Diagramme").Calculate
            Sheets("TCD données références").Calculate
            Sheets("Diagramme").Calculate

      ' Lancer l'impression
        '.PrintOut
      Next
  End With

  End If
    Next

End Sub

C'est ma macro ^^

PS : J'ai oublié de préciser qu'à chaque nouvelle boucle mes calculs se font en prenant comme référence une liste qui est différente de celle du tour précédent.

Bonjour,

Soit plus précis dans tes demandes, ça évite de faire de suppositions non adaptées...

On va supposer donc que tu travailles sur une plage où constantes et formules sont mélangées.

Si c'est le cas tu peux faire :

    Dim pl As Range
    On Error Resume Next
    Set pl = [A2:C9].SpecialCells(xlCellTypeConstants)
    On Error GoTo 0
    If Not pl Is Nothing Then pl.ClearContents

qui ne supprimera que les constantes (textes et nombres, on peut faire que sur l'un ou sur l'autre, regarde l'aide sur SpecialCells)

eric

Ok merci je vais voir ce que ça donne

 On Error Resume Next
    Sheets("Diagramme").Range("O35").SpecialCells (xlCellTypeConstants)
    On Error GoTo 0
    If Not Range("O35") Is Nothing Then Sheets("Diagramme").Range("O35").ClearContents

J'ai essayé avec ce code en prenant xlCellTypeConstants et xlCellTypeFormulas mais les deux on effacé la formule de la cellule O35

Je n'avais pas rafraîchi avant de poster, je n'avais pas vu ton complément.

Ce que je te proposais n'a plus lieu d'être.

Je rejoins Paritec, ta demande n'a aucun sens.

Tu n'as que 4 cellules concernées. Si tu as besoin des formules qui y sont et bien il faut les conserver, si tu n'en as pas besoin et bien elles ont aucune raison d'y être.

Si les valeurs qu'elles te retournent ne te conviennent pas, agit sur leurs antécédents (cellules qu'elle utilisent).

eric

Ok

Je laisse tomber le codage,je vais agir sur mes formules, apparemment je n'arrive pas à être suffisamment clair via écran interposés.

Merci pour votre aide en tout cas

Rechercher des sujets similaires à "effacer valeur preservant formule vba"