Gestion fichier fermé et longueur texte copié

  • Initiateur de la discussion Initiateur de la discussion huahailu
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

huahailu

XLDnaute Nouveau
Bonjour à tous dans le forum,

Un petit problème avec un classeur qui va chercher des valeurs dans plusieurs (1 centaine) classeurs situés sur un réseau entreprise.
Ces classeurs sont en général fermés.
Tout se passe bien pour les petites valeurs numériques que nous allons chercher, mais maintenant je dois importer le contenu d'une cellule qui contient du texte (plusieurs centaines de caractères pour certaine), et là, problème...
Je n'arrive pas à importer plus de 255 caractères par cellule dans mon fichier.
Je joins 2 fichiers pour exemple à copier dans un repertoire C:\Temp\
Lorsque les 2 fichiers sont ouvert, pas de problème, mais si je ferme le fichier "Classeur1_FERME_SOURCE" comme il doit être en configuration normale, je ne récupère que 255 caractères dans le fichier "Classeur2_OUVERT".
Désolé pour le code, qui n'est pas terrible, mais j'ai essayé d'adapter mon fichier d'origne qui est beaucoup plus complexe...
Voilà, si quelqu'un pouvait me dire si il y a espoir, ou si ce n'est pas possible ??
Par avance merci
Pascal
 

Pièces jointes

Re : Gestion fichier fermé et longueur texte copié

Bonjour et bienvenue dans le forum (quoique inscription: 2006?!)

[edit]
Autant pour moi, ceci ne fonctionne pas, désolé:

Code:
Private Sub CommandButton1_Click()
    Dim Cell As Variant
    Dim chemin As String
    Dim essai As String
    Dim tmp As String
    'Vérifie ou se trouve le fichier dans les différent dossier et dès qu'il le trouve, va sur FIN pour commencer la procédure
    chemin = "C:\Temp\"
    Cell = "Classeur1_FERME_SOURCE.xls"
    essai = chemin & "[" & Cell & "]" & "HG" & "'!" & Cells(17, 2).Address(0, 0)
    ActiveSheet.Cells(1, 1) = "='" & essai
    [SIZE=3][COLOR=red]ActiveSheet.Cells(1, 1).Formula = ActiveSheet.Cells(1, 1).Text[/COLOR][/SIZE]
End Sub

A+
 
Dernière modification par un modérateur:
Re : Gestion fichier fermé et longueur texte copié

Bonjour,
a essayer pour voir chez moi cela à l'air de fonctionner..
les 2 fichiers dans le mm répertoire.
A+
Code:
Private Sub CommandButton1_Click()
Dim fichier As String
Dim chemin As String
Dim essai As String
Dim Wb As Workbook
'Vérifie ou se trouve le fichier dans les différent dossier et dès qu'il le trouve, va sur FIN pour commencer la procédure
chemin = ThisWorkbook.Path '"C:\Temp\"
fichier = "Classeur1_FERME_SOURCE.xls"
essai = chemin & "\" & fichier
Set Wb = GetObject(essai)
[A1] = Wb.Sheets("HG").[B17].Value
Wb.Close
End Sub
 
Re : Gestion fichier fermé et longueur texte copié

Re,

Si tu ne veux pas ouvrir le 'classeur source', il y a ADO.

Activer la référence 'Microsoft Activex Data Object X.XX' dans les références du projet.

Dans le ligne ci-dessous, lors de l'adaptation, les [ et ] sont important ainsi que le $ après le nom de la feuille.

Pour le premier classeur, cela peut-mettre un petit temps pour la connexion mais pour les suivants, ces très rapide.

Code:
Private Sub CommandButton1_Click()
    Dim cnx As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim Cell As Variant
    Dim chemin As String
    Dim essai As String
    'Vérifie ou se trouve le fichier dans les différent dossier et dès qu'il le trouve, va sur FIN pour commencer la procédure
    chemin = "C:\Temp\Classeur1_FERME_SOURCE.xls"
    cnx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                           "Data Source=" & chemin & ";" & _
                           "Extended Properties=""Excel 8.0;HDR=No;IMEX=1;"";"
    cnx.CursorLocation = adUseClient
    cnx.Open
    If cnx.State = adStateOpen Then
        rs.Open "SELECT * FROM [COLOR=red][HG[SIZE=3]$[/SIZE]B17:B18][/COLOR];", cnx, adOpenStatic, adLockReadOnly
        Range("A1").CopyFromRecordset rs, 1, 1
    End If
    cnx.Close
    Set rs = Nothing
    Set cnx = Nothing
