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 If

Si 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 ?

27vacations-2025.zip (144.31 Ko)

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 ) je regarde si elle est nulle

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 If

Salut 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.

Rechercher des sujets similaires à "vba probleme flag true false"