Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/11/2011, 16h20   #1
Membre régulier
 
Homme
Administratif
Inscription : avril 2002
Messages : 98
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administratif
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2002
Messages : 98
Points : 90
Points : 90
Par défaut Ouverture de plusieurs classeurs

Salut à tous, je souhaite ouvrir, un par un, tous les classeurs excel contenus dans un fichier.
(j'ai trouvé quelqu'un sur ce forum qui avait le même problème que moi, par contre il n'a pas indiqué si il avait trouvé une solution…)
Voici son post:http://www.developpez.net/forums/d11...-excel/limite-

ceci est le code que j'ai commencé.

Code :
1
2
3
4
5
6
7
Dim classeurs As Variant 'j'ai essayé avec object sans plus de résultat
For Each classeurs In Workbooks 
Workbooks.Open filename:=classeurs
    …. 'ici, le traitement à réaliser sur chaque onglet puis,...
    ActiveWorkbook.Save
    Workbooks.Close
Next classeurs
À l'éxécution, j'ai le méssage d'erreur suivant:
Citation:
Erreur 438: propriété ou méthode non générée par cet objet
.

Le problème se situe au niveau de: Workbooks.open filename.
Filename attent un nom de classeur, hors moi , je ne souhaite pas indiquer de nom de classeur, je souhaite tous les ouvrir, quelque soit leur nom.
__________________
Salut à tous et merci @++ yoyo3d
yoyo3d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 16h54   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Il faudrait revoir ta question .. un fichier Excel ne contient qu'un seul classeur !
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/11/2011, 17h12   #3
Membre régulier
 
Homme
Administratif
Inscription : avril 2002
Messages : 98
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administratif
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2002
Messages : 98
Points : 90
Points : 90
oups autant pour moi....
je souhaite ouvrir tous les classeurs excel contenus dans un "fichier" sous entendu un "dossier"...

Salut,
bon j'ai bricolé un p'tit peu en essayant plusieurs exemples trouvés sur ce forum

Code :
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
Sub Ouvrir_Fichier()
' Touche de raccourci du clavier: Ctrl+m
Dim Dossier As Object
Dim Repertoire As Object
Dim Chemin As String
 
Chemin = ThisWorkbook.Path & "\MaJ"
Set Repertoire = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
 
For Each Dossier In Repertoire.Files
    Workbooks.Open Filename:=Dossier
    ActiveWorkbook.Activate
 
'...
'selection des 12 onglets
'selection des différentes zones
'effacement des contenus de céllules
'...
 
ActiveWorkbook.Save
 
Workbooks.Close
Next Dossier
 
End Sub
j'ouvre bien le premier classeur contenu dans mon dossier, mais...

1) l'application ferme aprés le traitement du 1er classeur....(il y en a encore 200...)
pourtant avec ma boucle fo each / next, chaque classeur contenu dans mon dossier devrait etre ouvert 1 par 1...je ne vois pas ou est mon erreur.

2) je n'ai pas trouvé comment eviter le message "voulez vous enregistrer les modifications apportées"...
__________________
Salut à tous et merci @++ yoyo3d
yoyo3d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 09h40   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
La proposition précédente peut être subdivisée en 2, la première pour boucler sur tous les fichiers excel et les ouvrir et la deuxième traite le classeur ouvert (la 2 est appelée par le 1)
Code :
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
' Touche de raccourci du clavier: Ctrl+m
Sub Ouvrir_Fichier()
Dim Dossier As Object, Rep As Object
Dim Wbk As Workbook
Dim Chemin As String
Dim i As Integer
 
Application.ScreenUpdating = False
Chemin = ThisWorkbook.Path & "\MaJ"
Set Rep = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
 
For Each Dossier In Rep.Files
    'on ouvre seulement les fichiers xls* et csv
    If InStr("xlsm|xlsx|csv", Mid(Dossier, InStrRev(Dossier, ".") + 1)) > 0 Then
        Set Wbk = Workbooks.Open(Dossier)
        Call Traitement(Wbk)
        Set Wbk = Nothing
        i = i + 1
    End If
Next Dossier
Set Rep = Nothing
MsgBox "Tritement terminé pour " & i & "fichiers"
End Sub
 
'Procédure de triatement qui a comme paramètre lle Classeur Wb
'Exemple pour chaque feuille dans chaque fichier ouvert, on efface la plage A2:X200
Private Sub Traitement(Wb As Workbook)
Dim Ws As Worksheet
 
With Wb
    For Each Ws In .Worksheets
        Ws.Range("A2:X200").ClearContents
    Next Ws
    .Save
    .Close False
End With
 
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/11/2011, 10h20   #5
Membre régulier
 
Homme
Administratif
Inscription : avril 2002
Messages : 98
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administratif
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2002
Messages : 98
Points : 90
Points : 90
Bon ça marche,
par contre , je ne comprend pas cette ligne:

Code :
If InStr("xlsm|xlsx|csv", Mid(Dossier, InStrRev(Dossier, ".") + 1)) > 0 Then
ouvrir les fichiers XL, bon ok, mais faire un test sur le contenu du nom des classeurs??? j'ai pas tout compris...
__________________
Salut à tous et merci @++ yoyo3d
yoyo3d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 10h24   #6
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
il y avait une ligne de commentaire
Citation:
'on ouvre seulement les fichiers xls* et csv
C'était pour ouvrir seulement les fichiers (EXCEL) d'extension, xls, xlsm, xlsx ou csv
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/11/2011, 10h32   #7
Membre régulier
 
Homme
Administratif
Inscription : avril 2002
Messages : 98
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administratif
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2002
Messages : 98
Points : 90
Points : 90
oui oui, j'ai bien lu le com, mais c'est le "fonctionnement" du InStr /Mid /InstrRev qui m'interpelle...

InStr:
Renvoie une valeur de type Variant (Long) indiquant la position de la première occurrence d'une chaîne à l'intérieur d'une autre chaîne.
Syntaxe
Code :
InStr([start, ]string1, string2[, compare])
ton code:
Code :
InStr("xlsm|xlsx|csv", Mid(Dossier, InStrRev(Dossier, ".") + 1)) > 0
c'est la que je ne retrouve pas la syntaxe de Instr.

En tout cas un gros merci....
__________________
Salut à tous et merci @++ yoyo3d
yoyo3d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 10h39   #8
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
[start est facultatif.
Code :
Mid(Dossier, InStrRev(Dossier, ".") + 1)
donne l'extension du fichier (variable dossier)
Je cherche si l'extension de Dossier appartient "xlsm|xlsx|csv"
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/11/2011, 10h50   #9
Membre régulier
 
Homme
Administratif
Inscription : avril 2002
Messages : 98
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administratif
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : avril 2002
Messages : 98
Points : 90
Points : 90
haaaa ok...
Merci pour ton aide et tes explications.
__________________
Salut à tous et merci @++ yoyo3d
yoyo3d est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h38.


 
 
 
 
Partenaires

Hébergement Web