[RESOLU] PB MACRO : Protection et debug

earxcurae

XLDnaute Nouveau
Bonjour à tous.

Que de temps passé sans venir chercher un coup de main dans cette communauté.
Voilà 4ans j'avais posté et partager avec tous une carte de la France après de l'aide qu'on m'avait fourni ici même)

Et me revoilà....
Voilà la situation :
Me voilà depuis peu dans un nouveau boulot et pour pour me faire valoir, je monte une matrice qui permet de faire un gain de temps de 45min... sur 1h de travail. 2 semaines de travail... et je connais le VBA depuis... 2semaines...
Ca fonctionne très bien ! Mais il me faut maintenant sécuriser le tout pour qu'un utilisateur lambda ne fasse pas une fausse manipulation.

Ma demande porte sur la non-édition (et changement surtout) de mes macros.
La feuille est protégée (juste cellules verrouillées ou non de cliquables -faut que je trouve à quel moment les cellules verrouillées le deviennent...), j'ai galéré à rendre les bouton de macro protégés car j'avais un objet caché (je pense) en plein dans zone non verrouillée, zone de calcul), je vais regarder pour protéger la structure aussi car pas mal de feuillets cachés (avec la commande "xxxxx.Activate" pour les lancer).

Le mieux que j'ai trouvé après de nombreuses recherches à extraire des noms/prénoms d'un fichier texte (nom en majuscule et prénom en minuscule), et ne garder que le nom et la 1ère lettre du prénom. Et vu la galère avec les caractères spéciaux, je profite de ce post pour en parler et donner une aide, car j'y ai passé du temps...
Voilà une parenthèse en aide si besoin :
Ouvrir le fichier texte via excel, et là les accents s'aiment à devenir des caractères spéciaux. Pour ne garder que les majuscules (dont la 1ère lettre du prénom) je suis passer par une macro enregistrant un remplacement de caractères (CTRL+H) sur les caractères é è ê ë ö ô ç [...] par du vide (ou une minucule) avec (ALT+239 par ex - voir - Raccourcis clavier pour caractères spéciaux [Résolu] | CommentCaMarche -
Ensuite, j'ai lancé sur la page une macro pour supprimer toutes les minuscules :
Sub supp_min()
'
' Supp_Min Macro
' Macro enregistrée le 30/05/2012 par 8011386D
'

'
Dim c As Range, r As Range
Dim Tex$, LetCherch1$, LetCherch2$, i As Long
Set r = Selection
For Each c In r
Tex = c.Text
For i = Len(Tex) To 1 Step -1
LetCherch1 = Mid(Tex, i, 1)
LetCherch2 = Mid(UCase(Tex), i, 1)
If LetCherch1 <> LetCherch2 Then Tex = Replace(Tex, LetCherch1, "")
Next
c.Value = Trim(Tex)
Next c
End Sub
En espérant en aider certains ;)

Une autre demande :
je n'ai pas prit encore le temps d'apprendre à faire des boucles... et en même temps j'ai le cerveau qui fume à avoir appris en autodidacte le VBA...) mais je remplis un bon de commandes en cliquant sur un bouton-macro qui gères les erreurs, mais au moment où il pioche dans la feuilles d'erreurs et qu'il n'y a plus rien d'inscrit dedans, j'ai un bug... Puis je faire un débug automatique si l'action de la macro ne donne rien ?

Et aussi liées à la protection, si j'ai un utilisateur qui clique qui fait quelque chose dans une cellule verrouillée, y a t-il moyen de mettre un autre message que celui d'Excel donnant a solution pour déprotéger la feuille ? (je ne sais pas si un mot de passe sera le bienvenue pour toute ma protection)



Donc en gros 3 besoins d'aide (en italique) :
1) protéger mes macro de toute écriture
2) éviter un debug à faire (et par là même faire peur à l'utilisateur lamda)
3) Le message de non-droit que je voudrais changer


Je vous remercie d'avance.

(et merci encore et toujours pour l'aide que je trouve au fil des discussions)
 
Dernière édition:

Hulk

XLDnaute Barbatruc
Re : PB MACRO : Protection et debug

Slt earxcurae, Forum,

Pour le point 1.

Dans l'éditeur VBA (Visualiser le code), dans la fenêtre des projets (normalement à droite) :

a) Click-droit sur "VBAProject(TONCLASSEUR)"

b) Click sur "Propriétés VBAProject..."

c) Dans la fenêtre, dans l'onglet "Protection" tu coches "Verouiller le projet pour l'affichage"

d) Tu saisis un mot de passe puis tu le confirmes

e) Click "OK"

f) Tu enregistres et quittes ou quittes et enregistres

g) Tu ouvres et c'est bon tu ne peux plus accèder aux macros sans le mdp

À savoir :

La protection Office c'est de la daube...

J'ai dernièrement (sur un autre forum) quelqu'un qui a fait sauter un mot de passe en moins de deux.

Donc je me permets de te donner un petit conseil, mets un mot de passe que tu n'utilises pas ailleurs !

Pour le point 2 et 3, trop complexe (pour moi) ce que tu expliques. Je pense qu'un classeur avec les résultats que tu souhaites bien expliqués, vaut mieux qu'un long discours.

Le classeur doit être sans données confidentielles et quelques lignes suffisent et aussi, traiter un problème à la fois :cool:

Cela dit, je ne dis pas que je puisse t'aider par la suite, mais ici il y a des sacrés pros ;)

Dans l'attente...
 
Dernière édition:

earxcurae

XLDnaute Nouveau
Re : PB MACRO : Protection et debug

Bonjour Hulk, le forum.

Merci pour ta réponse sur le sujet N°1, je venais aussi à l'instant de trouver comment faire. :rolleyes:

Pour mettre mon fichier en lien, cela est délicat car j'ouvre 3 autres fichiers excel pour jouer mes matrices.
Par contre, voici quelques captures d'écrans pour être plus explicite.
C'est une matrice pour vérifier que tous nos mécano ont bien leurs taxis de commandés.

06.JPG

Les 3 boutons lançant mes vérifications et les commandes
L'insertion qui extrait les données d'un fichier texte issu d'un logiciel interne.
La vérification qui pointe sur 2 fiches de commandes de taxis.
La commande qui prépare le bon à faxer aux sociétés de taxi et les imprime.

La zone de vérification. Les lignes en rouges représentent des taxis non commandés.
Pour les commander il suffit cliquer sur le bouton "commandes des courses ko" cela prépare la commande, l'imprime et ensuite relance le bouton "vérification des commandes de taxis"
Les lignes en rouges disparaissent une à une car j'utilise les données de la 1ère ligne du feuillet taxis_à_vérifier.
C'est un jeu d'extraction qui me mets les KO dans ce feuillet et les bon dans celui taxi_ok.
Il faut donc cliquer de nouveau sur le bouton "commandes des courses ko" tant qu'il y a des lignes en rouge.

Et voici donc mon soucis qui survient quand on clique sur le bouton "commandes des courses ko" alors qu'il n'y a plus rien à copier dans le feuillet taxi_à_vérifier :
04.JPG
Mes feuillets de travail (taxis_ok et taxis_à_vérifier sont juste pour un visu supplémentaire mais inutiles à l'utilisateur)


Pour ma question 3 :
05.jpg
J'aimerais juste savoir s'il est possible de changer le message lorsqu'un utilisateur fait la moindre manipulation sur une de ces cases.
Les cellules verrouillées sont sélectionnables (et pour une commodité sur mes macro j'aimerais qu'elles le restent)

J'espère que j'aurais pu être plus explicite avec ces captures d'écran. trop de fichiers liés à ma matrices pour joindre le tout et virer tout ce qui serait confidentiel.

Je continu aussi mes recherches et posterais mes solutions trouvées... si j'en dégote ;)

Merci encore.


Earx.
 

Pièces jointes

  • 06.JPG
    06.JPG
    27.9 KB · Affichages: 110
  • 06.JPG
    06.JPG
    27.9 KB · Affichages: 110
  • 04.JPG
    04.JPG
    15.9 KB · Affichages: 193
  • 04.JPG
    04.JPG
    15.9 KB · Affichages: 198
  • 05.jpg
    05.jpg
    24.2 KB · Affichages: 182
  • 05.jpg
    05.jpg
    24.2 KB · Affichages: 177

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : PB MACRO : Protection et debug

Bonjour à tous

Pour ma question 3 :
Lien supprimé
J'aimerais juste savoir s'il est possible de changer le message lorsqu'un utilisateur fait la moindre manipulation sur une de ces cases.
Les cellules verrouillées sont sélectionnables (et pour une commodité sur mes macro j'aimerais qu'elles le restent)

voir exemple en pièce jointe

à+
Philippe
 

Pièces jointes

  • 111.xls
    47 KB · Affichages: 50
  • 111.xls
    47 KB · Affichages: 48
  • 111.xls
    47 KB · Affichages: 50

earxcurae

XLDnaute Nouveau
Re : PB MACRO : Protection et debug

Merci à toi Philippe.

En effet cela fonctionne comme je le voulais.

J'essaye de trouver maintenant à mettre plusieurs champs mais pour l'instant je calle un peu, je continue mes test.
If Not Intersect(Target, Range("A1:K5")) Is Nothing Then
J'aimerais aussi A6:J6 ainsi P:p

après plusieurs test dans l'écriture, je n'ai pas encore trouvé:p

En tout cas, c'est excatement ce que je souhaitais comme résultat.
Merci


EDIT : Me fallait justement en parler pour trouver !!!
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:K5")) Is Nothing Then
MsgBox ("Cette cellule est verrouillée")
' ensuite on sélectionne une autre cellule
[K6].Select
End If
If Not Intersect(Target, Range("A6:J6")) Is Nothing Then
MsgBox ("Cette cellule est verrouillée")
' ensuite on sélectionne une autre cellule
[K6].Select
End If
End Sub


Me reste plus qu'à me pencher sur le cas de mon debug sur mes commandes à passer.

Merci encore !!!
;)

