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 :

Suppression ligne en fonction de la date


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut Suppression ligne en fonction de la date
    Bonjour à tous,
    J'ai créé un code qui me permet de supprimer une ou des lignes en fonction de la date et je l'ai placé dans chaque feuille, ce code fonctionne bien mais j'aimerais modifier ou adapter ce dernier pour qu'il s'exécute automatiquement à l'ouverture du fichier excel, j'ai trois feuilles dans le fichier excel et j'aimerais que cela s'exécute sur les trois à l'ouverture du fichier excel, d'avance merci beaucoup.

    Ci-après le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub Airfields()
    Application.ScreenUpdating = False
    '
    iRep = vbYes
    If iRep = 6 Then
        iRow = Range("A" & Rows.Count).End(xlUp).Row
        For x = iRow To 3 Step -1
            If Cells(x, 3) <> "" And Cells(x, 3) < Date Then
                If DateDiff("d", CDate(Cells(x, 3)), Date) >= 1 Then
                    iFlag = Range("C" & x).MergeArea.Rows.Count - 1
                    Rows(x & ":" & x + iFlag).Delete shift:=xlUp
                End If
            End If
       Next
    End If
    '
    Application.ScreenUpdating = True
    '
    End Sub

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Points : 602
    Points
    602
    Par défaut
    Salut, il faut modifier ta macro pour qu'en entrée tu puisse définir une variable objet worksheet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub Airfields(MySh As Worksheet)
    Application.ScreenUpdating = False
    '
    iRep = vbYes
    If iRep = 6 Then
        iRow = MySh.Range("A" & MySh.Rows.Count).End(xlUp).Row
        For x = iRow To 3 Step -1
            If MySh.Cells(x, 3) <> "" And MySh.Cells(x, 3) < Date Then
                If DateDiff("d", CDate(MySh.Cells(x, 3)), Date) >= 1 Then
                    iFlag = MySh.Range("C" & x).MergeArea.Rows.Count - 1
                    MySh.Rows(x & ":" & x + iFlag).Delete shift:=xlUp
                End If
            End If
       Next
    End If
    '
    Application.ScreenUpdating = True
    '
    End Sub
    De la si la structure de tes feuilles sont les mêmes tu peux faire des appels, ici en ouvrant le fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_Open()
    Airfields Feuil1
    Airfields Feuil2
    Airfields feuil3
    End Sub
    PS : Feuil1, Feuil2 et Feuil3 sont des codeName

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 754
    Points : 28 605
    Points
    28 605
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Lorsqu'une procédure doit être utilisée pour différents cas (ici pour trois feuilles), il est préférable de prévoir un argument qui dans ce cas précis sera de type "Worksheet" que l'on invoque à chaque fois que l'on en a besoin.
    Ainsi si vous souhaitez que la procédure soit invoquée à l'ouverture du classeur et quelle agisse pour les trois feuille, il suffit de prévoir une boucle depuis la procédure événementielle Workbook_Open

    Un exemple pour une procédure nommée RemoveRowsByDate qui est invoquée pour les feuilles nommées Janvier, Février et Mars
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_Open()
      Dim sht As Worksheet
      For Each sht In Me.Worksheets
        Select Case LCase(sht.Name)
          Case "janvier", "février", "mars"
            RemoveRowsByDate sht
        End Select
      Next
    End Sub

    Exemple
    de la procédure avec argument
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub RemoveRowsByDate(oSheet As Worksheet)
        '
        ' Ici le code
        '
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup Christian, tout fonctionne parfaitement.
    You're the best!

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Merci Philippe!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Coloration d'une ligne en fonction d'une date base Mysql
    Par pombela dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/04/2011, 16h29
  2. [XL-2003] supprimer une ligne en fonction d'une date
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/05/2010, 20h55
  3. VBS - Suppression ligne en fonction d'un texte
    Par arnaudbzh dans le forum VBScript
    Réponses: 1
    Dernier message: 09/07/2009, 13h42
  4. suppression fichier en fonction d'une date
    Par kalyparker dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 02/07/2007, 14h19
  5. Recherche une ligne en fonction d'une date
    Par c+cool dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/09/2006, 15h30

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