XL 2016 formule sur VBA

judoka0209

XLDnaute Occasionnel
Bonjour, j'ai une formule en C15, C28, C41, C53, C66 et C79 à AN79 (sur le fichier j'ai mis qu'un bout) qui marche nickel mais je voudrais savoir comment écrire une routine qui fait la même chose en vba car j'ai des gentils collègues qui tripote a tout
merci
 

Pièces jointes

  • Planning.xlsm
    325.5 KB · Affichages: 22

Staple1600

XLDnaute Barbatruc
Bonsoir

Protège ta formule (en protégeant ta feuille*)
Ainsi tes collègues ne verront pas la formule et ne pourront pas la supprimer.

*: Voir sur le net, comment protéger une feuille (en laissant certaines cellules en saisie libre, et d'autres pas, notamment celles qui contiennent des formules)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

La protection d'une feuille permet de laisser libre en saisie, les cellules dans lesquelles l'utilisateur doit saisir des données.
Cela correspond bien à ton cahier des charges, non ?
impossible ils doivent completer les cases

Donc plutôt de réécrire ce qui concerne la protection, je t'invite à lire ce tuto de la maison mère.
 

fanch55

XLDnaute Barbatruc
Salut,
Une proposition ci-dessous :
Dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   Protege_Formule Target
End Sub
Dans un module ( ou dans la feuille si usage unique) :
VB:
Function Protege_Formule(Target As Range) As Boolean
Dim Formules()   As String
Dim I            As Long

Application.EnableEvents = False

    ReDim Formules(Target.Count)
    For I = 1 To Target.Count               ' passe pour sauvegarder
        Formules(I) = Target(I).Formula     ' les cellules modifiées
    Next
   
    Application.Undo                        ' On restaure toutes les anciennes valeurs

    For I = 1 To Target.Count
        If Not Target(I).HasFormula Then    ' Si l'ancienne valeur n'a pas de formule
            Target(I).Formula = Formules(I) ' On restitue la cellule sauvegardée
            Protege_Formule = True          ' Une restitution a été effectuée
        End If
    Next

Application.EnableEvents = True

End Function
Nota: Par la suite, pour modifier une cellule avec une formule, il faudra entrer en "Développeur\mode Création" ou désactiver les Macros ...
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
234
Réponses
17
Affichages
922