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

yessss !!!! trop cool !!!

toute remarque sera la bienvenue sur mon projet.... tu verra je suis plutôt un bricoleur d'Excel... qu'un vrai informaticien...

infos péle-méle pour comprendre mon fichier :

- tous les fichiers importés n'ont pas forcément la colonne "taux travail temps partiel" au même endroit (AI ou AK) selon les cas, d'où mon bricolage avec INDIRECT
- un salarié est comptabilisé que, si et seulement si, il est présent le dernier jour du mois et à proportion de son temps de travail (temps plein = 0.00 et temps partiel 55.00 pour 55% par exemple)
- certaines entreprises "décalent", c'est-à-dire que l'année commence le 01.12.N-1 et se termine le 30.11.N, d'où encore quelques bricolages maison hihi..

si tu as une question, n'hésites surtout pas !!

merci d'avance..
 
Dernière édition:

Staple1600

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

Bonsoir


Je viens de voir ta dernière PJ.
Avant toute chose:
Voila, j'ai essayé et en fait je bloque (erreur execution)

Sur quelle ligne de ton code l'erreur se produit-elle ?

Ps: je vais me coucher
Essayes cette version modifiée de IMPORT et dis-moi si cela te convient un peu plus que IMPORT
Code:
Sub IMPORTbis()
Const LA_FEUILLE As String = "Activités"
Dim Sh As Worksheet, i&
Dim nom$, WBKSource As Workbook
Application.DisplayAlerts = False
Application.DisplayAlerts = True
 With Application.FileDialog(msoFileDialogOpen)
 .Title = "Choisissez le fichier à analyser"
     .Filters.Clear
     .Filters.Add "Fichier Excel", "*.xls*"
     .AllowMultiSelect = False
         If .Show <> 0 Then
         nom = .SelectedItems(1)
             Set WBKSource = Workbooks.Open(nom)
With WBKSource
i = 0
    For Each Sh In .Worksheets
        If LA_FEUILLE = Sh.Name Then
            i = i + 1
        End If
    Next Sh
    If i >= 1 Then
        MsgBox "Cette feuille existe déjà", vbCritical, "ATTENTION"
        .Close False
        Exit Sub
    Else
    .Sheets("Activités").Copy Before:=ThisWorkbook.Sheets(1)
    .Close False
    End If
End With
         Else
         MsgBox "Aucun fichier n'a été sélectionné", , "Erreur": Exit Sub
         End If
 End With
Application.DisplayAlerts = True
'remettre ici la suite de ton code
End Sub
 
Dernière édition:

Patrice310

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

Avant tout, merci d'avoir regardé !!
en fait ça bloque sur la ligne ci-dessous:
Const LA_FEUILLE As String = Worksheets("ICI.NOM.DE.LA.FEUILLE.OU.EST.AG3").Range("AG3").Text
Le débogueur met en surbrillance le ".Text" et ne veut pas executer la suite du code que tu m'avais donné dans le post #23.
J'y comprends rien......
a+
 

Staple1600

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

Bonjour

J'ai testé Importbis sur tes derniers fichiers joints.
J'ai exécuté ce code une première fois.
La feuille Activités est bien copiée
Si je la relance une deuxième fois, la MsgBox s'affiche s'affiche me prévenant qu'une feuille avec ce nom existe déjà.

PS: J'ai testé en lançant le code sans passer par un bouton directement depuis Microsoft Visual Basic Editor (VBE de son petit nom)
 

Staple1600

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

Re

EDITION: Ne donne pas à tes modules le même nom que tes macros, sinon cela perturbe quelque peu VBA ;)


Je viens d'essayer en utilisant une fonction dédiée à la vérification de l'existence d'une feuille dans un classeur
La aussi, le message s'affiche si on lance la macro pour la seconde fois.
Code:
Function checknf(nf$) As Boolean
On Error Resume Next
checknf = Sheets(nf).Name <> vbNullString: Err.Clear
End Function

Code:
Sub IMPORTter()
Dim nom$, WBKSource As Workbook
If Not checknf("Activités") Then
With Application.FileDialog(msoFileDialogOpen)
    .Title = "Choisissez le fichier à analyser": .Filters.Clear
    .Filters.Add "Fichier Excel", "*.xls*": .AllowMultiSelect = 0
    If .Show <> 0 Then
    nom = .SelectedItems(1): Set WBKSource = Workbooks.Open(nom)
    With WBKSource
    If checknf("Activités") Then
        .Sheets("Activités").Copy Before:=ThisWorkbook.Sheets(1)
        .Close False
    End If
    End With
    Else
    MsgBox "Aucun fichier n'a été sélectionné", , "Erreur": Exit Sub
    End If
