VBA - Renommer des fichiers avec le contenu d'une cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

varchamb

XLDnaute Nouveau
Bonjour Forum,

Il y a bcp de sujet sur le thème que je propose, mais aucun ne fait exactement ce que je souhaiterai. et malheureusement, adapter une macro n'est pas aussi facile que je le pensais au début (je suis novice en VBA).

J'aimerai simplement renommer un nombre de fichiers importants par le contenu de leur cellule respective C5. Mettons que ces fichiers soient tous contenus ds un dossier nommé "archive".

Merci d'avance à tous ceux qui prendront le temps de m'aider,

Cdlt,

Varchamb
 
Re : VBA - Renommer des fichiers avec le contenu d'une cellule

Merci Barbatruc.

J'ai testé ton fichier et il semble que celui-ci procède en trois étapes (trois macros différentes) :
1/ une liste des noms de fichiers à renommer est créée,
2/ une liste des cellules C5 de chaque fichier est créée,
3/ enfin, la troisième macro renomme les fichiers par le contenu de la cellule C5 (d'après les 2 listes établies précédemment).

Malheureusement, seule la première macro fonctionne ds mon cas. Il y a un bog sur la 2ème, et aussi sur la 3ème. J'ai regardé l'écriture des macros, je ne me sens pas capable d'améliorer la chose.
Quelqu'un a-t-il une autre solution ?
 
Re : VBA - Renommer des fichiers avec le contenu d'une cellule

Re

En cas de problèmes:

Dans le dosssier C:\temp" Crée 5 fichiers nommer Fichier1.xlsm à Fichier5.xlsm. Sur chaque fichier en C5, écrit 1 pour le fichier 1, 2 pour le fichier 2... jusqu'au fichier 5.

Ensuite reteste les 3 macros en suivant les instructions. Qu'en est-il ?
 
Re : VBA - Renommer des fichiers avec le contenu d'une cellule

Voici peut-être quelques éléments pour aider :

-le message d'erreur qui s'affiche est : "Erreur d’exécution 1004
P:\enquête jh\Test avec Mireille\Archive\introuvable. Vérifiez l’orthographe du nom du classeur et la validité de l’emplacement."

-le débogueur surligne la 3ème ligne de la 2ème macro : Workbooks.Open Filename:=Cells(1, 2) & "\" & cell

Bien à vous
 
Re : VBA - Renommer des fichiers avec le contenu d'une cellule

OK ça marche super bien !!!
Il faut juste sélectionner les colonnes A et B avant d'activer les macros 2 et 3. Tu avais pourtant bien pris soin de l'écrire sur les boutons des macros MJ13 mais je n'avais pas lu.

MERCI BEAUCOUP !!!
 
Re : VBA - Renommer des fichiers avec le contenu d'une cellule

Il y a toutefois une petite chose que j'aimerai améliorer sur la macro n° 2. Celle-ci ouvre les fichiers les uns après les autres pour aller chercher les données. Etant donné que je vais avoir un grand nombre de fichier à renommer, est il possible de faire en sorte que la valeur de la cellule C5 soit extraite sans ouvrir les fichiers un à un ?

J'essaie de m'inspirer d'une autre macro qui compil des données (sans ouvrir les fichiers où elle va les chercher) mais en vain mes connaissances en VBA ne sont pas suffisantes pour l'adapter.

Voici la macro en question :
Code:
Sub Macro1()
Application.ScreenUpdating = False
pfile = ActiveWorkbook.Path & "\archive\" 'indiquer ici le chemin du répertoire
nfile = Dir(pfile)
i = 2
Do Until nfile = ""
    Cells(i, 8).FormulaArray = "=COUNTA('" & pfile & "[" & nfile & "]FORMULAIRE'!$C$18:C118)"
    For j = 1 To Cells(i, 8)
        Cells(i, 1) = Year(Date)
        Cells(i, 2) = Int((Month(Date) + 2) / 3)
        Cells(i, 3) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$4"
        Cells(i, 4) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$5"
        Cells(i, 5) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$B$" & j + 17
        Cells(i, 6) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$" & j + 17
        Cells(i, 7) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$E$" & j + 17
        i = i + 1
    Next
    nfile = Dir()
Loop
Columns(8).Cells.Clear
With Range("A2:G" & Range("A65000").End(xlUp).Row)
    .Value = .Value
End With
End Sub

et voici la macro à améliorer :
Code:
Sub ExtraitC5()
'Sélectionner les noms des fichiers à extraire
For Each cell In Selection
Workbooks.Open Filename:=Cells(1, 2) & "\" & cell
Workbooks(ThisWorkbook.Name).Sheets(1).Range(cell.Address).Offset(0, 1) = ActiveSheet.Cells(5, 3)
'Stop
    ActiveWindow.Close False
Next
End Sub

Merci d'avance
 
Re : VBA - Renommer des fichiers avec le contenu d'une cellule

Bonjour Varchamb

Et merci pour ton code intéressant sans ouvrir le fichier 🙂. En plus je n'utilise jamais cette méthode par manque de connaissance sur ce point.

Bon après, si tu comprends un peu l'anglais, c'est assez simple à comprendre 😱.

Cela pourrait donner ceci:

Code:
Sub ExtraitC5Bis()
'Sélectionner les noms des fichiers à extraire
Application.ScreenUpdating = False
pfile = Cells(1, 2) & "\" 'ActiveWorkbook.Path & "\archive\" 'indiquer ici le chemin du répertoire
'nfile = Dir(pfile)
For Each cell In Selection
nfile = cell 'Dir(pfile)
Workbooks.Open Filename:=Cells(1, 2) & "\" & cell
'Workbooks(ThisWorkbook.Name).Sheets(1).Range(cell.Address).Offset(0, 1) = ActiveSheet.Cells(5, 3)
Workbooks(ThisWorkbook.Name).Sheets(1).Range(cell.Address).Offset(0, 1) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$5"
'Stop
    ActiveWindow.Close False
Next
Application.ScreenUpdating = True
End Sub
 
Dernière édition:
Re : VBA - Renommer des fichiers avec le contenu d'une cellule

Bravo MJ13. Ca fonctionne super bien ... et pour moi ça ne me semble pas facile : j'en conclus que je ne comprends pas l'anglais 🙂

Si tu veux un nouveau défi : faire la même chose mais en une seule macro ... A toi de jouer.

Merci bcp pour ce que tu as fait.

Bonne continuation
 
Re : VBA - Renommer des fichiers avec le contenu d'une cellule

J'aimerai adapter ta formule à mon cas particulier : il est possible que la cellule C5 des feuilles "FORMULAIRES" dont il faut extraire les données soit vide et dans ce cas il faudrait prendre la cellule C6.
Je pensais pouvoir réussir à intégrer cela en ajoutant cette phrase de code :
Code:
If range((i, 2) = 0 Then Cells(i, 2) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$6"

juste après cette phrase :
Code:
Workbooks(ThisWorkbook.Name).Sheets(1).Range(cell.Address).Offset(0, 1) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$5"

Mais ce ne fonctionne pas. Quelqu'un peut il m'expliquer pourquoi ?
 
Re : VBA - Renommer des fichiers avec le contenu d'une cellule

Bonjour Varchamb

Pour tes 2 problèmes:

1)automatiser l'enchaînement de macro, tu crées un code de ce type:

Code:
Sub Auto
Macro1
Code pour sélectionner les cellules de la première colonne
Macro2
Code pour sélectionner les cellules de la seconde colonne
Macro3

En adaptant les noms à tes macros. Pour rechercher les cellules d'une colonne, on peut utiliser un code de ce type:

Code:
derl = Cells(655536, 1).End(xlUp).Row
MsgBox derl
Range(cells(2,1)cells(derl,1)).Select

2) Pour le problème de la valeur que prend If range((i, 2) = 0 . Par contre si la cellule est vide j'aurais mis = "".

Pour ce second problème, comme dans 90 % des cas, il faut debugger ton programme. Tu places un stop dans le code puis tu regardes avec F8 pour aller en mode pas à pas la valeur que prennent tes variables en cliquant dessus.
Souvent il faut tester avec .value, .text ou autres joyeusetés du langage VBA.
 
Dernière édition:
Re : VBA - Renommer des fichiers avec le contenu d'une cellule

J'ai cherché pendant 2 heures, tout changé et rechangé, essayé de nouvelles choses ... mais je m'avoue vaincu. J'en arrive à ça. Ca me permet d'aller chercher C5 mais toujours pas C6. Conclusion : toutes mes modifications n'ont rien apporté (mais rien détraqué non plus). Quelqu'un a-t-il une solution ?

Code:
Workbooks.Open Filename:=Cells(1, 2) & "\" & cell
    If Worksheets("FORMULAIRE").Range("A5").Value = "" Then
    Workbooks(ThisWorkbook.Name).Sheets(1).Range(cell.Address).Offset(0, 1) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$6"
    Else
    Workbooks(ThisWorkbook.Name).Sheets(1).Range(cell.Address).Offset(0, 1) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$5"
    End If
    ActiveWindow.Close False
Next
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
1 K
Retour