Aide VBA svp macro qui enregistre un contenu
Dernière réponse : dans Programmation
Bonjour
Je voudrais de l'aide pour faire une macro sur excel, celle-ci doit me mettre dans un tableau en memoire la liste des fichiers excel contenu dans un dossier.
merci de m'aider
Je voudrais de l'aide pour faire une macro sur excel, celle-ci doit me mettre dans un tableau en memoire la liste des fichiers excel contenu dans un dossier.
merci de m'aider
Autres pages sur : aide vba svp macro enregistre contenu
Lassé par la pub ? Créez un compte
lu j'ai peut etrte une solution pour toi :
Ce programme te permet de selectionner un dossier puis il t'informe du nombre de fichiers contenu dans ce dossier puis il met les nom des fichier dans un tableau j'espere que c sa que tu cherche
Option Explicit Public dossier Public Type BROWSEINFO hOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As Long lParam As Long iImage As Long End Type '32-bit API declarations Declare Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long Declare Function SHBrowseForFolder Lib "shell32.dll" _ Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long Function GetDirectory(Optional Msg) As String Dim bInfo As BROWSEINFO, path As String, r As Long, x As Long, pos As Integer bInfo.pidlRoot = 0& If IsMissing(Msg) Then bInfo.lpszTitle = "" Else bInfo.lpszTitle = Msg End If bInfo.ulFlags = &H1 x = SHBrowseForFolder(bInfo) path = Space$(512) r = SHGetPathFromIDList(ByVal x, ByVal path) If r Then pos = InStr(path, Chr$(0)) GetDirectory = Left(path, pos - 1) Else GetDirectory = "" End If End Function Sub File_Openen() Dim fs, i, namefile, FileNumber, specfichier, nbfiles, r, Srep, folder, ct dossier = GetDirectory("Choisit un dossier : ") If dossier <> "" Then Set fs = Application.FileSearch With fs .LookIn = dossier .SearchSubFolders = True .FileType = msoFileTypeAllFiles If .Execute() > 0 Then nbfiles = .FoundFiles.Count MsgBox "Il y a " & nbfiles & " Fichiers." For i = 1 To nbfiles specfichier = .FoundFiles(i) Range("A" & i) = specfichier Next i End If End With End If End Sub
Ce programme te permet de selectionner un dossier puis il t'informe du nombre de fichiers contenu dans ce dossier puis il met les nom des fichier dans un tableau j'espere que c sa que tu cherche
ah ok ben tu peux deja utiliser le debut puis changer le code entre la boucle for et tu y mets de style :
se qui donne :
cela ouvre tout les fichiers
Workbooks.Open Filename:=specfichier
se qui donne :
Option Explicit Public dossier Public Type BROWSEINFO hOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As Long lParam As Long iImage As Long End Type '32-bit API declarations Declare Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long Declare Function SHBrowseForFolder Lib "shell32.dll" _ Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long Function GetDirectory(Optional Msg) As String Dim bInfo As BROWSEINFO, path As String, r As Long, x As Long, pos As Integer bInfo.pidlRoot = 0& If IsMissing(Msg) Then bInfo.lpszTitle = "" Else bInfo.lpszTitle = Msg End If bInfo.ulFlags = &H1 x = SHBrowseForFolder(bInfo) path = Space$(512) r = SHGetPathFromIDList(ByVal x, ByVal path) If r Then pos = InStr(path, Chr$(0)) GetDirectory = Left(path, pos - 1) Else GetDirectory = "" End If End Function Sub File_Openen() Dim fs, i, namefile, FileNumber, specfichier, nbfiles, r, Srep, folder, ct dossier = GetDirectory("Choisit un dossier : " ) If dossier <> "" Then Set fs = Application.FileSearch With fs .LookIn = dossier .SearchSubFolders = True .FileType = msoFileTypeAllFiles If .Execute() > 0 Then nbfiles = .FoundFiles.Count MsgBox "Il y a " & nbfiles & " Fichiers." For i = 1 To nbfiles specfichier = .FoundFiles(i) Workbooks.Open Filename:=specfichier Next i End If End With End If End Sub
cela ouvre tout les fichiers
Non c'est bon j'ai reussi à ouvrir tout les fichiers d'un dossier
' Code Visual Basic anglais
Sub ouvrir_fichiers()
'l'instruction ChDir permet de se positionner
'sur un répertoire précis
ChDir "c:\test\"
monfichier = Dir("*.*")
While monfichier <> ""
Workbooks.Open monfichier
monfichier = Dir()
Wend
End Sub
Mais maintenant comment faire pour ajouter en haut de chaque fichiers sur la 1ere ligne une en-tete avec 5 noms de colonnes .
' Code Visual Basic anglais
Sub ouvrir_fichiers()
'l'instruction ChDir permet de se positionner
'sur un répertoire précis
ChDir "c:\test\"
monfichier = Dir("*.*")
While monfichier <> ""
Workbooks.Open monfichier
monfichier = Dir()
Wend
End Sub
Mais maintenant comment faire pour ajouter en haut de chaque fichiers sur la 1ere ligne une en-tete avec 5 noms de colonnes .
et lit l'aide :
http://www.presence-pc.com/forum/ppc/Programmation/Quelques-regles-simples-respecter-A-lire-avant-poster-sujet-1356-1.htm
sinon il y en a qui vont pas etre content
sinon tu fait ce code si :
et tu l'execute sur chaque fichier ouvert
http://www.presence-pc.com/forum/ppc/Programmation/Quelques-regles-simples-respecter-A-lire-avant-poster-sujet-1356-1.htm
sinon il y en a qui vont pas etre content
sinon tu fait ce code si :
Sub test() Dim i, nom, ct For i = 1 To 4 nom = InputBox(ct, "Nom de la colonne" & i & ":", "nom") If nom = "" Then Exit For Else Cells(1, i) = nom End If Next i end sub
et tu l'execute sur chaque fichier ouvert
Dixit moderator: chamakh51, fais comme les autres, présente ton code correctement. (Lire les règles, Merci).
Ce code ne date pas d'hier, la vache ! Des While/Wend
Evite la fonction ChDir. Mets plutôt le chemin dans la fonction Dir.
En plus tu as oublié de déclarer la variable monfichier
Comme ça:
Ce code ne date pas d'hier, la vache ! Des While/Wend
Evite la fonction ChDir. Mets plutôt le chemin dans la fonction Dir.
En plus tu as oublié de déclarer la variable monfichier
Comme ça:
Sub ouvrir_fichiers() Dim monfichier As String monfichier = Dir("c:\test\*.*" ) Do While monfichier <> "" Workbooks.Open monfichier ... monfichier = Dir() Loop End Sub
zeb mon code fonctionne pour ouvrir tout mes classeurs excel mais maintenant je voudrais pouvoir ajouter une ligne d'en tete en haut de chaque classeur qui s'ouvre!
En fait je reçois un classeur avec la colonne A pleine de code je veux une macro qui m'insere une ligne d'en-tete avec les propriétés suivantes ("no" en colonne A , "no_etud" en colonne B, "nom" en colonne 3, "prenom" en colonne 4) sur la 1ere ligne .
En fait je reçois un classeur avec la colonne A pleine de code je veux une macro qui m'insere une ligne d'en-tete avec les propriétés suivantes ("no" en colonne A , "no_etud" en colonne B, "nom" en colonne 3, "prenom" en colonne 4) sur la 1ere ligne .
Est-ce que quelqu'un peut m'adapter mon code pour que à chaque fois qu'un de mes fichiers s'ouvrent il y ajoute la ligne d'en-tete.
J'ai du mal avec les boucles.
J'ai du mal avec les boucles.
' Code Visual Basic anglais Sub ouvrir_fichiers() 'l'instruction ChDir permet de se positionner 'sur un répertoire précis ChDir "C:\Documents and Settings\.....\Bureau\test\originaux" monfichier = Dir("*.*") While monfichier <> "" Workbooks.Open monfichier monfichier = Dir() Range("A1").Select Selection.EntireRow.Insert Windows.Item(1).ActivateNext Range("A1:G1").Select Selection.Copy Windows.Item(1).ActivateNext ActiveSheet.Paste Windows.Item(1).ActivateNext Range("B2:G3").Select Application.CutCopyMode = False Selection.Copy Windows.Item(1).ActivateNext Range("B2").Select ActiveSheet.Paste Range("B2:G3").Select Application.CutCopyMode = False Application.CutCopyMode = False Selection.DataSeries Rowcol:=xlRows, Type:=xlLinear, Date:=xlDay, Step _ :=1, Trend:=False ActiveWindow.SmallScroll Down:=-3 Selection.AutoFill Destination:=Range("B2:G83"), Type:=xlFillDefault Range("B2:G83").Select Wend 'enquete_satisfaction()_ ' ' ' Touche de raccourci du clavier: Ctrl+p ' Range("A1").Select Selection.EntireRow.Insert Windows.Item(1).ActivateNext Range("A1:G1").Select Selection.Copy Windows.Item(1).ActivateNext ActiveSheet.Paste Windows.Item(1).ActivateNext Range("B2:G3").Select Application.CutCopyMode = False Selection.Copy Windows.Item(1).ActivateNext Range("B2").Select ActiveSheet.Paste Range("B2:G3").Select Application.CutCopyMode = False Application.CutCopyMode = False Selection.DataSeries Rowcol:=xlRows, Type:=xlLinear, Date:=xlDay, Step _ :=1, Trend:=False ActiveWindow.SmallScroll Down:=-3 Selection.AutoFill Destination:=Range("B2:G83"), Type:=xlFillDefault Range("B2:G83").Select End Sub
Mr Propre te propose :
Sub ouvrir_modifier_et_fermer_fichiers() Dim ClasseurDepart As Workbook Dim ClasseurAModifier As Workbook Set ClasseurDepart = Workbooks("nom du classeur de départ") monfichier = Dir("C:\Documents and Settings\.....\Bureau\test\originaux\*.*") Do While monfichier <> "" Set ClasseurAModifier = Workbooks.Open(monfichier) ClasseurAModifier.Worksheets(1).Rows(1).Insert ClasseurDepart.Worksheets(1).Range("A1:G1").Copy ClasseurAModifier.Worksheets(1).Range("A1:G1") ClasseurDepart.Worksheets(1).Range("B2:G3").Copy ClasseurAModifier.Worksheets(1).Range("B2:G3") ClasseurAModifier.Worksheets(1).Range("B2:G3").DataSeries Rowcol:=xlRows, Type:=xlLinear, Date:=xlDay, Step:=1, Trend:=False ClasseurAModifier.Worksheets(1).Range("B2:G3").AutoFill Destination:=Range("B2:G83"), Type:=xlFillDefault ClasseurAModifier.Save ClasseurAModifier.Close monfichier = Dir() Loop Set ClasseurAModifier = Nothing Set ClasseurDepart = Nothing End Sub
Zeb j'ai alors mon fichier excel avec mon en-tete en 1ere ligne sur 7 colonnes, puis une liste de codes en Colonne A, je voudrais pour la ligne 2 colonne B mettre le code 01 , pour la ligne 3 colonne B -> 02 ,pour la ligne 4 colonne B -> 03 .... jusqu'à ce que je n'ai plus de code en colonne A sachant que le nombre de lignes varient en fonction des fichiers. J'ai essayé avec une formule SI mais elle beug un peu.
Je ne sais pas si j'ai étais clair donc si tu peux m'aider ce serait sympa
merci
Je ne sais pas si j'ai étais clair donc si tu peux m'aider ce serait sympa
merci
Freeman23, pas de problème
ton attitude qui n'encourage pas à la fainéantise est plutôt dans l'esprit du forum, mais avec le module de recherche de PPC, il est pas au bout de ces peines. A moins de tout lire
chamakh51, fais le à la main avec l'enregistreur de macro démarré.
ton attitude qui n'encourage pas à la fainéantise est plutôt dans l'esprit du forum, mais avec le module de recherche de PPC, il est pas au bout de ces peines. A moins de tout lire
chamakh51, fais le à la main avec l'enregistreur de macro démarré.
Spoiler
Tu découvriras la fonction End.
Voici une partie de mon code :
' Code Visual Basic anglais Sub ouvrir_fichiers() 'l'instruction ChDir permet de se positionner 'sur un répertoire précis ChDir "C:\Documents and Settings\....\Bureau\test\originaux" monfichier = Dir("*.xls") While monfichier <> "" Workbooks.Open monfichier ...... ...... ActiveWorkbook.SaveAs Application.GetSaveAsFilename, Filename:=monfichier, ReadOnlyRecommended:=True ActiveWindow.ScrollRow = 1 Range("A1").Select monfichier = Dir() Wend End Sub
non c bon voice la solution :
' Code Visual Basic anglais Sub ouvrir_fichiers() Dim monfichier 'l'instruction ChDir permet de se positionner 'sur un répertoire précis ChDir "C:\Documents and Settings\....\Bureau\test\originaux" monfichier = Dir("*.xls") While monfichier <> "" Workbooks.Open monfichier ...... ...... ActiveWorkbook.SaveAs Filename:=monfichier, ReadOnlyRecommended:=True ActiveWindow.ScrollRow = 1 Range("A1").Select monfichier = Dir() Wend End Sub
hoegarden, fais-toi virer son salaire sur ton compte.
chamakh, appuye sur la touche F1, tu vas voir apparaître par magie une application qui s'appelle "Microsoft Visual Basic: Aide". Incroyable !
Dans ton éditeur VBA, écris "WorkBook". Sélectionne ce mot et appuye sur F1. Clique sur "Propriété". Tu vas obtenir la liste de toutes les propriétés d'un classeur. Dans tout ce bazar, je suis sûr que tu finiras par trouver quelque chose pour renvoyer le nom du classeur.
chamakh, appuye sur la touche F1, tu vas voir apparaître par magie une application qui s'appelle "Microsoft Visual Basic: Aide". Incroyable !
Dans ton éditeur VBA, écris "WorkBook". Sélectionne ce mot et appuye sur F1. Clique sur "Propriété". Tu vas obtenir la liste de toutes les propriétés d'un classeur. Dans tout ce bazar, je suis sûr que tu finiras par trouver quelque chose pour renvoyer le nom du classeur.
Toujours pas !
' Code Visual Basic anglais Sub ouvrir_fichiers() 'l'instruction ChDir permet de se positionner 'sur un répertoire précis ChDir "C:\Documents and Settings\....\Bureau\test\originaux" monfichier = Dir("*.xls") While monfichier <> "" Workbooks.Open monfichier 'Insertion d'une ligne sur la 1ere ligne Cells(1, 1).Select Selection.EntireRow.Insert 'Propriétés de l'en-tete (ligne, colonne) Cells(1, 1) = "no" Cells(1, 2) = "no_etud" Cells(1, 3) = "nom" Cells(1, 4) = "prenom" Cells(1, 5) = "prenom2" Cells(1, 6) = "salle" Cells(1, 7) = "place" 'compte le nombre de lignes Dim nbLignes As Long nbLignes = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row 'MsgBox "La dernière ligne contenant des données est la ligne " & nbLignes 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("B2").Select ActiveCell.FormulaR1C1 = "no_etud_01" Range("B3").Select ActiveCell.FormulaR1C1 = "no_etud_02" Range("B4").Select ActiveCell.FormulaR1C1 = "no_etud_03" Range("B2").Select Selection.AutoFill Destination:=Range("B2:B" & CStr(nbLignes)), Type:=xlFillDefault 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("C2").Select ActiveCell.FormulaR1C1 = "nom_01" Range("C3").Select ActiveCell.FormulaR1C1 = "nom_02" Range("C4").Select ActiveCell.FormulaR1C1 = "nom_03" Range("C2").Select Selection.AutoFill Destination:=Range("C2:C" & CStr(nbLignes)), Type:=xlFillDefault 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("D2").Select ActiveCell.FormulaR1C1 = "prenom_01" Range("D3").Select ActiveCell.FormulaR1C1 = "prenom_02" Range("D4").Select ActiveCell.FormulaR1C1 = "prenom_03" Range("D2").Select Selection.AutoFill Destination:=Range("D2:D" & CStr(nbLignes)), Type:=xlFillDefault 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("E2").Select ActiveCell.FormulaR1C1 = "prenom2_01" Range("E3").Select ActiveCell.FormulaR1C1 = "prenom2_02" Range("E4").Select ActiveCell.FormulaR1C1 = "prenom2_03" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E" & CStr(nbLignes)), Type:=xlFillDefault 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("F2").Select ActiveCell.FormulaR1C1 = "salle_01" Range("F3").Select ActiveCell.FormulaR1C1 = "salle_02" Range("F4").Select ActiveCell.FormulaR1C1 = "salle_03" Range("F2").Select Selection.AutoFill Destination:=Range("F2:F" & CStr(nbLignes)), Type:=xlFillDefault 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("G2").Select ActiveCell.FormulaR1C1 = "place_01" Range("G3").Select ActiveCell.FormulaR1C1 = "place_02" Range("G4").Select ActiveCell.FormulaR1C1 = "place_03" Range("G2").Select Selection.AutoFill Destination:=Range("G2:G" & CStr(nbLignes)), Type:=xlFillDefault ActiveWorkbook.Save ActiveWorkbook.SaveAs Filename:=monfichier ActiveWindow.ScrollRow = 1 Range("A1").Select monfichier = Dir() Wend End Sub
en fait le fichier qui est ouvert dans le dossier originaux je veux sauvegarder par dessu puisque dans ma macro je l'ai modifié, une fois sauvegardé dans "originaux", je veux qui'ils se sauvegardent dans un autre dossier qui s'apel "modifier" et par la suite je mettrais l'attribut texte comme je le veux en txt.
Mais le enregistrer-sous avec le nom du fichier en variable ne fonctionne pas
Mais le enregistrer-sous avec le nom du fichier en variable ne fonctionne pas
tiens et regarde si sa te convient
' Code Visual Basic anglais Sub ouvrir_fichiers() 'l'instruction ChDir permet de se positionner 'sur un répertoire précis ChDir "C:\Documents and Settings\boermansj\My Documents\test\" monfichier = Dir("*.xls") While monfichier <> "" Workbooks.Open monfichier 'Insertion d'une ligne sur la 1ere ligne Cells(1, 1).Select Selection.EntireRow.Insert 'Propriétés de l'en-tete (ligne, colonne) Cells(1, 1) = "no" Cells(1, 2) = "no_etud" Cells(1, 3) = "nom" Cells(1, 4) = "prenom" Cells(1, 5) = "prenom2" Cells(1, 6) = "salle" Cells(1, 7) = "place" 'compte le nombre de lignes Dim nbLignes As Long nbLignes = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row 'MsgBox "La dernière ligne contenant des données est la ligne " & nbLignes 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("B2").Select ActiveCell.FormulaR1C1 = "no_etud_01" Range("B3").Select ActiveCell.FormulaR1C1 = "no_etud_02" Range("B4").Select ActiveCell.FormulaR1C1 = "no_etud_03" Range("B2").Select Selection.AutoFill Destination:=Range("B2:B" & CStr(nbLignes)), Type:=xlFillDefault 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("C2").Select ActiveCell.FormulaR1C1 = "nom_01" Range("C3").Select ActiveCell.FormulaR1C1 = "nom_02" Range("C4").Select ActiveCell.FormulaR1C1 = "nom_03" Range("C2").Select Selection.AutoFill Destination:=Range("C2:C" & CStr(nbLignes)), Type:=xlFillDefault 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("D2").Select ActiveCell.FormulaR1C1 = "prenom_01" Range("D3").Select ActiveCell.FormulaR1C1 = "prenom_02" Range("D4").Select ActiveCell.FormulaR1C1 = "prenom_03" Range("D2").Select Selection.AutoFill Destination:=Range("D2:D" & CStr(nbLignes)), Type:=xlFillDefault 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("E2").Select ActiveCell.FormulaR1C1 = "prenom2_01" Range("E3").Select ActiveCell.FormulaR1C1 = "prenom2_02" Range("E4").Select ActiveCell.FormulaR1C1 = "prenom2_03" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E" & CStr(nbLignes)), Type:=xlFillDefault 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("F2").Select ActiveCell.FormulaR1C1 = "salle_01" Range("F3").Select ActiveCell.FormulaR1C1 = "salle_02" Range("F4").Select ActiveCell.FormulaR1C1 = "salle_03" Range("F2").Select Selection.AutoFill Destination:=Range("F2:F" & CStr(nbLignes)), Type:=xlFillDefault 'Recopie jusqu'à ce qu'il n'y est plus rien en colonne A Range("G2").Select ActiveCell.FormulaR1C1 = "place_01" Range("G3").Select ActiveCell.FormulaR1C1 = "place_02" Range("G4").Select ActiveCell.FormulaR1C1 = "place_03" Range("G2").Select Selection.AutoFill Destination:=Range("G2:G" & CStr(nbLignes)), Type:=xlFillDefault ActiveWorkbook.Save folder = InputBox(ct, "Entrer un nom pour creer un nouveau dossier : ", "nom dossier") MkDir ("C:\Documents and Settings\boermansj\My Documents\test\" & folder) ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\boermansj\My Documents\test\" & folder & "\" & monfichier ActiveWindow.ScrollRow = 1 Range("A1").Select monfichier = Dir() Wend End Sub
lol c bizzare parce que chez moi c marche comme il faut
ok pour le input donc tu l'enleve mais il faut que tu garde le "Mkdir"
pour qu'il se positionne dans le bon dossier puis tu remplace "folder" par la variable de ton dossier creer par l'autre macro et tu verifie si elle est bien en public
(attention zeb ne va pas etre content)
ok pour le input donc tu l'enleve mais il faut que tu garde le "Mkdir"
pour qu'il se positionne dans le bon dossier puis tu remplace "folder" par la variable de ton dossier creer par l'autre macro et tu verifie si elle est bien en public
(attention zeb ne va pas etre content)
Lassé par la pub ? Créez un compte