Récupérer la totalité d'une feuille d'un autre classeur (fermé ou ouvert)

Benoist28200

XLDnaute Nouveau
Bonjour le forum,

Est-il possible de récupérer la totalité d'une feuille d'un autre classeur (fermé ou ouvert).

Ex: Feuille(DONNEES) de mon classeur = Feuille(DONNEES) du classeur dans lequel je veux récupérer les données.

Merci.
 

Nairolf

XLDnaute Accro
Salut,

Non ce n'est pas possible directement, plusieurs solutions sont possibles, dont :
  • Par copie de la feuille dans le classeur cible
  • Par formule, du genre :
    Code:
    =SI(ESTVIDE('[test increment1.xlsm]Feuil1'!A1);"";'[test increment1.xlsm]Feuil1'!A1)
    à étirer sur toute la feuille
  • Par vba : avec code de copie des valeurs brutes (sans lien) ou avec lien (similaire à formule)
 

Nairolf

XLDnaute Accro
Oui, c'est une des façons de faire en vba (ici le contenu entier sera copié : formule, mise en forme), un autre exemple avec du vba (copie uniquement la valeur) :
VB:
Sub test()
Dim tab1()
tab1 = Workbooks("fichier source.xlsm").Worksheets("Feuil1").Range("A1:D20").Value
ActiveSheet.Range("A1:D20") = tab1
End Sub
A noter qu'il vaut mieux cerner la taille de la plage à copier, car une grande dimension risque de prendre du temps à être traité.
 

youky(BJ)

XLDnaute Barbatruc
Bonjour à tous, le fil,
Voici un exemple de code pour pomper les données dans un classeur ouvert ou fermé
Il faudra modifié en conséquences qlq lignes de code ou j'ai commenté.
Bruno
VB:
Sub ouverture()
Application.ScreenUpdating = False
For Each Wb In Workbooks
  If Wb.Name = "TonClasseur.xls" Then
    Workbooks(Wb.Name).Activate: k = 1
  End If
Next
If k = "" Then
chemfich = ThisWorkbook.Path & "\TonClasseur.xls"
On Error Resume Next
Workbooks.Open chemfich
If Err <> 0 Then MsgBox "TonClasseur.xls non trouvé": Exit Sub
End If
ActiveWindow.WindowState = xlMinimized
ThisWorkbook.Activate
ActiveWindow.WindowState = xlMaximized
With Workbooks("TonClasseur.xls").Sheets("DONNEES")
'modifier Feuil1 c'est le codename (voir en propriété)
Feuil1.[A1:K10000].Clear
'les colonnes restent à définir ici c'est décalé
Feuil1.[A1:A6000].Value = .[C1:C6000].Value
Feuil1.[B1:B6000].Value = .[D1:D6000].Value
Feuil1.[C1:C6000].Value = .[AX1:AX6000].Value
Feuil1.[D1:D6000].Value = .[AP1:AP6000].Value
Feuil1.[E1:E6000].Value = .[AU1:AU6000].Value
Feuil1.[F1:F6000].Value = .[BF1:BF6000].Value
Feuil1.[G1:G6000].Value = .[BG1:BG6000].Value
Feuil1.[H1:H6000].Value = .[BQ1:BQ6000].Value
Feuil1.[I1:I6000].Value = .[CF1:CF6000].Value
Feuil1.[J1:J6000].Value = .[CJ1:CJ6000].Value
Feuil1.[K1:K6000].Value = .[CU1:CU6000].Value
End With
if k="" then Workbooks("TonClasseur.xls").Close False
End Sub
 

Nairolf

XLDnaute Accro
Le code que tu as proposé est l'un des meilleur (car rapide) pour cet usage, celui que j'ai indiqué est plus utilisé lorsqu'il y a manipulation des données (calculs, tris, conditions, déplacements...).

Pour cerner la plage, il existe aussi plusieurs façons, mais pour choisir la plus adaptée, il faut connaître la forme des données (quelle est la colonne la plus grande et la ligne la plus grande par exemple), il existe un code de base qui permet de connaître la dernière cellule de la plage de travail (plage calculée automatiquement par Excel):
VB:
Cells.SpecialCells(xlCellTypeLastCell)

Ce qui donnerait dans ton code:
VB:
Fichier = "C:\Users\Benoist\Desktop\Planning Groupe 1.xlsm"

Workbooks(Fichier).Sheets("DONNÉES").range(cells(1,1),Cells.SpecialCells(xlCellTypeLastCell)).Copy   ActiveWorkbook.sheets("DONNÉES").Range("A1").Paste
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof