Aide macro supprimer cellule quand une autre est vide

lydiiee

XLDnaute Junior
Hello le forum

j'ai besoin de votre expertise...

mon fichier permet de saisir un code dans l'onglet "CUSTOMER" et de le transmettre dans l"onglet "FULLSERV" avec l'heure de saisie de ce dernier.

Ensuite; lorsque ce code est resaisit dans l'onglet "HANDOUT"; je souhaite supprimer ce code ainsi que l'heure de saisie de la feuille precedente soit "FULLSERV".

Mon code fonctionne (car me supprime bien les donnees que je veux) mais beug et empeche la macro de la feuille "HANDOUT" de continuer et stop a cette etape...

voici mon code :
Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
If Target.Column = 2 Then
Target.Offset(0, -1) = Format(Now, "hh:mm")
End If
Application.EnableEvents = True

If Target.Value = "" Then
Target.Offset(0, -1) = ClearContents
End If

End Sub

Vous trouverez pour plus de comprehension mon fichier en PJ;

merci d'avance!
 

Pièces jointes

  • testLydiiee.xlsm
    51.3 KB · Affichages: 63
  • testLydiiee.xlsm
    51.3 KB · Affichages: 66
  • testLydiiee.xlsm
    51.3 KB · Affichages: 65

Gorfael

XLDnaute Barbatruc
Re : Aide macro supprimer cellule quand une autre est vide

Salut lydiiee et le forum
N'ayant que la version 2003, pas envie de m'occuper du fichier lui-même, la conversion apportant quelques fois des erreurs, et comme il n'y a pas de description précise de celle à solutionner...
Quelques remarques sur le code fourni dans le poste (Serait un plus d'utiliser les balises de code sur le forum):
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False
If Target.Column = 2 Then
Target.Offset(0, -1) = Format(Now, "hh:mm")
End If
Application.EnableEvents = True

If Target.Value = "" Then
Target.Offset(0, -1) = ClearContents
End If
End Sub
Si je lis bien : si on édite une cellule en B, on inscrit en A l'heure/minute
Personnellement, comme tu utilises une instruction de portée Application, je gére automatiquement les erreurs, pour remettre en route la gestion des évènements, même en cas d'erreur Excel...
Mais dans ton cas, je ne comprends pas son utilité
Pour cette partie, pas de problème.
Pour la seconde, je n'aime pas ! Mais comme je ne connaît pas le but réel...

Déroulement de la macro : en cas de passage de la feuille en mode édition
On bloque la gestion des évènements => OK
Si c'est une cellule de B on inscrit dans la colonne A l'heure/minute => OK, mais on ne teste pas la cellule de B ?
On remet en service la gestion des évènement => OK
on teste si la cellule est vide => Et si c'est une cellule B qui est vide ?
On efface la cellule à sa gauche => (c'est la cellule A) => ça relance la macro worksheet Change
-- on vérifie que ce n'est pas une cellule de B, comme la condition est fausse (A), on va directement après End If
-- on teste la cellule qui vient d'être effacée
-- on efface la cellule à gauche de A => Là on entend un Oups d'Excel qui ne connaît pas une colonne avant A

Je ferais juste un algorithme plus simple :
On teste si c'est une cellule de B
- si oui, on teste si elle est vide
--- si oui on efface A
--- si non on inscrit l'heure/minute
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
    If Target.Value = "" Then
        Target.Offset(0, -1) = ClearContents
    Else
        Target.Offset(0, -1) = Format(Now, "hh:mm")
    End If
End If
End Sub
on n'a pas besoin de gérer les évènements, puisque on intervient que si ça concerne la colonne B et dans ce cas uniquement on intervient sur A.

Évidement, ce n'est qu'une approche, puisque je ne connaît pas le but réel de la macro, et que je ne gère pas le cas d'un copier/coller sur plusieurs cellules.
A+
 
Dernière édition:

lydiiee

XLDnaute Junior
Re : Aide macro supprimer cellule quand une autre est vide

Hello Gorfael

Desolee pour mon explication boiteuse!

Mais tu as parfaitement compris mon probleme; et actuellement ton code marche parfaitement!

Je n'avais effectivement pas pris le probleme dans l'ordre et avais pris le probleme dans l'ordre de l'execution de l'action que je souhaitais (cad je saisis j'affiche l'heure et quand mon code est resaisit; il doit etre efface et l'heure avec)
mais cette logique n'est pas la bonne logique VBA!!

Je debute mais j'apprends!

Merci encore pour ton aide precieuse!!

Je suis en train maintenant d'essayer d'enregistrer ces donnees (code + heure de la saisie du code) sur un autre classeur pour sauvegarde avant qu'ils ne soient effaces. Pourrais tu m'aider sur ce point egalement?

Merci encore!
 

Discussions similaires

Réponses
7
Affichages
292
Réponses
10
Affichages
484