recup donnees classeur ferme

duchesse46

XLDnaute Nouveau
Bonjour,
Je viens vers vous, pour une aide
La macro ci dessous fonctionne très bien pour récupérer une cellule dans un classeur excel ferme
Le problème est qu’ il me faut récupérer plusieurs cellules, j ai a chaque fois un débogage
Merci de m aider.

Sub ecrireexcel()
Dim AppX As Excel.Application ' référence Application Excel
Dim WbX As Excel.Workbook ' référence Classeur Excel (fichier)
Dim WsX As Excel.Worksheet ' référence Feuille Excel si plusieurs
Dim donnees As Variant 'String ' chaîne pour lecture
'ouverture d'un fichier
Set AppX = New Excel.Application ' CreateObject("Excel.Application")
Set WbX = AppX.Workbooks.Open("D:\documents\CIS\nom du classeur.xls")
Set WsX = AppX.Sheets("nom de la feuille")

' lecture d'une cellule fonctionne tres bien
donnees = WbX.Sheets("nom de la feuille ").Cells(14, 1)

je n arrive pas a copier coller plusieurs cellules
''donnees = WbX.Sheets("nom de la feuille ").Range(Cells(14, 1), Cells(25, 17))
Ne fonctionne pas

'fermeture pour pouvoir copier dans le classeur ouvert
WbX.Close 'Fermeture du classeur Excel
AppX.Quit 'Fermeture de l'application Excel
Sheets("non de la feuille").Cells(14, 1) = donnees ' écriture d'une cellule
' efface les varriables
Set WsX = Nothing
Set WbX = Nothing
Set AppX = Nothing
End Sub
 

kjin

XLDnaute Barbatruc
Re : recup donnees classeur ferme

Bonjour,
Cette macro ne lit pas dans un classeur fermé !
Pourquoi ouvrir une nouvelle instance d'excel ?
Code:
Sub ecrireexcel()
Dim wb1 As Workbook, tablo As Variant
Application.ScreenUpdating = False
Set wb1 = Workbooks.Open("D:\documents\CIS\nom du classeur.xls")
With wb1
    tablo = .Sheets("nom de la feuille").Range(Cells(14, 1), Cells(25, 17)).Value
    .Close False 'Fermeture du classeur Excel
End With
With Sheets("nom de la feuille")
    .Cells(14, 1).Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End With
Application.ScreenUpdating = True
End Sub
A+
kjin
 

duchesse46

XLDnaute Nouveau
Re : recup donnees classeur ferme

merci de ta réponse Kjin,
je me suis mal exprime,
les données sont recherche dans un classeur ferme, je l ouvre, il ne s affiche pas a l écran, j arrive a lire 1 cellule, il se referme puis je copie dans le classeur actif.

ta solution marche tres bien merci encore.
 

duchesse46

XLDnaute Nouveau
Re : recup donnees classeur ferme

re, moi
bonsoir,
une autre petite question.

comment mettre le nom de la feuille en variable.

pour le fichier cela marche,
Chemin = ""D:\documents\CIS\" & [centre_acquis] & ".xls" 'chemin de mon FICHIER

mais pour ma feuille cela ne marche pas

tablo = .Sheets(nomfeuilleacquis).Range(Cells(14, 1), Cells(25, 17)).Formula

débogage, l indice n appartient pas a la selection

merci de m aider
 

Softmama

XLDnaute Accro
Re : recup donnees classeur ferme

Re,

Je pense pas avoir tout compris à ta question, mais je dirais que tu dois le faire cellule par cellule et pas passer par un tableau pour récupérer les valeurs d'une plage issue d'un classeur fermé... ou alors reste la solution d'ouvrir le classeur, mais en arrière plan, sans que ça se voit, du coup, ça prend un peu de temps d'ouvrir/fermer le fichier, mais aussi, tu peux travailler sur des plages entières. Tout dépend du nbre de cellules que tu as à traiter, je pense qu'au delà d'une centaine, il devient plus rentable d'ouvrir/fermer le fichier. A moins que
1- Qq1 ait une meilleure idée
2- J'ai rien compris à ta demande... (c'est ma spé en ce moment^^)
 

duchesse46

XLDnaute Nouveau
Re : recup donnees classeur ferme

bonsoir Sofmama
merci de ta rapidité

c est suite a mon 1er pos

je m exprime mal.

les données sont recherche dans un classeur ferme, je l ouvre, il ne s affiche pas a l écran, j arrive a lire 1 cellule, il se referme puis je copie dans le classeur actif.

kjim m a modifier mon code qui marche bien,