End Sub

A+
 
Re : Gestion fichier fermé et longueur texte copié

Bonjour Hasco et Youki, bonjour le forum,

De passage entre deux réunions, et déjà des réponses. Je regarde tout celà au plus tôt.
Merci beaucoup pour votre aide.
Je vous tiens au courant,

Cordialement
Pascal
 
Re : Gestion fichier fermé et longueur texte copié

Bonjour Hasco et Youki,
Bonjour à tout le forum

Les deux solutions fonctionnent parfaitement, et je n'ai eu aucun problème à les adapter à mon projet.
Je pense aller vers la solution ADo de Hasco qui me permet de garder les fichiers sources fermés (mais je garde celle de Youki qui me sera très utile pour une autre application que j'ai sous le coude...).

Une dernière question (peut-être!!), concernant l'importation venant d'un classeur qui est déjà ouvert par un autre utilisateur.
Comme je le disais dans mon message, les fichiers sources sont sur un disque réseau, et lorsque l'un d'entre eux est ouvert (si c'est moi qui l'ai ouvert, pas de pb), le message d'erreur suivant apparaît:

"Erreur d'exécution'-2147467259(80004005)':
La méthode 'CopyFromRecordset' de l'objet 'Range' a échoué"

Ce n'est pas une urgence réelle, je peux toujours demander aux utilisateurs (1 petite dizaine, et tous localisés non loin, une chance..) de ne pas ouvrir les fichiers pendant l'extraction.
Mais si celà est possible, comment faire pour chercher l'info même si le fichier est ouvert par un autre, ou tout au moins passer au fichier suivant sans message d'erreur.

Merci beaucoup pour votre aide
Pascal
 
Re : Gestion fichier fermé et longueur texte copié

Bonjour,

MSADO à dit:
"Erreur d'exécution'-2147467259(80004005)'

Je ne peux pas te renseigner sur cette erreur précise, n'étant pas en réseau, mais saches que ADO avec Excel est contraignant dès qu'on sort de ses limites, que je ne connais pas toutes.

Va voir cette KB de Microsoft sans doute pourra-t-elle t'aider.

A+
 
Re : Gestion fichier fermé et longueur texte copié

Re,

@Youki,

La methode GetObject charge l'application qui as créer le fichier donc une instance excel, instance qu'il ne faut pas oublier de fermer ensuite, si elle l'était avant. Certaine applications(ou versions), ne se déchargent pas toujours automatiquement ou proprement.

A+
 
Dernière modification par un modérateur:
Re : Gestion fichier fermé et longueur texte copié

Bonjour à tous,

Hasco, tototiti2008, merci pour vos réponses, je regarde les liens que vous m'avez transmis et vous tiens au courant.

Youki,
En fait il semble que les fichiers restent en mémoire en effet (je peux les voir dans l'Explorateur de Projet du VBE) mais sans pouvoir les fermer, ce qui fait que les autres utilisateurs ne peuvent pas s'en servir tant que je n'ai pas fermé Excel complètement de mon poste.

En tous cas, tel quel, mon projet fonctionne grâce à vous, et m'évitera pas mal de manip manuelle que je faisait avant..

Bonne journée,
Cordialement
Pascal
 
Re : Gestion fichier fermé et longueur texte copié

Re huahailu,

hello TotoTiti, c'est vrai je n'avais pas pensé à ce problème de version msADO. Jamais trop de têtes pour penser les choses😀. Je crois que cela a été corrigé avec la version 2.3 de la bibliothèque.

Toutefois, la propriété CursorLocation (adUseClient ou adUseServer) a aussi un effet sur la chose ainsi que le type de Cruseur Retourné. Comme souvent avec Microsoft, il faut tâtonner pour trouver la bonne combinaison.

A+ à tous
 
Re : Gestion fichier fermé et longueur texte copié

Re,

c'est vrai je n'avais pas pensé à ce problème de version msADO

@Hasco : moi je n'y avais pas pensé du tout, j'ai juste fait une recherche sur Google 😉

quant à CursorLocation, je ne connaissais même pas.... toujours bon à noter.

Comme souvent avec Microsoft, il faut tâtonner pour trouver la bonne combinaison

Pour le coup, en ADO sur Excel, je tatonne... mais grâce à vous j'en apprend toujours un peu plus.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
58
Affichages
10 K
Retour