End With
 Else
 MsgBox "Une feuille portant ce nom existe déjà", vbCritical, "ERREUR"
 End If
End Sub
 
Dernière édition:

Patrice310

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

salut JM....

en fait je crois que l'on ne s'est pas compris... c'est vrai que je te demande plusieurs choses en même temps et je dois bien avouer qu'en relisant mes posts, je suis pas super clair....

la commande que je voudrai vraiment inclure (la seconde n'étant pas vraiment indispensable..) est la suivante :

- l'utilisateur ouvre mon projet, importe le fichier concerné (macro IMPORT)
- puis clique sur le bouton ENREGISTRER FEUILLE pour que la feuille soit conservée (macro ENREGISTRER FEUILLE) dans le classeur avec le nom de la cellule AG3 ("ONGLET"), cellule qui est exclusive a chaque fichier importé
- ensuite, s'il réimporte le même fichier et qu'il enregistre à nouveau la feuille, j'aurai voulu un message lui disant qu'il a déja créee cette feuille avec un choix "écraser celle existante ou annuler" ou pourquoi pas (j'y pense en l'écrivant) que la macro crée bien la feuille mais qu'elle lui donne un nom différent que ONGLET (cellule AG3), du genre "ONGLET-2)

donc c'est sur la macro ENREGISTRER FEUILLE qu'il faudrait inclure cette sécurité.

je suis conscient que je te prends beaucoup de ton temps, alors si tu ne pouvais pas m'aider je comprendrai sans soucis.

merci et bonne soirée
 
Dernière édition:

Staple1600

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

Bonjour

Je pense avoir saisi ta problématique et il me semble qu'il y a dans ton fil suffisamment de code VBA pour y répondre.

J'attends de voir poindre uine nouvelle PJ ou tu auras implémenté, bidouillé, mélangé les différents codes que je t'ai proposé.
Ensuite je viendrai te refiler un coup de main, pas aujourd'hui car je suis en congé et je dois aller fendre du bois chez mon géniteur qui se fait vieux.
 

Patrice310

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

Bonsoir JM...

Merci de m'avoir répondu !!

Je n'ai pas conservé mes tentatives infructueuses...... elles buggaient !!!

Par contre, ne trouvant pas de soluce, j'ai décidé de "contourner" le soucis par l'Inputbox ci-dessous, avec un petit message à l'utilisateur d'être vigilant.... hihihi...

Mais je ne suis pas contre de connaitre la soluce, je donne ma langue au chat, parce que je peux t'assurer que je me suis torturé et lu un sacré paquet de topics "avoisinnant" mais différents.

Si tu souhaites voir mon projet actualisé, n'hésites pas...

J'ai écouté tes conseils en renommant mes modules. Il me reste tant à apprendre..... mais bon, tout ceci me plait beaucoup !! ;-))

Bonne soirée.

VB:
Sub ENREGISTRER_FEUILLE()
'CREATION NOUVELLE FEUILLE
ANNEE = Range("Y7")
ONGLET = Range("AG3")
Dim NEWONGLET As String
NEWONGLET = InputBox(vbNewLine & "    Veuillez saisir le nom de la feuille." & vbNewLine & vbNewLine & "    Attention : ne pas utiliser un nom déja attribué.", "Choix du nom de votre feuille...", ONGLET)
Sheets("ANALYSE EFFECTIF MOYEN").Select
Sheets("ANALYSE EFFECTIF MOYEN").Copy After:=Sheets(2)
Sheets("ANALYSE EFFECTIF MOYEN (2)").Select
Sheets("ANALYSE EFFECTIF MOYEN (2)").Name = NEWONGLET
MsgBox "L'onglet " & NEWONGLET & " a été crée" & vbNewLine & vbNewLine & "Merci d'utiliser ce dernier pour toute modification sur l'année " & ANNEE, vbInformation + vbOKOnly, "FEUILLE BIEN ENREGISTREE"
 

Discussions similaires

Statistiques des forums

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