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 classeur suivant valeur cellule [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut Supprimer classeur suivant valeur cellule
    Bonjour,

    J'ai une macro qui me permet d'ouvrir des classeurs dans un dossier suivant la valeur d'une cellule comme nom de référence et j'aimerai supprimer ces classeurs si à l'intérieur de ces classeurs une cellule est identique à une autre.

    Voilà le code en question :

    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
    ReDim T(0 To 0)
    Dim I As Long
    Set CS = Workbooks("EXEMPLE")
    Set OS = CS.Worksheets("TEST")
    ScanFolder T, "U:\Public", OS.Range("D6").Value & "*.xls*", False
    If Not IsEmpty(T(0)) Then
    UserForm47.Show
    For I = 0 To UBound(T)
    Workbooks.Open T(I)
    Worksheets(2).Activate
    Set ma = Range("C6").MergeArea
    If ma.Address = "$C$6:$D$6" And Range("C6").Value Like "*" & OS.Range("D8").Value & "*" Then
    ' supprimer le fichier
    End If
    Next I
    Else
    UserForm48.Show
    End If
    Avec la fonction Kill cela doit être possible ?

    Merci d'avance !

  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 169
    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 169
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avec la fonction Kill cela doit être possible ?
    La réponse est oui mais il ne faut pas oublier de le fermer avant de le supprimer
    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
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    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 121
    Par défaut
    SAlut

    Attention
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If ma.Address = "$C$6:$D$6" And Range("C6").Value Like "*" & OS.Range("D8").Value & "*" Then
    Le second range testé n'est pas rattaché explicitement à un worksheet, ça sera le range de la feuille active qui sera pris en compte.
    Peut-être est-ce volontaire mais un conseil, il vaut mieux toujours spécifier explicitement sur quelle feuille on travaille... ça évite bien des entourloupes et des heures de recherche de bug.

    ++
    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
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    Citation Envoyé par Qwazerty Voir le message
    SAlut

    Attention
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If ma.Address = "$C$6:$D$6" And Range("C6").Value Like "*" & OS.Range("D8").Value & "*" Then
    Le second range testé n'est pas rattaché explicitement à un worksheet, ça sera le range de la feuille active qui sera pris en compte.
    Peut-être est-ce volontaire mais un conseil, il vaut mieux toujours spécifier explicitement sur quelle feuille on travaille... ça évite bien des entourloupes et des heures de recherche de bug.

    ++
    Qwaz
    Salut,

    Oui c'est volontaire, je travaille avec la feuille active, si correspondance alors supprimer ce classeur.

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    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 121
    Par défaut
    Salut

    C'est toi qui vois, de mon coté je gérerais plutôt ça comme ça afin d'éviter les ennuis...
    Un classeur qui bondi au 1er plan et que se retrouve tout massacré sans possibilité de retour en arrière... ça t'arrive une fois et après tu précises le classeur et la feuille sur laquelle tu veux travailler... Mais encore une fois, c'est toi qui vois

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    ReDim T(0 To 0)
    Dim I As Long
    Dim Classeur As String
    Dim WbClient As Workbook
        On Error Resume Next
            Set CS = Workbooks("EXEMPLE")
            Set OS = CS.Worksheets("TEST")
        On Error GoTo 0
     
        'On s'assure que OS existe
        If Not OS Is Nothing Then
            'On scan le repertoire
            ScanFolder T, "U:\Public", OS.Range("D6").value & "*.xls*", False
            If Not IsEmpty(T(0)) Then
                'On ouvre le UF47 (un nom explicite serait plus pratique pour d'éventuellesfutures modifications(plus simple de s'y retrouver)
                UserForm47.Show
                'On boucle sur les noms de fichiers
                For I = 0 To UBound(T)
                    'On pointe le fichier
                    On Error Resume Next
                        Set WbClient = Workbooks.Open(T(I))
                    On Error GoTo 0
                    If Not WbClient Is Nothing Then
                        With WbClient
                            'On vérifie que la feuille 2 existe
                            If .Worksheets.Count > 1 Then
                                'On pointe la feuille
                                With .Worksheets(2)
                                    '.Worksheets(2).Activate
                                    'On pointe la cellule ...
                                    Set ma = .Range("C6").MergeArea
                                    If ma.Address = "$C$6:$D$6" And .Range("C6").value Like "*" & OS.Range("D8").value & "*" Then
                                        Classeur = WbClient.FullName
                                        WbClient.Close 'SaveChanges:=True 'Pourquoi le sauvegarder pour le détruire ensuite?
                                        Kill Classeur
                                        '? Si j'ai bien compris il s'agit de votre fichier "source" CS?
                                        'Application.ActiveWorkbook.Close False
                                        CS.Close False
                                    End If
                                End With
                            End If
                        End With
                    End If
                Next I
                Else
                UserForm48.Show
            End If
        End If
    Code non testé bien sûr
    ++
    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

  6. #6
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    Merci pour ton aide !
    Oui je vais faire les quelques modifications pour plus de sécurité, on n'est jamais trop prudent !

    Le fichier CS est celui qui sert à comparer les valeurs avec les autres fichiers qui seront ouverts puis détruits. C'est d'ailleurs depuis ce fichier que la macro est exécutée.

  7. #7
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    La réponse est oui mais il ne faut pas oublier de le fermer avant de le supprimer
    Merci pour la réponse !

    Du coup je rajoute ceci ?

    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
    ReDim T(0 To 0)
    Dim I As Long
    Dim Classeur As String
    Set CS = Workbooks("EXEMPLE")
    Set OS = CS.Worksheets("TEST")
    ScanFolder T, "U:\Public", OS.Range("D6").Value & "*.xls*", False
    If Not IsEmpty(T(0)) Then
    UserForm47.Show
    For I = 0 To UBound(T)
    Workbooks.Open T(I)
    Worksheets(2).Activate
    Set ma = Range("C6").MergeArea
    If ma.Address = "$C$6:$D$6" And Range("C6").Value Like "*" & OS.Range("D8").Value & "*" Then
    Classeur = Application.ActiveWorkbook.FullName
    ActiveWorkBook.Close SaveChanges:=True
    Kill Classeur
    Application.ActiveWorkbook.Close False
    End If
    Next I
    Else
    UserForm48.Show
    End If

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

Discussions similaires

  1. Filtre suivant valeur cellule
    Par Bzh_novice dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/08/2017, 18h27
  2. [XL-2010] Suppression colonne suivant valeur cellule 1ère ligne (en-tête)
    Par 2lester dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 18/08/2017, 21h11
  3. [XL-2013] Montrer/Cacher Bouton suivant Valeur Cellule
    Par Th0R3 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/10/2016, 13h04
  4. [XL-2003] Mise en forme conditonelle suivant valeur cellule supérieure
    Par jamesleouf dans le forum Excel
    Réponses: 3
    Dernier message: 09/04/2013, 16h09
  5. Supprimer ligne suivant valeur
    Par isarian dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/12/2011, 14h14

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