Earx
 
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : PB MACRO : Protection et debug

Re,

une solution beaucoup plus simple qui fonctionne pour toutes les cellules verrouillées de la feuille
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Locked = True Then
MsgBox ("Cette cellule est verrouillée")
' ensuite on sélectionne une autre cellule
[A1].Select
End If
End Sub
à+
Philippe
 

earxcurae

XLDnaute Nouveau
Re : PB MACRO : Protection et debug

Adopté !!!

C'est net, sans soucis de raté une cellule.
J'adhère. :p


J'en reviens ici :
Et voici donc mon soucis qui survient quand on clique sur le bouton "commandes des courses ko" alors qu'il n'y a plus rien à copier dans le feuillet taxi_à_vérifier :
Regarde la pièce jointe 227422
Mes feuillets de travail (taxis_ok et taxis_à_vérifier sont juste pour un visu supplémentaire mais inutiles à l'utilisateur)
Je suis tellement à penser à pas mal de choses en même temps que j'ai oublié de mettre l'erreur elle-même... :rolleyes:
Regarde la pièce jointe 852729

Sheets("TAXIS_A_VERIFIER").Select
Columns("J:J").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("BDD_Villes_Roulements").Activate
Range("L1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("L1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="_", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
TrailingMinusNumbers:=True
Columns("L:O").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlToLeft
Sheets("TAXIS_A_VERIFIER").Select
Columns("L:L").Select
Selection.Copy
Sheets("BDD_Villes_Roulements").Activate
 

Pièces jointes

  • 08.jpg
    08.jpg
    66.8 KB · Affichages: 138
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : PB MACRO : Protection et debug

Re,

concernant la problème évoqué ci-dessus, essaie en supprimant la ligne qui précède le code en rouge

Application.CutCopyMode = False (supprime cette ligne et fais un essai)

Remarque: ce n'est pas évident de donner une réponse à partir de copies d’écran, il vaudrait mieux voir le fichier

à+
Philippe
 

earxcurae

XLDnaute Nouveau
Re : PB MACRO : Protection et debug

Supprimer la ligne
Application.CutCopyMode = False
ne change pas le problème.

J'ai retouché à mon fichier pour le mettre en pièce jointe.
Il ne sert à rien de cliquer ailleurs que sur le bouton COMMANDES DE COURSES KO car les autre appelle d'autres fichiers.

Pour faire le test, il faut supprimer la ligne présente dans le feuillet TAXIS_A_VERIFIER.
J'espère que cela aidera.
 
Dernière édition:

earxcurae

XLDnaute Nouveau
Re : PB MACRO : Protection et debug

Bonjour.

J'ai trouvé d'où venait mon problème avec le bug de la macro.
En fait cela arrive au moment où la macro lance une conversion délimité par "_" et que la cellule L1 est vide pour le faire.
Sur chaque commande j'utilise chaque texte de ce code de route : BX_161_735 qui se retrouve présent dans le feuillet "Taxi_à_vérifier"

Il me faudrait trouver un code qui s'exprimerait par :
Si cellule vide, alors ne rien faire
Sinon, effectuer la formule demandée

Le top serait même d'ouvrir une pop up si la cellule est vide signifiant qu'il n'y a plus de taxis à commander et arrêter à ce moment la macro.

Je me replonge dans mes recherches d'apprentissage du VBA :D

Earx

EDIT :
J'ai trouvé pour le message et pour stopper la macro (je crois.......) :
'
' test de la condition pour conversion
'
If Not IsEmpty(Range("L1")) Then
Selection.TextToColumns Destination:=Range("L1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="_", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
TrailingMinusNumbers:=True
'
Else: MsgBox ("Il n'y a plus de courses à commander")
Exit Sub
End If

Par contre, cette macro joue le jeu de 3 macro :
Sub Comm_KO()
'
' Comm_KO Macro
' Macro enregistrée le 25/05/2012 par 8011386D
'
Range("P1").Select
Application.Run "'Vérifications des taxis programmés.xls'!Comm1"
Range("P1").Select
Application.Run "'Vérifications des taxis programmés.xls'!Comm2"
Range("P1").Select
Application.Run "'Vérifications des taxis programmés.xls'!comm3"
End Sub

Et j'ai pu constater que l'arrêt, s'il marche lance tout de même comm3...
Donc n gros j'arrête Comm1 mais je lance tout de même comm2 et 3 .... et je voudrais vraiment stopper net la macro Comm_KO .


2ème EDIT :

YOUHOUUU !! j'ai trouvé une solution !!!
J'ai ôté les
End Sub
________________________________
Sub Comm_KO()

entre mes macro comm1 comm2 et comm3
Et dans la macro comm_KO, j'ai ôté les dernières lignes, il ne me reste plus que :
Range("P1").Select
Application.Run "'Vérifications des taxis programmés.xls'!Comm1"
Range("P1").Select




Merci aux aides apportées !
 
Dernière édition:

Discussions similaires

  • Question
Microsoft 365 macro
Réponses
6
Affichages
237
Réponses
12
Affichages
217