Bonjour à tous,
Comme le savent déjà les utilisateurs avertis, la protection du code VBA par mot de passe n'est pas une solution sûre.
En revanche, une solution plutôt efficace pour protéger un code VBA contre la copie ou la modification est l'obfuscation (qui consiste à rendre le code illisible).
En voici un exemple :
Code AVANT obfuscation :
Function ARGUMENT_FONCTION(cellule As Range, position As Integer)
formule = cellule.FormulaLocal
'Formule sans la première fonction
formule_b = Split(formule, "(")
formule_b(0) = ""
formule = Join(formule_b, "(")
formule = Mid(formule, 2, Len(formule) - 2)
'Split des arguments
compteur = 0
Do
compteur = compteur + 1
formule_b = Split(formule, ";")
recommencer = False
For i = 0 To UBound(formule_b)
If UBound(Split(formule_b(i), "(")) <> UBound(Split(formule_b(i), ")")) Then
formule_b(i) = formule_b(i) & ";;"
formule = Join(formule_b, ";")
formule = Replace(formule, ";;;", "XLP")
recommencer = True
Exit For
End If
Next
Loop While recommencer And compteur < 10000
If compteur < 10000 Then
ARGUMENT_FONCTION = Replace(formule_b(position - 1), "XLP", ";")
Else
ARGUMENT_FONCTION = "Erreur formule"
End If
End Function
Code APRES obfuscation :
Function q20e9f5d6ff43dd9ff6d42d4d073302c9(k3948312e2cb23220eb0ce9cef4dacef8 As Range, d4757fe07fd492a8be0ea6a760d683d6e As Integer)
r88097393809906ba0bb28972af25b3ec = k3948312e2cb23220eb0ce9cef4dacef8.FormulaLocal
h22c29cbe36ad4bd86f0f4157c09cbb14 = Split(r88097393809906ba0bb28972af25b3ec, "(")
h22c29cbe36ad4bd86f0f4157c09cbb14(0) = ""
r88097393809906ba0bb28972af25b3ec = Join(h22c29cbe36ad4bd86f0f4157c09cbb14, "(")
r88097393809906ba0bb28972af25b3ec = Mid(r88097393809906ba0bb28972af25b3ec, 2, Len(r88097393809906ba0bb28972af25b3ec) - 2)
z5ea24539bda2f6ac946f1f9f04dfd358 = 0
Do
z5ea24539bda2f6ac946f1f9f04dfd358 = z5ea24539bda2f6ac946f1f9f04dfd358 + 1
h22c29cbe36ad4bd86f0f4157c09cbb14 = Split(r88097393809906ba0bb28972af25b3ec, ";")
l2ed6c668db434126a7587ac3626666d6 = False
For i865c0c0b4ab0e063e5caa3387c1a8741 = 0 To UBound(h22c29cbe36ad4bd86f0f4157c09cbb14)
If UBound(Split(h22c29cbe36ad4bd86f0f4157c09cbb14(i865c0c0b4ab0e063e5caa3387c1a8741), "(")) <> UBound(Split(h22c29cbe36ad4bd86f0f4157c09cbb14(i865c0c0b4ab0e063e5caa3387c1a8741), ")")) Then
h22c29cbe36ad4bd86f0f4157c09cbb14(i865c0c0b4ab0e063e5caa3387c1a8741) = h22c29cbe36ad4bd86f0f4157c09cbb14(i865c0c0b4ab0e063e5caa3387c1a8741) & ";;"
r88097393809906ba0bb28972af25b3ec = Join(h22c29cbe36ad4bd86f0f4157c09cbb14, ";")
r88097393809906ba0bb28972af25b3ec = Replace(r88097393809906ba0bb28972af25b3ec, ";;;", "XLP")
l2ed6c668db434126a7587ac3626666d6 = True
Exit For
End If
Next
Loop While l2ed6c668db434126a7587ac3626666d6 And z5ea24539bda2f6ac946f1f9f04dfd358 < 10000
If z5ea24539bda2f6ac946f1f9f04dfd358 < 10000 Then
q20e9f5d6ff43dd9ff6d42d4d073302c9 = Replace(h22c29cbe36ad4bd86f0f4157c09cbb14(d4757fe07fd492a8be0ea6a760d683d6e - 1), "XLP", ";")
Else
q20e9f5d6ff43dd9ff6d42d4d073302c9 = "Erreur formule"
End If
End Function
Obfusquer un code VBA automatiquement
Pour le projet XLSync, j'avais créé un outil spécifique au code de ce projet pour l'obfusquer automatiquement ...
Et, bonne nouvelle, aujourd'hui j'en ai créé une nouvelle version utilisable par tout le monde
Cet outil gratuit est disponible dans les astuces VBA du site ou depuis ce lien : protéger son code VBA
J'espère que vous apprécierez et qu'il vous sera utile
Merci de me signaler à la suite de ce post si vous rencontrez des problèmes d'obfuscation avec cet outil ...