sauf que j ai besoin de rechercher les données dans une feuille qui n est jamais la même.
d ou le besoin nomfeuilleacquis as variant
tablo = .Sheets(nomfeuilleacquis).Range(Cells(14, 1), Cells(25, 17)).Formula.
 

Pierrot93

XLDnaute Barbatruc
Re : recup donnees classeur ferme

Bonjour à tous

si je peux me permettre, perso je modifierais cette partie :
Code:
Set wb1 = Workbooks.Open("D:\documents\CIS\nom du classeur.xls")
With wb1
    tablo = .Sheets("nom de la feuille").Range(Cells(14, 1), Cells(25, 17)).Value
    .Close False 'Fermeture du classeur Excel
End With
With Sheets

Ainsi :
Code:
Set wb1 = Workbooks.Open("D:\documents\CIS\nom du classeur.xls")
With wb1
    With .Sheets("nom de la feuille")
        tablo = .Range(.Cells(14, 1), .Cells(25, 17)).Value
    End With
    .Close False 'Fermeture du classeur Excel
End With

pour le nom de la feuille, comment le determiner ? à partir de quel critère ? Peut être utiliser le numéro d"index de la feuille "Sheets(1)", "ActiveSheet" ou bien son "codename"... A voir, sans plus de détails... difficile d'en dire plus...

bonne journée
@+
 
Dernière édition:

duchesse46

XLDnaute Nouveau
Re : recup donnees classeur ferme

bonjour pierrot93

merci de ta reponse,
j ai le mm bebogage , l indice n appartient pas a la selection

j ai besoin de recuperer dans un fichier ferme , un groupe de cellules ( 100 a 200)
sauf que je recupere le nom du fichier dans une cellule ainsi que le nom de ma feuille.

mon code/
Sub recherche_des_aquis()

Sheets("recherche des Acquis").Range("A14:Q25").ClearContents

Dim wb1 As Workbook
Dim tablo As Variant
Dim Chemin
Dim nomfeuilleacquis As Variant ' nom de la feuille recherchée

nomfeuilleacquis = [me_acquis] ' feuille d un fichier nomme "1234" récupère dans une cellule nommée me_acquis

Application.ScreenUpdating = False


Chemin = "D:\documents\CIS\ & [centre_daffectation_acquis] & ".xls" 'chemin de mon FICHIER


Set wb1 = Workbooks.Open([Chemin])

With wb1
''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''
tablo = .Sheets(nomfeuilleacquis).Range(Cells(14, 1), Cells(25, 17)).Formula 'copie formule , .Value pour valeur
.Close False 'Fermeture du classeur Excel
End With
With Sheets("recherche des Acquis")
.Cells(14, 1).Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End With
Application.ScreenUpdating = True
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : recup donnees classeur ferme

Re,

mon intervention était pour préciser également le nom de la feuille avant les propriétés "cells", et ce au travers d'un nouveau bkloc "with".. :
".Range(.Cells(14, 1), .Cells(25, 17)).Value"

Pour ton nom de feuille, essaye peut être ainsi :
Code:
nomfeuilleacquis = Range("me_acquis").Value

mais bon, exécute le code pas à pas (F8 dans l'éditeur vba), et voir ce que contient ta variable... le classeur dans lequel se trouve ta plage doit être actif....

@+
 

duchesse46

XLDnaute Nouveau
Re : recup donnees classeur ferme

bonjour, et bonne annee

après plusieurs tentatives

j ai mal détermine ma variable

Dim nomfeuilleacquis As Variant ' nom de la feuille recherchée

avec as string cela fonctionne bien,

il me reste plus qu a gère les erreur s il ni a pas de feuille

merci encore de ton aide Pierrot93, Kjin et Softmama
 

Logan

XLDnaute Nouveau
Re : recup donnees classeur ferme

Bonjour,

Je suis nouveau sur le forum et j'ai déjà une question ( cruciale d'ailleurs :)) !!

Voilà, j'ai deux classeurs Excel. Dans l'un deux se trouve un tableau... J'aimerais que ce même tableau soit dans l'autre classeur et que lorsque que le tableau est modifié, l'autre tableau soit modifié aussi. Mais là où se trouve le problème, c'est que j'aimerais que lorsque je modifie le tableau, l'autre le soit aussi sans que le fichier soit ouvert !

Est ce que quelqu'un voit le problème ?? Et surtt peux t on me donner de l'aide ??
PS : je suis sur mac avec excel 2008...
PS2 ( pas la console ) : Je suis pas un pro sur excel...

Merci d'avance,
 

Discussions similaires

Statistiques des forums

Discussions
312 779
Messages
2 092 045
Membres
105 167
dernier inscrit
JulJon2004