Importer une feuille à l'ouverture d'un classeur

clochete

XLDnaute Nouveau
Bonjour à tous !!!

j'ai parcouru l'ensemble du forum et je n'ai pas trouvé mon bonheur.

Voilà ce que je souhaite faire :
1) à l'ouverture de MonClasseur.xlsx, l'ensemble des données de la Feuil4 sont effacées.
2) à l'ouverture de MonClasseur.xlsx, l'ensemble des données de la Feuil1 de Caracteristique.xlsx sont copier dans la Feuil4 de MonClasseur.xls et sont transformées en tableau nommé "source".

Le classeur Caracteristique.xlsx est fermé et se trouve dans g:\MonDossier\MonSousDossier
Le classeur MonClasseur.xlsx se trouve dans d:\Dossier\SousDossier

Une âme charitable peut-elle m'éclairer ? La code est plus simple dans Access mais en VBA Excel je suis NULLE :( !!!

Merci d'avance pour votre aide et bonnes vacances aux veinards !

Clochete :)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Importer une feuille à l'ouverture d'un classeur

Bonjour clochete,

Ne sachant pas (puisqu'aucun fichier n'est fourni :( ) si les données du fichier Caracteristique.xlsx sont issues de calculs ou non, j'ai utilisé une méthode basée sur PasteSpecial.

Il faut modifier les constantes Dossier_Carac, Nom_carac, Feuil_Carac, Feuil_Dest selon votre configuration personnelle.

Le fichier Caracteristique.xlsx peut être ouvert ou fermé.

Si vous ne désirez pas la confirmation d'actualisation, supprimer la ligne:
Code:
If MsgBox("Voulez-vous actualiser les données (O/N) ?", _
      vbQuestion + vbYesNo + vbDefaultButton1) = vbYes Then
ainsi que la ligne "End If" associée (dernier End if de la macro - ligne avant l'instruction Application.Goto...)

Le code du module de ThisWorkbook:
VB:
Option Explicit
Const Dossier_Carac = "D:\EXCEL\@EXCEL-DOWNLOADS\clochete"
Const Nom_carac = "Caracteristique.xlsx"
Const Feuil_Carac = "Feuil1"
Const Feuil_Dest = "Feuil4"

Private Sub Workbook_Open()
Dim Fichier_Carac As String
Application.ScreenUpdating = False
Fichier_Carac = Dossier_Carac & IIf(Right(Dossier_Carac, 1) = _
  "\", "", "\") & Nom_carac
If MsgBox("Voulez-vous actualiser les données (O/N) ?", _
      vbQuestion + vbYesNo + vbDefaultButton1) = vbYes Then
  On Error Resume Next
  If Workbooks(Nom_carac).Sheets.Count = 0 Then
    On Error GoTo Err_OpenCarac
    Workbooks.Open Fichier_Carac
  End If
  On Error GoTo Err_Feuil_Dest
  ThisWorkbook.Sheets(Feuil_Dest).Cells.Delete
  On Error GoTo Err_Feuil_Carac
  Workbooks(Nom_carac).Sheets(Feuil_Carac).Cells.Copy
  On Error GoTo 0
  ThisWorkbook.Sheets(Feuil_Dest).Cells.PasteSpecial xlPasteValues
  ThisWorkbook.Sheets(Feuil_Dest).Cells.PasteSpecial xlPasteFormats
  Application.CutCopyMode = False
  Workbooks(Nom_carac).Close
End If
Application.Goto ThisWorkbook.Sheets(Feuil_Dest).Range("A1"), True
Application.ScreenUpdating = True
Exit Sub

Err_OpenCarac:
  MsgBox "Impossible d'ouvrir le fichier:" & vbLf & Fichier_Carac
  Exit Sub
  
Err_Feuil_Carac:
  MsgBox "Impossible de trouver la feuille: """ & Feuil_Carac & """ du fichier" _
    & vbLf & Fichier_Carac
  Exit Sub
  
Err_Feuil_Dest:
  MsgBox "Impossible de trouver la feuille: " & Feuil_Dest & _
    " du fichier" & vbLf & ThisWorkbook.FullName
  Exit Sub
  
End Sub
 

Pièces jointes

  • MonClasseur.xlsm
    22.8 KB · Affichages: 25
  • Caracteristique.xlsx
    11.9 KB · Affichages: 33
Dernière édition:

clochete

XLDnaute Nouveau
Re : Importer une feuille à l'ouverture d'un classeur

Bonjour mapomme :)

C'est exactement ça !!! Et le fait de pouvoir utiliser le code que le fichier soit ouvert ou fermé est encore mieux. Le fichier auquel ce code est destiné sera utilisé par de nombreuses personnes et je dois pouvoir continuer à travailler sur mes tables sources. Alors grazie mille.
Il me manque juste un élément. Je dois mettre les données sous forme de tableau (avec les filtres et tous le Saint-Frusquin) et le nommer. Je devrais pouvoir trouver un bout de code sur le net pour l'ajouter.

J'ai aussi testé par liaison ODBC entre deux fichiers Excel et cela semble fonctionner. Mais je risque d'avoir des problèmes avec mon DSI pour les déclarations des DNS. Le code c'est beaucoup plus simple.

Mille mercis pour ton aide et pour le temps que tu y as consacré. Tu m'as fais économiser de précieuses heures.

Clochete
 

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 351
Membres
103 824
dernier inscrit
frederic.marien@proximus.