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 :

Supprimer toutes les dates par rapport à un mois/année VBA [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 5
    Par défaut Supprimer toutes les dates par rapport à un mois/année VBA
    Bonjour,

    Je cherche à créer une macro pour supprimer toutes les valeurs d'une BDD correspondant au mois affiché dans une feuille

    La date sélectionnée se trouve dans une feuille "Planning"

    Ma feuille "Data" contient toutes les dates de mes feuilles sur plusieurs années

    J'ai du mal avec la ligne If pour que le mois/année actif dans "Planning" soit la référence pour supprimer toutes les dates de ce mois/année dans ma feuille "Data"

    J'essaie d'adapter un code trouvé mais je me perds .....

    J'ai essayé de copier la date affichée dans Planning dans la feuille data en P1 donc 1,16 pour essayer mais nop

    SI quelqu'un a une idée je prends Merci

    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
    'supprimer uniquement le Mois en cours pour vider la feuille
     
    Sub MyDeleteRows()
     
    Dim lastrow As Long
    Dim i As Long
     
        With Sheets("Data")
            lastrow = Cells(Rows.Count, 2).End(xlUp).Row
            For i = lastrow To 2 Step -1
                If CDate(Cells(i, 5).Value) <= WorksheetFunction.EoMonth(Date, 0) Then Rows(i).EntireRow.Delete
            Next i
        End With
     
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 178
    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 : 13 178
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Lorsque l'on utilise un bloc With...End With, il y a lieu de relier les objets fils à l'objet parent
    Ainsi pour la ligne 7 de votre code il manque le point à l'objet Cells et à la propriété Rows
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lastrow = .Cells(.Rows.Count, 2).End(xlUp).Row
    vous devez le faire pour tous les Cells qui se trouvent dans le bloc
    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

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 5
    Par défaut
    Bonsoir merci des corrections

    Par contre je n'arrive pas à lui dire de supprimer toutes les dates enregistrées dans "Data" du mois en cours dans "Planning"

    Je rappelle mon objectif :

    Sur ma feuille planning j'ai un mois de sélectionné sur lequel je travaille si je vois que j'ai oublié certaines modifs à faire en amont j'aimerais vider la base de donnée de ce mois en question qui est dans une feuille "Data". Il faut donc que je sélectionne toutes les dates du mois concernées dans la feuille "Data" et quelles soient supprimées.

    Voici mes derniers essais qui vide tout. Je pense que je n'arrive pas à lui dire de supprimer toutes les lignes ayant le même mmmm aaaa que la cellule "P1" par exemple qui est dans "Data" pour mes essais ou carrément une cellule dans la feuille "Planning"

    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
    'supprimer uniquement le Mois en cours
     
    Sub MyDeleteRows()
     
    Dim lastrow As Long
    Dim i As Long
     
    With Sheets("Data")
            lastrow = .Cells(.Rows.Count, 2).End(xlUp).Row
            For i = lastrow To 2 Step -1
                If CDate(.Cells(i, 16).Value) <= WorksheetFunction.EoMonth(Date, 0) Then .Rows(i).EntireRow.Delete
            Next i
    End With
     
    End Sub

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 178
    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 : 13 178
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans cette ligne If CDate(.Cells(i, 16).Value) <= WorksheetFunction.EoMonth(Date, 0) Then .Rows(i).EntireRow.Delete, vous supprimez toutes les lignes dont la date située en colonne 16 est inférieure au 30/11/2022 (puisque aujourd'hui nous sommes le 19/11/2022) et sauf erreur de ma part la fonction CDate est parfaitement inutile si vous avez de véritable date dans cette colonne
    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

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 5
    Par défaut
    A effectivement ce n'est pas la bonne formule

    Ma colonne "A" de la feuille "Data" contient toutes les dates de ma base de donnée

    En P1 de la feuille "Data" j'ai rapporté la date du mois affiché dans la feuille "planning"

    Donc si je veux supprimer le mois de Novembre, je me mets sur le planning de novembre dans la feuille "planning" ce qui s'affiche en P1 feuille "Data" : Novembre 2022

    Et là j'aimerais pouvoir supprimer toutes les dates de novembre 2022 via une macro

    Peut être partir sur une sélection de toutes les dates ayant le même mois et année et tout supprimer ?

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 178
    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 : 13 178
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si la date se trouve en P1 et qu'il faut supprimer toutes les lignes qui contiennent en colonne A une date du même mois que la date en P1, je stockerais la valeur du mois de la date de P1 en début de procédure dans une variable (m par exemple) et s'il y a un risque d'avoir des dates de novembre (suivant l'exemple) d'une autre année, il faudrait alors stocker également l'année de P1 dans une variable

    Test à effectuer pour supprimer la ligne contenant le mois de novembre d'une autre année
    la variable m contient le numéro du mois de la date en cellule P1 (écrit de mémoire mais non testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Month(.Cells(i, 1).Value) = m Then .Rows(i).EntireRow.Delete

    Exemple ci-dessous avec un tableau structuré nommé t_Planning où l'on supprime toutes les lignes dont la date contenue dans la colonne "Date" est de la même année et du même mois que la date présente en P1
    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
    20
    21
    22
    23
    Sub DeleteRows()
      Const TableName As String = "t_Planning" ' Nom de la table
      Const LabelName As String = "Date"       ' Nom de la colonne à vérifier
      Dim rng As Range     ' Plage contenant les dates
      Dim sht As Worksheet ' Feuille où se trouve P1 et la table dont on supprime les lignes
      Dim m As Byte        ' N° du mois de la date en P1
      Dim y As Integer     ' N° de l'année de la date en P1
      Dim r As Long        ' N° de ligne
      Set sht = Range(TableName).ListObject.Parent
      Set rng = Range(TableName).ListObject.ListColumns(LabelName).DataBodyRange
      With sht.Range("P1")
        y = Year(.Value): m = Month(.Value)
      End With
      ' Boucle sur colonne Date
      With rng
        For r = .Rows.Count To 1 Step -1
          If m = Month(.Cells(r, 1).Value) And y = Year(.Cells(r, 1).Value) Then
             .ListObject.ListRows(r).Delete
          End If
        Next
      End With
      Set rng = Nothing: Set sht = Nothing
    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

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/01/2019, 09h58
  2. [XL-2007] Trouver toutes les dates des semaines de l'année
    Par apt dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/06/2012, 21h12
  3. Regrouper les données par rapport à la date
    Par goldeagle dans le forum Access
    Réponses: 7
    Dernier message: 11/12/2006, 15h35
  4. Problème de tri sur les dates par année puis mois
    Par rob2-9 dans le forum Access
    Réponses: 26
    Dernier message: 11/08/2006, 11h04
  5. [VBA-E] Sélectionner toutes les dates correspondantes à un mois choisit
    Par c_ffiiffii dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 10/06/2006, 11h00

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