VBA - Problème avec FLAG True et False
Bonjour,
Dans le fichier ci-joint, dans la ligne marquée en couleur, il faut inscrire un "Objet" (texte quelconque), il faut choisir un "Dicastère" par liste déroulante, il faut indiquer une "Date" valable puis écrire un nombre d'heures (1, 2,33, etc.) dans les cellules colorées des colonnes E à I. Seules les cellules en couleur ne sont pas protégées.
Si tout est fait correctement dans l'ordre logique indiqué ci-dessus, une ligne complémentaire est préparée pour la prochaine saisie - avec des cellules nouvellement déprotégées - les cellules des colonnes B à D de la ligne précédente sont nouvellement protégées et on peut saisir soit un deuxième nombre d'heure sur la ligne précédente, soit de nouvelles données Objet/Dicastère/Date/Heure.
Il y a notamment le passage ci-dessous de la macro placée sur la feuille "Saisie" qui réalise une partie de tout ça. En situation normale, le Flag à la valeur FALSE au début de ce passage.
If Référence_colonne_A = 0 Then
With Range("A" & Target.Row + 1 & ":K" & Target.Row + 1)
.Borders.Weight = xlThin
End With
With Range("B" & Target.Row + 1 & ":K" & Target.Row + 1)
.Interior.ColorIndex = 20
.Locked = False
End With
With Range("A" & Target.Row & ":D" & Target.Row)
.Interior.ColorIndex = xlColorIndexNone
.Locked = True
End With
End IfSi sur une ligne quelconque on ne saisit pas en premier toutes les cellules concernant les Objet/Dicastère/Date avant de saisir un montant d'heure, un message d'erreur apparaît, puis la macro est arrêtée et on doit saisir l'information manquante.
Après que l'on ait inscrit cette information manquante, lorsque l'on inscrit un nombre d'heure, il me semble que le Flag est sur TRUE au début de passage indiqué ci-dessus et la nouvelle ligne prévue n'est pas correctement préparée.
Bizarrement, si j'inscris un format de date incorrect (par exemple si j'inscris du texte à la place d'une date), un autre passage de ma macro déclenche un autre message d'erreur. Lorsque la date est alors corrigée, le passage de ma macro indiqué ci-dessus se déroule correctement par la suite.
Savez-vous comment remédier à ce problème ?
Bonsoir
Pas facile à digérer ton code mais bon
J'ai cru déceler un petit soucis dû à ta référence de la colonne A
Je résume "elle n'a pas de numéro, j'en mets un quand même et puis 2000 lignes plus tard (je rigole
quand tout est bon ok mais quand on a un deuxième passage ta colonne est renseignée
donc on ne passe pas dans la condition
Enleve simplement ton test que j'ai barré, normalement cela doit le faire
Sinon quand pb de saisie remets ta colonne A nulle
If Référence_colonne_A = 0 Then ' si la ligne n'est pas numérotée, on l'a numérote
Cells(Target.Row, 1) = Target.Row - 3
End If
|
-
|
[barrer]If Référence_colonne_A = 0 Then[/barrer]
With Range("A" & Target.Row + 1 & ":K" & Target.Row + 1)
----------
End With
[barrer]End If[/barrer]A plus
Salut et merci pour ta réponse,
J’avais placé ce contrôle à cet endroit là de manière à ce que si des heures étaient corrigées rétroactivement, les cellules de la ligne suivante ne soient pas déprotégées.
Dans le fichier ci-joint – comportant tes corrections – si je modifie par exemple les heures de la cellule H6, les cellules B7:D7 sont déprotégées, ce qui n’est pas désiré.
Penses-tu que l’on puisse malgré tout corriger mon code afin de répondre à ma première attente ?
A te relire.
Bonjour
Un essai
remplaces ton test par celui-ci
' Tout en restant sur la feuille "Saisie"
ActiveSheet.Unprotect ' sinon ça embête ci-dessous
If Val(Range("A" & Target.Row + 1)) = 0 Then
'If Référence_colonne_A = 0 Then
With Range("A" & Target.Row + 1 & ":K" & Target.Row + 1)
.Borders.Weight = xlThin
End With
With Range("B" & Target.Row + 1 & ":K" & Target.Row + 1)
.Interior.ColorIndex = 20
.Locked = False
End With
With Range("A" & Target.Row & ":D" & Target.Row)
.Interior.ColorIndex = xlColorIndexNone
.Locked = True
End With
End IfSalut Banzai,
Merci infiniment pour ta réponse spontanée
Ta proposition répond exactement à mon attente. Ca fonctionne maintenant du tonnerre
C'est super sympa de ta part.
Cordialement.