Importer une feuille Excel depuis un autre classeur

Patrice310

XLDnaute Nouveau
Bonsoir.

Je suis nouveau sur ce site et posséde malheureusement pas assez de notions Excel.
Aussi, j'espére trouver auprès de vous une réponse à mon petit soucis.

J'aimerai qu'une feuille (toujours nommée avec la même syntaxe) située dans un classeur (dont le nom n'est jamais le même mais qui contient bien cette fameuse feuille) s'importe dans une nouvelle feuille du classeur que j'ai crée.

J'imagine bien dans le classeur que j'ai crée un bouton macro "importer données" (ça je sais faire ;-))) qui ouvrirait une fenêtre à l'utilisateur lui demandant de sélectionner le classeur dans lequel se situe cette feuille à importer.

Au jour d'aujourd'hui, j'ouvre manuellement le classeur qui contient cette feuille et la déplace/copie dans mon classeur. Le probléme est que tous mes collégues ne savent pas forcément faire cette manip. Alors un bouton macro serait super et diminuerait les étapes pour eux.

J'espére que je suis à peu prés clair dans ce que je souhaite, si vous avez besoin de davantages d'infos, voir même de fichiers, n'hésitez pas.

Merci
 
Dernière édition:

Patrice310

XLDnaute Nouveau
Re : Importer une feuille Excel depuis un autre classeur

Merci pour la réponse !!!
Si j'ai bien compris, je lance l'enregistreur depuis le fichier que j'ai crée, et pendant qu'il enregistre, je vais chercer un des différents fichier qui contient cette fameuse feuille et la copie/déplace dans mon fichier ?
 

Patrice310

XLDnaute Nouveau
Re : Importer une feuille Excel depuis un autre classeur

Bonsoir.
Voici le code récupéré :

Sub IMPORTFEUILLEACTIVITES()
'
' IMPORTFEUILLEACTIVITES Macro
'

'
Sheets("Activités").Select
Sheets("Activités").Copy Before:=Workbooks( _
"EFFECTIF MOYEN.xls").Sheets(1)
Application.WindowState = xlMinimized
Application.WindowState = xlMinimized
End Sub

Le classeur contenant cette feuille "Activités" a un nom différent en fonction du client qui nous l'envoie et pour compliquer encore, chaque collégue utilisateur du fichier EFFECTIF MOYEN le stocke dans un répertoire qui lui est propre.
Selon moi, l'idéal serait l'ouverture d'une boite de dialogue proposant a l'utilisateur de sélectionner le fichier dans lequel se trouve la feuille "Activités". Une fois séclectionné, la macro copie cette feuille et l'insére dans le fichier EFFECTIF MOYEN.xls

Enfin si cela est techniquement possible bien sûr.

Merci.
 

Staple1600

XLDnaute Barbatruc
Re : Importer une feuille Excel depuis un autre classeur

Re

merci d'avoir tenter la manoeuvre

Selon moi, l'idéal serait l'ouverture d'une boite de dialogue proposant a l'utilisateur de sélectionner le fichier dans lequel se trouve la feuille "Activités".
Le forum a cela en magasin.

Tu trouveras des exemples en utilisant la loupe en haut à droite.

EDITION: Je te mets un exemple tout simple pour afficher une telle boite de dialogue
(ensuite il restera à créer tout le code qui va autour)
Code:
Sub Test()
Dim objSh, objDoss
Set objSh = _
    CreateObject("Shell.Application")
    Set objDoss = _
    objSh.BrowseForFolder(&H0&, "Choisir un dossier", &H1&, "")
End Sub
 
Dernière édition:

Patrice310

XLDnaute Nouveau
Re : Importer une feuille Excel depuis un autre classeur

Merci beaucoup !!!
effectivement j'ai bien gratté sur le site et j'ai trouvé plusieurs discussions qui s'en approchées mais pas exactement ce que je souhaiterai....
en attendant voici ce que j'ai trouvé :

