IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tester la suppression d'une ligne en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 70
    Par défaut Tester la suppression d'une ligne en VBA
    Bonjour,

    J'ai créé une macro qui enregistre la date du jour dans une colonne "date dernière modif" à chaque modification d'une cellule sur la ligne.
    le pb se pose lorsqu'on supprime la ligne. dans ce cas c'est la ligne du dessous qui est actualisée alors qu'on n'a pas fait de modif.

    Est-ce qu'il y a une instruction qui permet de tester si on supprime la ligne?
    J'ai essayé l'instruction ci dessous, mais ca plante mon fichier en supprimant toutes les lignes

    merci pour votre aide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if selection.delete then exit sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    SAlut,

    qu'attendais-tu comme comportement avec ton instruction
    Une condition s'attend à un test ou une valeur booléenne ressort, donc est-ce toi qui a fait une erreur de recopie de ton code ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut

    Je vois deux solutions possibles
    • Mettre une variable Boolean public dans un module, nommé DelByCode par exemple. Ensuit avant de supprimer une ligne, tu passes la valeur de DelByCode à true, puis à false à la ligne suivante
      • Dans le code de mise à jour de la date, tu vérifie que DelByCode est à False (S'il est est à True, c'est que la demande de modification de date est liée à une suppression de ligne)

    • Sinon, peut-être en mettant Application.EnableEvents à False avant la ligne de suppression et à True après la suppression. Attention de faire une gestion d'erreur pour remettre EnabledEvents à True quoiqu'il arrive durant l'exécution du code.


    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Enseignant chercheur à la retraite
    Inscrit en
    Mai 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Enseignant chercheur à la retraite

    Informations forums :
    Inscription : Mai 2020
    Messages : 7
    Par défaut
    Bonjour,

    Lorsqu'on supprime toute la ligne, l'argument target de la procédure Worksheet_Change correspond à une plage de cellules (une ligne entière).
    Une solution serait alors de tester cet argument pour savoir s'il correspond à une cellule unique ou à une plage de plusieurs cellules (par exemple tester la présence d'un double-point dans son adresse).
    Mais un moyen plus simple est d'utiliser la propriété count comme je l'ai fait dans l'exemple ci-dessous.
    Ainsi, dès qu'on modifie ou supprime plus d'une cellule à la fois, il ne se passera rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count > 1 Then Exit Sub
        If Target.Column = 2 Then Exit Sub
        Debug.Print Target.Address
        Debug.Print Target.Address
        Cells(Target.Row, 2) = Now
    End Sub
    Mais attention : il ne se passera rien non plus si la modification est faite par une recopie incrémentale de plus d'une cellule ou en modifiant plusieurs cellules à la fois avec Ctrl+Return, deux techniques qui sont tout de même assez largement utilisées. Donc ma solution n'est sans doute pas la panacée.

    NB. Dans le code ci-dessus, j'ai considéré que la date était mise en colonne 2. La deuxième ligne de code fait en sorte qu'il ne se passe rien si la modification est faite dans cette colonne (sinon on rentre dans une boucle sans fin ) .

Discussions similaires

  1. [XL-2019] Interdire l'insertion et la suppression d'une ligne sur une plage donnée - Excel VBA
    Par RJSCVF dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/09/2019, 12h49
  2. Réponses: 9
    Dernier message: 29/08/2016, 14h15
  3. [XL-2010] Suppression d'une ligne en VBA
    Par proto38 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/08/2012, 10h59
  4. suppression d'une ligne dans un fichier XML EN VBA
    Par newcodeur dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 10/07/2008, 16h00
  5. Réponses: 6
    Dernier message: 04/03/2004, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo