Macro pour supprimer un fichier excel Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
James007
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'007
Appréciations reçues : 414
Inscrit le : 30 août 2014
Version d'Excel : 2007 EN

Message par James007 » 13 septembre 2017, 14:11

Sub MacroThauThème()
Dim CI As String        'définit le Chemin d'accès du dossier Initial
Dim SF As Object        'déclare la variable SF (Système de Fichiers)
Dim DI As Object        'déclare la variable DI (Dossier Initial)
Dim I As Integer        'déclare la variable I (Incrément)
Dim F As Object         'déclare la variable F (Fichier)
Dim TF()                'déclare la variable TF (Tableau des Fichiers)
Dim SD As Object        'déclare la variable SD (Sous-Dossiers)

CI = "C:\Users\"                                    'définit le chemin du dossier initial (à adapter) ''''''''''''''''''''
Set SF = CreateObject("Scripting.FileSystemObject") 'définit le système de fichier SF
Set DI = SF.GetFolder(CI)                           'définit le dossier initial
I = 1                                               'initialise la variable I
For Each F In DI.Files                              'boucle sur tous les fichiers F du dossier intial DI
   If Right(F.Name, 4) = "xlsm" Then               'condition : si les 3 derniers caractères du nom du fichier F sont "xlsm"
       ReDim Preserve TF(1 To 2, 1 To I)           'redimensionne le tableau des fichiers TF (2 lignes, I colonnes)
       TF(1, I) = DI.Name                          'récupère le nom du dossier dans la ligne 1
       TF(2, I) = F.Name                           'récupère le nom du fichier dans la ligne 2
       I = I + 1                                   'incrémente I (ajoute une colonne au tableau de fichiers TF)
   End If                                          'fin de la condition
Next F                                              'prochain fichier de la boucle
For Each SD In DI.SubFolders                        'boucle 1 : sur tous les sous-dossiers du dossier initial DI
   For Each F In SD.Files                          'boucle 2 : sur tous les fichiers du sous-dossier
       If Right(F.Name, 4) = "xlsm" Then           'condition : si les 3 derniers caractères du nom du fichier F sont "xlsm"
           ReDim Preserve TF(1 To 2, 1 To I)       'redimensionne le tableau des fichiers TF (2 lignes, I colonnes)
           TF(1, I) = DI.Name & "\" & SD.Name      'récupère le nom du sous-dossier dans la ligne 1
           TF(2, I) = F.Name                       'récupère le nom du fichier dans la ligne 2
           I = I + 1                               'incrémente I (ajoute une colonne au tableau de fichiers TF)
       End If                                      'fin de la condition
   Next F                                          'prochain fichier de la boucle 2
Next SD                                             'prochain sous-dossier de la boucle 1
If I > 1 Then                                       'condition : si au moins un fichier a été trouvé
   'renvoie dans la cellule A1 redimensionnée (autant de lignes que TF as de colonne, 2 colonnes) le tableau TF transposé
   Range("A1").Resize(UBound(TF, 2), UBound(TF, 1)).Value = Application.Transpose(TF)
End If                                              'fin de la condition
End Sub
A+

:)

Quand on n’a qu’un marteau, tous les problèmes deviennent des clous…
s
stepaustras
Membre fidèle
Membre fidèle
Messages : 197
Appréciations reçues : 2
Inscrit le : 12 mai 2015
Version d'Excel : 2007

Message par stepaustras » 13 septembre 2017, 14:17

Tu parles de cette ligne là mon fichier c'est là qu'il est déjà Nouveaudocumenttexte.txts mais C:\Users c'est un dossier windows
CI = "C:\Users\" 
Et avec le plantage ici
For Each F In SD.Files 
Et j'ai changé dans le code xlsm par txts
Et même en mettant un fichier excel .xlsm ça plante au même endroit.

Je me demande si ce code fonctionne plus sur des versions supérieur a excel 2007 ou pas
Avatar du membre
James007
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'007
Appréciations reçues : 414
Inscrit le : 30 août 2014
Version d'Excel : 2007 EN

Message par James007 » 13 septembre 2017, 14:58

Quelle est ta version d'Excel ...???
A+

:)

Quand on n’a qu’un marteau, tous les problèmes deviennent des clous…
s
stepaustras
Membre fidèle
Membre fidèle
Messages : 197
Appréciations reçues : 2
Inscrit le : 12 mai 2015
Version d'Excel : 2007

Message par stepaustras » 13 septembre 2017, 15:01

stepaustras a écrit :Je me demande si ce code fonctionne plus sur des versions supérieur a excel 2007 ou pas
2007 :mrgreen:
Avatar du membre
James007
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'007
Appréciations reçues : 414
Inscrit le : 30 août 2014
Version d'Excel : 2007 EN

Message par James007 » 13 septembre 2017, 15:04

Re,

Je viens de tester le code avec Excel 2007 ... et çà fonctionne ...

Maintenant ... peux tu poster l'entièreté du code que tu testes chez toi ... et qui plante ...
A+

:)

Quand on n’a qu’un marteau, tous les problèmes deviennent des clous…
s
stepaustras
Membre fidèle
Membre fidèle
Messages : 197
Appréciations reçues : 2
Inscrit le : 12 mai 2015
Version d'Excel : 2007

Message par stepaustras » 13 septembre 2017, 15:06

J'ai mis un fichier xlsm dans C:\Users
Sub MacroThauThème()
Dim CI As String        'définit le Chemin d'accès du dossier Initial
Dim SF As Object        'déclare la variable SF (Système de Fichiers)
Dim DI As Object        'déclare la variable DI (Dossier Initial)
Dim I As Integer        'déclare la variable I (Incrément)
Dim F As Object         'déclare la variable F (Fichier)
Dim TF()                'déclare la variable TF (Tableau des Fichiers)
Dim SD As Object        'déclare la variable SD (Sous-Dossiers)

CI = "C:\Users\"                                    'définit le chemin du dossier initial (à adapter) ''''''''''''''''''''
Set SF = CreateObject("Scripting.FileSystemObject") 'définit le système de fichier SF
Set DI = SF.GetFolder(CI)                           'définit le dossier initial
I = 1                                               'initialise la variable I
For Each F In DI.Files                              'boucle sur tous les fichiers F du dossier intial DI
  If Right(F.Name, 4) = "xlsm" Then               'condition : si les 3 derniers caractères du nom du fichier F sont "xlsm"
      ReDim Preserve TF(1 To 2, 1 To I)           'redimensionne le tableau des fichiers TF (2 lignes, I colonnes)
      TF(1, I) = DI.Name                          'récupère le nom du dossier dans la ligne 1
      TF(2, I) = F.Name                           'récupère le nom du fichier dans la ligne 2
      I = I + 1                                   'incrémente I (ajoute une colonne au tableau de fichiers TF)
  End If                                          'fin de la condition
Next F                                              'prochain fichier de la boucle
For Each SD In DI.SubFolders                        'boucle 1 : sur tous les sous-dossiers du dossier initial DI
  For Each F In SD.Files                          'boucle 2 : sur tous les fichiers du sous-dossier
      If Right(F.Name, 4) = "xlsm" Then           'condition : si les 3 derniers caractères du nom du fichier F sont "xlsm"
          ReDim Preserve TF(1 To 2, 1 To I)       'redimensionne le tableau des fichiers TF (2 lignes, I colonnes)
          TF(1, I) = DI.Name & "\" & SD.Name      'récupère le nom du sous-dossier dans la ligne 1
          TF(2, I) = F.Name                       'récupère le nom du fichier dans la ligne 2
          I = I + 1                               'incrémente I (ajoute une colonne au tableau de fichiers TF)
      End If                                      'fin de la condition
  Next F                                          'prochain fichier de la boucle 2
Next SD                                             'prochain sous-dossier de la boucle 1
If I > 1 Then                                       'condition : si au moins un fichier a été trouvé
  'renvoie dans la cellule A1 redimensionnée (autant de lignes que TF as de colonne, 2 colonnes) le tableau TF transposé
  Range("A1").Resize(UBound(TF, 2), UBound(TF, 1)).Value = Application.Transpose(TF)
End If                                              'fin de la condition
End Sub
Avatar du membre
James007
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'007
Appréciations reçues : 414
Inscrit le : 30 août 2014
Version d'Excel : 2007 EN

Message par James007 » 13 septembre 2017, 15:11

Merci ... c'est sympa ...

Procédons par ordre ...avant d'aller plus loin... sur ton ordinateur, le répertoire de base ... c'est

"C:\Users\"

ou

"C:\User\"

parce que ... malheureusement ... entre le singulier et le pluriel ... cela fait une grosse différence ...
A+

:)

Quand on n’a qu’un marteau, tous les problèmes deviennent des clous…
s
stepaustras
Membre fidèle
Membre fidèle
Messages : 197
Appréciations reçues : 2
Inscrit le : 12 mai 2015
Version d'Excel : 2007

Message par stepaustras » 13 septembre 2017, 15:13

Pour tous le monde c'est C:\Users un dossier original Windows non modifiable tu peux pas le renommer et tu peux pas en créer un autre avec le même nom à la racine de C logique lol et je n'ai pas de dossier "User" à la racine de C
Avatar du membre
James007
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'007
Appréciations reçues : 414
Inscrit le : 30 août 2014
Version d'Excel : 2007 EN

Message par James007 » 13 septembre 2017, 15:21

stepaustras a écrit :Pour tous le monde c'est C:\Users un dossier original Windows non modifiable tu peux pas le renommer et tu peux pas en créer un autre avec le même nom à la racine de C logique lol
Pour tout le monde ... tu devrais faire attention à ta façon de rédiger tes commentaires qui sous-entendent que tu écris à un imbécile ...qui ne comprend rien ...

Bon Courage pour la suite ...
A+

:)

Quand on n’a qu’un marteau, tous les problèmes deviennent des clous…
s
stepaustras
Membre fidèle
Membre fidèle
Messages : 197
Appréciations reçues : 2
Inscrit le : 12 mai 2015
Version d'Excel : 2007

Message par stepaustras » 13 septembre 2017, 15:22

Je dis pour tous le monde doit avoir ce dossier Users j'ai voulu le modifier ça marche pas d'ou ma conclusion.Parce que sur XP t'as pas Users :mrgreen:

Par contre ça ma donné une idée j'ai crée dossier User à la place avec mon fichier xlsm et la ça marche je vois bien dans le fichier excel qu'il a trouvé donc il me bloquerais à l'accès de C:\Users ???
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message