problème avec programme

  • Initiateur de la discussion Initiateur de la discussion david.ridelaire
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

david.ridelaire

Guest
bonjour à tous

voilà j'ai un petit programme :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column = 1 And Target.Offset(0, 8) = "" Then Target.Offset(0, 8) = Date
If Target.Column = 5 And Target.Offset(0, 3) = "" Then Target.Offset(0, 3) = Date
If Target.Column = 13 And Target.Offset(0, -1) = "" Then Target.Offset(0, -1) = Target.Offset(0, -2)
End Sub

qui lorsqu'il s'execute sur une page (vierge)

m'ouvre une boite de dialogue avec la phrase suivante :

"erreur d'éxécution '1004'
erreur définie par l'application ou par l'objet

quelqu'un aurait-il une solution à m'apporter

d'avance merci

david
 
Re : problème avec programme

Bonjour
A mon avais VBA essaye d'évaluer la 3ème instruction et si tu es en 1ère colonne VBA essaye d'évaluer Target.Offset(0,-1) et comme il n'existe pas de colonne 0 te renvoie un message d'erreur

Essaye ceci
If Target.Column = 1 And Target.Offset(0, 8) = "" Then Target.Offset(0, 8) = Date
If Target.Column = 5 And Target.Offset(0, 3) = "" Then Target.Offset(0, 3) = Date
If Target.Column = 13 Then
If Target.Offset(0, -1) = "" Then Target.Offset(0, -1) = Target.Offset(0, -2)
End If
 
Re : problème avec programme

Bonjour david,

L'erreur se produit quand tu es sur la colonne A car Target.offset(0,-1) est impossible.

Rajoute ceci :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column = 1 And Target.Offset(0, 8) = "" Then Target.Offset(0, 8) = Date
[COLOR=Red]Exit Sub[/COLOR]
If Target.Column = 5 And Target.Offset(0, 3) = "" Then Target.Offset(0, 3) = Date
If Target.Column = 13 And Target.Offset(0, -1) = "" Then Target.Offset(0, -1) = Target.Offset(0, -2)
End Sub
@+

Edition : Bonjour Banzai64 et bienvenue sur XLD , pas rafraichi !!!
 
Dernière édition:
Re : problème avec programme

bonjour david

quand tu fais debug, quelle ligne est en jaune,

celle-ci ?

If Target.Column = 13 And Target.Offset(0, -1) = "" Then Target.Offset(0, -1) = Target.Offset(0, -2)

si c'est celle la,

if target.column = 13 then
if target.offset(0,-1) = "" then target.offset(0,-1) = target.offset(0,-2)
end if

attention , si tu est en ligne 13 et en colonne A ou B ca plantera

un offset de -1 en colonne A ou de -2 en colonne B sort du cadre, puisqu'il provoque une action en colonne 0 ou inferieur
 
Re : problème avec programme

re:

Bonjour segio, et merci pour la fete

J'ai malheureusement sauté l'heure de la sieste, et ca se ressend, j'ai mal lu, j'ai lu row à la place de column

il est un peut tard pour dormir maintenant, je vais faire plus attention

merci à toi
 
Re : problème avec programme

Bonjour,
essaie avec ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column = 1 And Target.Offset(0, 8) = "" Then Target.Offset(0, 8) = Date: Exit Sub
If Target.Column = 5 And Target.Offset(0, 3) = "" Then Target.Offset(0, 3) = Date
If Target.Column = 13 And Target.Offset(0, -1) = "" Then Target.Offset(0, -1) = Target.Offset(0, -2)
End Sub
 
Re : problème avec programme

maintenant que j'ai mieux lu

le probleme vient quand meme de la

if target.column = 13 then
if target.offset(0,-1)

devrait te donner la solution

quand tu fais une serie de test en paralelle, tout les tests sont faits (si defois il y avait un OR dans la serie)
donc si tu es en colonne A, le OFFSET(0,-1) se plante
avec la correction, n'etant pas en colonne 13, le test OFFSET(0,-1) ne se fera pas

Bonne nuit à tous
 
Re : problème avec programme

re:

If Target.Column = 1 And Target.Offset(0, 8) = "" Then Target.Offset(0, 8) = Date: Exit Sub

avec cette modif, s'il y as quelque chose dans la cellule OFFSET(0,8), le test n'etant pas bon, le exit sub ne se fera pas

et tu plantera au prochain test si tu es en colonne A
 
Re : problème avec programme

CE PROGRAMME FONCTIONE TRES BIEN CI-JOINT CE DERNIER

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column = 1 And Target.Offset(0, 8) = "" Then Target.Offset(0, 8) = Date: Exit Sub
If Target.Column = 5 And Target.Offset(0, 3) = "" Then Target.Offset(0, 3) = Date
If Target.Column = 13 And Target.Offset(0, -1) = "" Then Target.Offset(0, -1) = Target.Offset(0, -2)
End Sub
 
Re : problème avec programme

re:

desolé je persiste .......................


Tape quelque chose en A5 ---> La date se met automatiquement en I5

Super c'est ok

Mince j'ai fait une faute en A5

Je corrige ma faute en A5 et la Badaboum erreur 1004 sur la ligne que j'ai cité précédemment

Mais c'est vrai ca marche tant qu'on ne revient pas dessus


Fait l'essai il serait dommage de laisser une possibilité de plantage
 
Re : problème avec programme

Bonjour,
Je poste à la suite de ce message car mon problème est similaire à celui exposé ici.
J'ai réalisé un code qui saisi la date du jour automatiquement dans une cellule (2eme colonne) lorsque l'on saisi des données dans certaines cellules de la ligne correspondante.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 Then
Target.Offset(0, -1) = Date
ElseIf Target.Column = 4 And Target.Count = 1 Then
Target.Offset(0, -2) = Date
End If
End Sub

Le problème est qu'avec ce code, si je modifie une cellule où la date a déjà été saisie, cette dernière se met automatiquement à jour. Je souhaiterais donc que la date s'inscrive uniquement si elle n'a pas déjà été renseignée.

Voici donc le code que j'ai réalisé:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 And Target.Offset(0, -1) = Vide Then
Target.Offset(0, -1) = Date
ElseIf Target.Column = 4 And Target.Count = 1 And Target.Offset(0, -2) = Vide Then
Target.Offset(0, -2) = Date
End If
End Sub


Mais j'ai un message d'erreur à chaque fois que j'ajoute une valeur.
Le débogueur me souligne cette ligne
Code:
ElseIf Target.Column = 4 And Target.Count = 1 And Target.Offset(0, -2) = Vide Then
Target.Offset(0, -2) = Date


Comment éviter ce message d'erreur?
Merci d'avance pour votre précieuse aide.
 
Re : problème avec programme

Bonjour,
On m'a répondu sur le forum suivant.
Le nouveau code proposé fonctionne.
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If (Target.Column = 3 or Target.Column = 4) And Target.Count = 1 And sh.Range("B" & target.Row).Value = "" Then
     sh.Range("B" & target.Row).Value = Date
End If
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
358
Réponses
4
Affichages
586
Réponses
4
Affichages
734
Réponses
1
Affichages
468
Réponses
5
Affichages
911
Retour