Sub Macro2()
Dim vrtSelectedItem As Variant, wbksource As Workbook, wbkcible As Workbook, fd As Object, Nom$
Dim NbClés As Integer, Ligne As Integer

Set wbkcible = ThisWorkbook
Set fd = Application.FileDialog(msoFileDialogOpen)
With fd
.Title = "Choisissez le fichier"
.Filters.Clear
.Filters.Add "Fichier Excel", "*.xls*"
.AllowMultiSelect = False
If .Show <> 0 Then
Nom = .SelectedItems(1)
Else
MsgBox "Aucun fichier n'a été sélectionné", , "Erreur": Exit Sub
End If
End With
Application.ScreenUpdating = False
Set wbksource = Workbooks.Open(Nom)
If Range("A3") = "" Then
ActiveWindow.Close SaveChanges:=False
Application.ScreenUpdating = True
Exit Sub
Else
wbksource.Sheets("Concatenation").Visible = xlSheetVisible
wbksource.Sheets("Concatenation").Activate
NbClés = Sheets("SupClés").Range("A1").End(xlDown).Row - 2 'compte le nombre de clés à copier
Range("A1:A" & NbClés).Select
Selection.Copy
wbkcible.Sheets("BASE").Activate
Ligne = Sheets("BASE").Range("G2").End(xlDown).Row + 1
If NbClés = 1 Then
Range("G" & Ligne).Select
Else
Range("G" & Ligne, "G" & Ligne + NbClés).Select
End If
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("H" & Ligne, "H" & Ligne + NbClés - 1) = "S"
wbksource.Sheets("Concatenation").Visible = xlSheetVeryHidden
wbksource.Sheets("SupClés").Activate
wbksource.Sheets("SupClés").Range("A3:A100").ClearContents
wbksource.Sheets("SupClés").Range("B3:B100").ClearContents
Confirmation.Show
Windows("").Activate
ActiveWorkbook.Save
ActiveWindow.Close
wbkcible.Sheets("BASE").Activate
Application.ScreenUpdating = True
ActiveWorkbook.Save
End If
End Sub

je l'ai trouvé dans une discussion et en fait c'est juste la partie qui permet d'ouvrir un fichier fermé qui m'interesse, d'autant plus que le format .xls* est déja prérenseigné. quand je dis "juste la partie", en fait je ne vois pas ou elle s'arrête (end if ? end with ?) parcque la suite de la macro ne correspond pas à mon cas.

ensuite il ne me restera plus que le code qui me permettrait de copier/déplacer la feuille "Activités" du fichier sélectionné dans le fichier depuis où la macro est lancée. bref je suis pas arrivé......

mais bon je trouve tout ceci tres interessant et je suis trés curieux d'apprendre
 

Staple1600

XLDnaute Barbatruc
Re : Importer une feuille Excel depuis un autre classeur

Re

Tu as vu que je t'avais mis un bout de code ultracourt dans mon précédent message pour ouvrir une boite de dialogue de sélection de dossier ?

En tout cas, bravo à toi d'avoir utilisé le moteur de recherche pour trouver des sources d'inspiration.

PS: La partie qui t'interesse est celle-ci (mais voir si utilisable avec toutes les versions d'Excel)
Code:
Sub Macro2()
Dim vrtSelectedItem As Variant, wbksource As Workbook, wbkcible As Workbook, fd As Object, Nom$
 Dim NbClés As Integer, Ligne As Integer
 
Set wbkcible = ThisWorkbook
 Set fd = Application.FileDialog(msoFileDialogOpen)
 With fd
   .Title = "Choisissez le fichier"
   .Filters.Clear
   .Filters.Add "Fichier Excel", "*.xls*"
   .AllowMultiSelect = False
   If .Show <> 0 Then
     Nom = .SelectedItems(1)
     Else
     MsgBox "Aucun fichier n'a été sélectionné", , "Erreur": Exit Sub
   End If
 End With
End Sub
 
Dernière édition:

Patrice310

