Date auto et Erreur d’exécution 13

Bonjour tout le monde,

Je ne suis pas un grand expert macro mais grâce à vous (et tous vos posts) j'arrive à me débrouiller tout seul mais aujourd'hui j'ai un petit souci qui fait "tâche".

Je vous explique, dans mon classeur, lors de la saisie en colonne F ou J, la colonne voisine se voit attribuée la date d'aujourd'hui. Les 2 colonnes voisines, donc G et I, sont verrouillées pour empêcher les changements intempestifs des utilisateurs.

Mon problème est qu'avec mon code, lorsque j'effectue une action sur plusieurs cellules, Excel m'affiche :

'Erreur d'exécution '13' :

Incompatibilité de type

Avec les options "Fin" et "Débogage"

Cependant, les actions sont tout de même effectuées mais peut troubler l'utilisateur et surtout ne fait pas très pro ! Donc si vous avez des idées pour améliorer mon code, je suis tout ouïe !

C'est parti

Private Sub Worksheet_Change (ByVal Target As Range)

Dim Ligne As Integer

Sheets ("Exemple").Unprotect

If Target.Column <> 6 And Target.Column <> 9 Or Target.Value = "" Then Exit Sub

If Target.Column = 6 Or Target.Column = 9 And Target.Value <> "" Then

Active.Cell.Offset(cell, 1) = Now

Else

Active.Cell.Offset(cell,1 ) = Now

End If

Sheets("Exemple").Protect

End Sub

Je remercie d'avance toutes les personnes qui sauront me conseiller.

Cordialement

Michel

Bonjour,

je ne comprend pas pourquoi tu fais la même action que se soit vrai ou faux

If Target.Column = 6 Or Target.Column = 9 And Target.Value <> "" Then
Active.Cell.Offset(cell, 1) = Now
Else
Active.Cell.Offset(cell, 1) = Now
End If

Bonjour,

Oups faute de frappe

Else

Active.Cell.Offset(cell, 1) = ""

Mais à vrai dire cette partie du code est copiée d'un sujet sur ce forum, donc je ne comprends pas tout parfaitement !

Worksheet_Change est déclenché lorsque le contenu d'une cellule est modifiée dans la feuille.

Worksheet_Change n'est déclenché pas lors de la modification des mises en forme dans la cellule ou d'un recalcul

de quel façon tu effectue une action sur plusieurs cellules ?

Lorsque j'effectue n'importe quelle autre action sur un ensemble de cellules, alors l'erreur d'exécution est affichée mais il m'autorise quand même les actions que je lui demande. Il n'y a que pour seul effet le désagréable pop up d'erreur qui mène à la fenêtre VBA...

C'était bien ce que vous vouliez savoir ?

non, je voulais une description de "action sur un ensemble de cellules"

est ce que cette action est fait par vba ?

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
'....
End Sub

Une simple action comme étirer une cellule ou supprimer le contenu de plusieurs d'entre elles.

Ces actions sont faites lors de la simple utilisation du fichier et ce meme sur les colonnes qui ne sont pas concernées pas la macro

sans voir le fichier, il est difficile de déceler la cause de l'erreur

pouvez-vous joindre le fichier ?

Bonjour,

Salut sabV

Si tu pouvais copier et coller dans le post ton code complet sans erreur (et le mettre sous balise Code) car tel qu'il est écrit je ne vois pas comment il pourrait fonctionner sans déclencher d'erreur...

Et qu'est-ce que Ligne non utilisée, cell qui survient comme un cheveu sur la soupe, sans parler de cet Active.Cell !!!

Cordialement

Bonjour messieurs,

Tout d'abord, merci pour votre temps ! Malheureusement il s'agit d'un fichier pro et je ne peux pas le sortir.

Cependant, je me suis posé la question : est-ce que je ne peux tout simplement pas enlever le "Else Active.Cell.Offset(cell,1 ) = "" " ?

Ou le remplacer ?

Private Sub Worksheet_Change (ByVal Target As Range)
Dim Ligne As Integer
Sheets ("Exemple").Unprotect

If Target.Column <> 6 And Target.Column <> 9 Or Target.Value = "" Then Exit Sub

If Target.Column = 6 Or Target.Column = 9 And Target.Value <> "" Then
Active.Cell.Offset(cell, 1) = Now
Else
Active.Cell.Offset(cell,1 ) = ""
End If

Sheets("Exemple").Protect

End Sub

Essaie de commencer par te poser les bonnes questions !

1) tu déclares une variable Ligne ! Pourquoi ? Elle n'est pas initialisée et n'apparaît dans le code exécutable de la macro !

2) tu écris une ligne douteuse ici :

If Target.Column = 6 Or Target.Column = 9 And Target.Value <> "" Then

A la ligne précédente, si Target ="", tu sors ! Cette condition ne se justifie donc pas car elle est forcément réunie si tu n'es pas sorti. Heureusement pour toi car ta ligne ne tient pas compte de la priorité des opérateurs, le And qui prévaut sera évalué avant le Or. Autrement dit la condition écrite est : Target en col. F (que la cellule soit vide ou non !) OU Target en col. I (là seulement avec obligation qu'elle soit vide)

3) Une question que tu aurais dû te poser depuis longtemps !

Active.Cell

Active n'est ni une propriété ni une méthode renvoyant un objet... cette instruction ne peut donc que renvoyer une erreur !

4) Dans la même ligne...

Active.Cell.Offset(cell, 1) = Now

Le premier Cell n'étant aussi ni une propriété ni une méthode ne correspond à rien mais cela fait partie de l'erreur précédente.

Le second cell lui sera reconnu comme variable, mais variable non déclarée et non initialisée, elle renverra 0. Cela n'est peut-être pas plus gênant que cela mais tu aurais dû te poser la question de la façon dont cet élément apparaît brusquement à cet endroit...

De toute façon la ligne est déjà en erreur...

5) Tu es dans une proc. d'évènement, sur une feuille, tu agis sur cette feuille, il est toujours préférable d'utiliser Me pour se référer à la feuille. Et Target pour la cellule active modifiée...

Je ne vois pas ce qui provoquerait une erreur 13, et d'ailleurs tu n'as jamais dit quelle ligne supportait l'erreur (?). La ligne que j'ai soulevée devrait déclencher une autre erreur... La 13 tient peut-être à un autre élément qui n'apparaît pas ici. Mais ce qui est sûr c'est que cette procédure en l'état ne peut fonctionner.

Cordialement.

Merci pour tous ces détails !

Malheureusement, comme je l'ai expliqué au début, je n'ai jamais suivi de cours et j'apprends par la copie, je regarde donc les messages sur les autres forums ou YT et essaye de l'arranger pour que ça marche dans mon cas. Sauf que parfois, comme ici, je ne comprends pas tout ce qu'il y a et je tatonne jusqu'à que ça fonctionne.

Et pour le coup, lorsque je remplis F, la date s'implémente en G et pareil pour J avec I. Je pensais que je m'en étais sorti mais apparemment c'est du travail dégueulasse !

Si vous avez un exemple à me communiquer, cela me serait d'une grande aide, car là je suis perdu ! Car d'après vous il faut tout que je change...

Merci de votre aide en tout cas

Michel

Bonsoir,

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Column = 6 Or Target.Column = 9 Then
        Me.Unprotect
        If Target.Value <> "" Then
            Target.Offset(, 1) = Now
        Else
            Target.Offset(, 1).ClearContents
        End If
        Me.Protect
    End If
End Sub

Evidemment les cellules sur lesquelles tu dois pouvoir écrire doivent être déverrouillées si la feuille est protégée, en particulier dans les colonnes F et I.

Et si ton dispositif doit exclure une ou plusieurs lignes en tête de feuille, il faut l'ajouter dans les conditions d'exclusion.

Par exemple : If Target.Row < 4 Or Target.Count > 1 Then Exit Sub

Cordialement.

Bonsoir,

Ca a l'air beaucoup plus propre effectivement !

Je vais essayer ça mardi et je vous tiens au courant, en tout cas, je vous dis un grand merci pour tout le temps que vous m'avez consacré !

Cordialement

Michel

Merci beaucoup, c'est parfait !

Rechercher des sujets similaires à "date auto erreur execution"