ouvrir le fichier suivant

  • Initiateur de la discussion Initiateur de la discussion simonbaron
  • Date de début Date de début

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 !

S

simonbaron

Guest
Bonjour,

Petit problème. Ma macro doit ouvrir dans le même classeur plusieurs fichiers, et copier certaines cellules afin de les coller dans un fichier global ("global.xls"). Comment je peux lui dire "Si tu ne trouve pas ce fichier, dans "global.xls" descend de X lignes et passe au fichier suivant". Je vous joins une partie de ma macro:

Workbooks.Open ("V:\....\CHINA.xls")
Range("IV3").End(xlToLeft).Select
Range(Selection, Selection.Offset(12, -2)).Select
Selection.Copy
Windows("global.xls").Activate
ActiveSheet.Paste
ActiveCell.Offset(13, 0).Range("A1").Select
Windows(“CHINA.xls").Activate
ActiveWindow.Close

Workbooks.Open ("V:\...\ CROATIA.xls")
Range("IV3").End(xlToLeft).Select
Range(Selection, Selection.Offset(12, -2)).Select
Selection.Copy
Windows("global.xls").Activate
ActiveSheet.Paste
ActiveCell.Offset(13, 0).Range("A1").Select
Windows(“CROATIA.xls").Activate
ActiveWindow.Close

Dans ce cas là, je voudrais lui dire: "Si le fichier "CHINA" n'existe pas, dans le fichier "global" descend de 13 lignes et passe au fichier "CROATIA". Mais comme il y aura 30 fichiers, est-ce qu'il est possible de lui donner une comande plus générique (genre "si CE fichier n'existe pas, ....., ouvre le fichier qui vient après dans la liste").

Merci beaucoup
 
Re : ouvrir le fichier suivant

Bonjour,


La fonction DIR peut t'aider, elle sert à vérifier l'existance d'un fichier.

CheminFichier = V:\...\ CROATIA.xls (C'est un exemple)

If Dir(CheminFichier) <> "" Then

...
...
...

else

...
...
...
end if


(si CheminFichier est différent de rien) si oui c'est que ton fichier existe donc, importation. si non c'est qu'il existe pas, rechercher le fichier suivant).

Cordialement
 
Re : ouvrir le fichier suivant

bonjour,

ceci à tester :
VB:
sub mouarf()
dim c as range
Fichiers = array("CROATIA.XLS", "CHINA.XLS", "MARS.XLS"...) 'Placer les noms des fichiers
set c= Range("A2") ' 1ère cellule où viennent se coller les exports
for t= lbound(Fichiers) to ubound(fichiers)
if dir("V:\...\" & Fichiers(t)) <>"" then 
   workbooks(fichiers(t)).open  range(Range("IV3").End(xlToLeft),Range("IV3").End(xlToLeft).offset(12,-2)).copy c
   workbooks(fichiers(t)).close 
end if
set c=c(14,1)
next t
end sub
 
Re : ouvrir le fichier suivant

Bonjour Simonbaron et bienvenu, Vorens, bonjour le forum,

Une proposition mas je vient de voir que Softmama m'a grillé avec un code similaire au mien... Le sien est mieux mais comme j'ai commenté le mien je te le donne quand même. Comme je ne savais pas comment alimenter le tableau de variables tbc car je manquais d'élément, je suis parti du code sans cette partie...
Code:
Sub Macro1()
Dim tbc(29) As String 'déclare le tableau de variables tbc (TaBleau des Classeurs)
Dim cb As Range 'déclare la variable cb (Cellule de Base)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)
 
'manque la partie d'alimentation du tableau tbc...
 
Set dest = Workbooks("global.xls").Sheets(1).Range("A1") 'définit la cellule de destination
For x = 0 To UBound(tbf) 'boucle sur tous les classseur à ouvrir
    On Error Resume Next 'gestion des erreur, en cas d'erreur passe à la ligne suivante
    Workbooks.Open (tbf(x))
    If Err > 0 Then 'condition : si une érreur a été générée
        Err = 0 'annulle l'erreur
        GoTo suite 'va à l'étiquette suite
    End If 'fin de la condition
    Set cb = Range("IV3").End(xlToLeft) 'définit la cellule de base
    Range(cb, cb.Offset(12, -2)).Copy dest 'copie la plage par rapport à la cellule de base dans la cellule de destination
    Workbooks("CHINA.xls").Close 'ferme le classeur
suite: 'étiquette
    Set dest = dest.Offset(13, 0) 'redéfinit la cellule de destination
Next x
End Sub
 
Re : ouvrir le fichier suivant

Merci à tous pour votre rapidité! du coup j'ai essayé le code de Softmama mais il me dit qu'il y a une erreur de syntaxe à la ligne

workbooks(fichiers(t)).open range(Range("IV3").End(xlToLeft),Range("IV3").End(xlToLeft).offset(12,-2)).copy c

Vous voyez quelque chose qui cloche?
Question: la macro que tu as écrite va remplacer la totalité de ma macro? c'est à dire que je n'ai plus besoin d'avoir un "bloc" par fichier?

Merci encore
 
Re : ouvrir le fichier suivant

re,

il doit manquer le chemin, remplace la ligne
Code:
workbooks(fichiers(t)).open
par :
Code:
workbooks("V:\...\" & fichiers(t)).open
en mettant le bon chemin.

Et oui, ce code devrait de permettre de remplacer l'ensemble de tes blocs.
 
Re : ouvrir le fichier suivant

Pas encore, maintenant il me dit qu'il y a une erreur de compilation dans la même ligne... peut être c'est la "c" après Copy qui pose problème? voilà comment j'avais modifié

Dim c As Range
fichiers = Array("CHINA.XLS", "CROATIA.XLS", "UK.XLS")
Set c = Range("A1")
For t = LBound(fichiers) To UBound(fichiers)
If Dir("V:\DSFS\SEG\OPE\03_KRI\2011\T2\ALD\" & fichiers(t)) <> "" Then
Workbooks("V:\DSFS\SEG\OPE\03_KRI\2011\T2\ALD\" & fichiers(t)).Open Range(Range("IV3").End(xlToLeft), Range("IV3").End(xlToLeft).Offset(12, -2)).Copy c
Workbooks("V:\DSFS\SEG\OPE\03_KRI\2011\T2\ALD\" & fichiers(t)).Close
End If
Set c = c(14, 1)
Next t
 
Re : ouvrir le fichier suivant

re,

oui, j'ai fait n'importe quoi là, la bonne syntaxe est :
VB:
Dim c As Range, chemin as string
chemin = "V:\DSFS\SEG\OPE\03_KRI\2011\T2\ALD\"
fichiers = Array("China.xls", "Croatia.xls", "UK.xls")
Set c = Range("A1")
For t = LBound(fichiers) To UBound(fichiers)
If Dir(chemin & fichiers(t)) <> "" Then
  Workbooks.Open chemin & fichiers(t)
Range(Range("IV3").End(xlToLeft), Range("IV3").End(xlToLeft).Offset(12, -2)).Copy c
Workbooks(fichiers(t)).Close
End If
Set c = c(14, 1)
Next t
 
Re : ouvrir le fichier suivant

Merci beaucoup, ça marche!
Juste quelques modifs:
- je voudrais mettre un collage spécial pour coller seulement les valeurs (il y a des formules dans les tableaux), où je peux ajouter une ligne genre

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

- on me demande à chaque fois si je veux enregistrer les modifs aux fichiers, mais c'est inutile, comment enlever ce message?
- les fichiers seront ouverts dans l'ordre avec lequel je les écris en ligne 3?

Merci beaucoup
 
Re : ouvrir le fichier suivant

Re,

modifie la macro ainsi :
VB:
Dim c As Range, chemin as string
chemin = "V:\DSFS\SEG\OPE\03_KRI\2011\T2\ALD\"
fichiers = Array("China.xls", "Croatia.xls", "UK.xls")
Set c = Range("A1")
For t = LBound(fichiers) To UBound(fichiers)
If Dir(chemin & fichiers(t)) <> "" Then
  Workbooks.Open chemin & fichiers(t)
Range(Range("IV3").End(xlToLeft), Range("IV3").End(xlToLeft).Offset(12, -2)).Copy
c.pastespecial Paste:=xlpasteValues
Workbooks(fichiers(t)).Close false
End If
Set c = c(14, 1)
Next t

et oui, ils sont copiés dans l'ordre trouvé dans le Array(...)
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
11
Affichages
850
L
Réponses
9
Affichages
1 K
  • Question Question
Microsoft 365 Programme trop lent
Réponses
12
Affichages
1 K
J
Réponses
22
Affichages
3 K
jui42
J
A
Réponses
2
Affichages
1 K
AlexAGEMS
A
Retour