XLDnaute Nouveau
Re : Importer une feuille Excel depuis un autre classeur

Trop cool, je vais l'essayer !!!!
Et pour importer ma feuille du fichier sélectionné je vais tenter de trouver ça dans une autre discussion, j'en ai vu. A moins que tu ai ça "sous le coude" ;-)))
En tout cas je te remercie beaucoup pour tout !!!!
 

Staple1600

XLDnaute Barbatruc
Re : Importer une feuille Excel depuis un autre classeur

Bonjour tout le monde

Patrice
J'ai levé le code et tu avais raison, j'ai trouvé cela ;)
Code:
Sub b()
Dim objSh, objFic, Fic2Open$, WBKSource As Workbook
Set objSh = CreateObject("Shell.Application")
Set objFic = objSh.BrowseForFolder(&H0&, "Sélectionner le fichier dans le répertoire adéquat", &H4000&)
Fic2Open = objFic.ParentFolder.ParseName(objFic.Title).Path & ""
Set WBKSource = Workbooks.Open(Fic2Open)
WBKSource.Sheets("Activités").Copy Before:=ThisWorkbook.Sheets(1)
WBKSource.Close False
End Sub

TestOK, mais il faudrait ajouter une gestion d'erreur
(Car il faut absolument que le fichier Excel choisi contienne bien une feuille nommé Activités sion cela plantera)
 

Patrice310

XLDnaute Nouveau
Re : Importer une feuille Excel depuis un autre classeur

Alors là chapeau !!! Ca marche trés bien.........
si je puis me permettre, est il possible de "combiner" ce code avec celui que j'avais auparavant trouvé afin que la fenêtre qui s'ouvre soit prérensignée avec xls* et ait le format que j'avais trouvé (style Explorateur) ?
Merci beaucoup, bon dimanche....
 

Staple1600

XLDnaute Barbatruc
Re : Importer une feuille Excel depuis un autre classeur

Re

Cela semble aussi fonctionner ;)
VB:
Sub c()
Dim nom$, WBKSource As Workbook
With Application.FileDialog(msoFileDialogOpen)' ton bout de code
    .Title = "Choisissez le fichier"
    .Filters.Clear
    .Filters.Add "Fichier Excel", "*.xls*"
    .AllowMultiSelect = False
        If .Show <> 0 Then
        nom = .SelectedItems(1)
            Set WBKSource = Workbooks.Open(nom) ' mon petit bout à moi ;-)
            With WBKSource
                .Sheets("Activités").Copy Before:=ThisWorkbook.Sheets(1)
                .Close False
            End With
        Else
        MsgBox "Aucun fichier n'a été sélectionné", , "Erreur": Exit Sub
        End If
End With
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Importer une feuille Excel depuis un autre classeur

Re

De rien.

PS: Ça risque ne pas fonctionner parfaitement si on ouvre un classeur sans feuillle Activités ;)
Je te laisse chercher comment implémenter cette gestion d'erreur.

et peut-être à une prochaine fois......
Si tu suis mes conseils*, on devrait se croiser que devant de grosses difficultés ;)
(*: la loupe+enregisteur de macros+ touche f1)
 
Dernière édition:

Patrice310

XLDnaute Nouveau
Re : Importer une feuille Excel depuis un autre classeur

Salut JM,

j'ai bien avancé sur mon projet et c'est aussi grâce à ton aide....

je m'étais pas repenché sur le message d'erreur dont tu parle dans ton dernier post.

donc j'ai essayé tout aujourd'hui et je galére.....,je m'en sort pas pas avec les If, IsMissing, Then,.....

le pire c'est que j'ai bien réussi un tel message d'alerte mais sur une fonction plus simple :

VB:
ANNEE = Range("D2")
If ANNEE = "" Then MsgBox "Année non définie", , "Enregistrement impossible": Exit Sub
....

mais demander la vérification de la présence de la feuille "Activités" j'y arrive pas.

merci et bonne journée.
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia