Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1253 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème avec Excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec Excel

n°1393671
nexius26
Yeah !!!!!!!!!
Posté le 23-06-2006 à 15:01:02  profilanswer
 

Hello à tous!!
 
Mon problème est le suivant:
 
J'importe des données excel provenant de plusieurs classeurs sur un "méta-classeur" (on dira ça comme ça), pour cela, j'utilise sous excel la fonction d'import de données. Malheureusement lors de cette même importation j'ai des champs qui ne sont tout bonnements pas importés.
Si je poste dans cette section, c'est que les champs incriminés dans le problème, font l'objet de traitement par des macros. Cependant ils sont présents "physiquement" dans mes petits classeurs, sur une feuille de données.
 
Quelqu'un voit-il une solution à mon pb???

mood
Publicité
Posté le 23-06-2006 à 15:01:02  profilanswer
 

n°1393682
jpcheck
Pioupiou
Posté le 23-06-2006 à 15:03:43  profilanswer
 

les macros en question, elles travaillent de quelle manière sur tes champs ?
n'est-ce pas une histoire de valeur stockée en dur qui fait tout foirer ?

n°1393701
nexius26
Yeah !!!!!!!!!
Posté le 23-06-2006 à 15:15:47  profilanswer
 

Ben ces valeurs sont récupérées sur un masque de saisie, j'ai 3 champs que l'on rempli (numériquement), après on valide l'enregistrement et les données sont foutues dans la feuille qui fait office de base temp.
Cependant il y a un 4° champ qui lui revient progressivement à zéro en fonction des chiffres tapées dans les 3 autres champs numériques.
 
edit: J'espère être assez clair


Message édité par nexius26 le 23-06-2006 à 15:16:23
n°1393790
vicray
Posté le 23-06-2006 à 16:35:48  profilanswer
 

as tu fait copie avec lin tout symplement

n°1393800
vicray
Posté le 23-06-2006 à 16:41:08  profilanswer
 

plein de faute de frappe  excuse  je recommence
 
as tu fais apres copie de ton fichier  edition collagespecial avec liaison
 
cela evitera peu etre une macro inutile

n°1393892
nexius26
Yeah !!!!!!!!!
Posté le 23-06-2006 à 17:44:41  profilanswer
 

Ben il se trouve qu'en changeant de PC (et aussi de version d'office) je trouve mes données qui sont ignorées sur le pc qui doit en principe recueillir tout le bordel.
@ vicray
 Ta solution semble intéressante mais il faudrait que je crée une autre macro car mon "meta-classeur va chercher 17 fichiers excel qui sont mis à jour hebdomadairement et si sur chaque feuille faut faire la copie avec liaison (je n'y avais pas du tout pensé), ça va être long et super pénible et on veut justement que ça soit rapide et automatique...
Donc je vais laisser tel quel mais sur une autre version office.
 
Tot cas merci à tou :jap:

n°1393908
kiki29
Posté le 23-06-2006 à 18:05:19  profilanswer
 

Pour la lecture des données il existe ExecuteExcel4Macro(argument) qui permet de lire des données dans des classeurs excel fermés

n°1393915
nexius26
Yeah !!!!!!!!!
Posté le 23-06-2006 à 18:16:04  profilanswer
 

Ouais j'avais essayé pendant un petit moment avec cette fonction, j'avais retrouvé des vieux post sur le forum mais j'y arrivais pas...
Et en fait il y a tellement de données qu'un macro c'est trop long comparé à cette requête qui me ramène tout en 20 secondes.
A terme je vais avoir 17classeurs*20champs*X000données=bcp d'infos trop lourdes pour ce pauvre excel

n°1394042
kiki29
Posté le 24-06-2006 à 01:20:32  profilanswer
 

Benchmark sur la lecture de 6 valeurs dans 200 fichiers
 
           ExecuteExcel4Macro             1.6 s
           ADO  Requête Sql               11.5 s      
           VBA "conventionnel "        242.0 s

Message cité 1 fois
Message édité par kiki29 le 24-06-2006 à 05:02:07
n°1395497
nexius26
Yeah !!!!!!!!!
Posté le 27-06-2006 à 10:09:26  profilanswer
 

kiki29 a écrit :

Benchmark sur la lecture de 6 valeurs dans 200 fichiers
 
           ExecuteExcel4Macro             1.6 s
           ADO  Requête Sql               11.5 s      
           VBA "conventionnel "        242.0 s


 
arf!!!!
 
Le problème c'est que j'ai passé un petit moment sur cette fonction et que j'ai rien capté! (mais rien)
 
et puis bon ma solution n'est que 7 fois plus lente....... :sweat:  :sweat:  
 
aurais tu des fois un petit bout de code avec quelques commentaires pour réessayer de comprendre cette fonction??
 
Thx Kiki29 je crois que tu est vraiment le pro de l'import Excel-> access sur HFR  :sol:

mood
Publicité
Posté le 27-06-2006 à 10:09:26  profilanswer
 

n°1395715
vicray
Posté le 27-06-2006 à 14:24:36  profilanswer
 

hello
 
parfois de faire des macro ne fais que alourdi le fichier et la memoire  alors (meme si c'est un peu long) je  pense que copie avec lien (a condition de ne pas modifier le nom n'y le format des fichiers sources ),fais 1 fois et chose que je pratique au boulot ,tableaux graphique ecttt  avec un trenteine voir plus de lien via reseau ne pose pas de soucis de mise a jour...
 
a+

n°1395862
kiki29
Posté le 27-06-2006 à 16:46:49  profilanswer
 

voir post du 15/05 à 21:13
http://forum.hardware.fr/hardwaref [...] 0232-1.htm

Message cité 1 fois
Message édité par kiki29 le 27-06-2006 à 16:47:44
n°1395941
nexius26
Yeah !!!!!!!!!
Posté le 27-06-2006 à 18:16:21  profilanswer
 


 
[mode coupe du monde on]
 
Thx, si la france perd je regarderai ton code et je te tiens au jus pour te dire si je comprends
 
[mode coupe du monde off]


Message édité par nexius26 le 27-06-2006 à 18:17:36
n°1397092
nexius26
Yeah !!!!!!!!!
Posté le 29-06-2006 à 11:46:51  profilanswer
 

Bon alors j'ai regardé et j'ai réussi à faire la fonction.
 
Résultat: c'est trop long, j'ai importé (que) 20 000 il ma fallu 20 minutes, c'est pas possible je dois etre amené à en recevoir quasi hedomadairement 39000 lignes * 65 colonnes et des brouettes
 
Pour ceux à qui ca plait ils peuvent calculer le temps nécessaire, c'est assez colossal

n°1397100
jpcheck
Pioupiou
Posté le 29-06-2006 à 11:51:40  profilanswer
 

et  si l'importation était automatisée via une commande shell, pendant la nuit ?

n°1397124
nexius26
Yeah !!!!!!!!!
Posté le 29-06-2006 à 12:05:49  profilanswer
 

Ca va devoir tourner sur un PC portable....alors no serveur, c'est pas moi qui décide. Et puis je suis pas sur que la nuit suffise!!!
 
Donc les requêtes me semblent très bien


Message édité par nexius26 le 29-06-2006 à 12:06:41
n°1397298
kiki29
Posté le 29-06-2006 à 16:23:19  profilanswer
 

Par curiosité j'ai créé un fichier Excel de 65 colonnes x 39000 lignes  
contenant des nombres et qui pèse autour de 16 Mo
J'ai fait un test en utilisant Delphi7 + Composant Lisant/Ecrivant  
des fichiers Excel natifs. Delphi permet de créer des exé autonomes.
 
La lecture des données du fichier Excel vers une grille prend 17 s  
par contre la retranscription de la grille vers un fichier Excel est trop lente
mais cette grille peut être sauvée en texte tabulé ( en 8 s )  
et le réimport de texte tabulé dans Excel ne pose aucun problème

n°1397352
nexius26
Yeah !!!!!!!!!
Posté le 29-06-2006 à 17:30:19  profilanswer
 

kiki29 a écrit :

Par curiosité j'ai créé un fichier Excel de 65 colonnes x 39000 lignes  
contenant des nombres et qui pèse autour de 16 Mo
J'ai fait un test en utilisant Delphi7 + Composant Lisant/Ecrivant  
des fichiers Excel natifs. Delphi permet de créer des exé autonomes.
 
La lecture des données du fichier Excel vers une grille prend 17 s  
par contre la retranscription de la grille vers un fichier Excel est trop lente
mais cette grille peut être sauvée en texte tabulé ( en 8 s )  
et le réimport de texte tabulé dans Excel ne pose aucun problème


 
Ben moi au final j'ai 39000 lignes divisées dans 18 fichiers Excel, et la rapatriement prend un temps énorme
 
Parce que ma macro est une macro sous excel donc là je comprends pas trop le delphi et puis je comprends plus rien jusqu'à la fin (si je comprends que c'est visiblement plus court). Parce que niveau prog je suis pas allé loin, me suis arrété au VB VBA

n°1397433
kiki29
Posté le 29-06-2006 à 19:46:51  profilanswer
 

l'exe lit maintenant n fichiers, si cela t'intéresse je peux te zipper cet exe pour voir et te laisser juge. Prends contact en MP

Message cité 1 fois
Message édité par kiki29 le 06-01-2007 à 06:43:49
n°1397637
kiki29
Posté le 30-06-2006 à 01:51:26  profilanswer
 

Suite et Fin ?
Sur un test Delphi+Composant Excel sur 18 fichiers Excel ( environ 20 Mo) de données
avec un paramétrage réglé par défaut à 65 Colonnes x 4000 Lignes pour chaque fichier,  
ce qui fait 72000 Lignes à lire, et 45374 rééllement utiles  
et enregistrées dans un fichier en texte tabulé  
en environ 32 s pour 13 Mo

Message cité 1 fois
Message édité par kiki29 le 01-07-2006 à 04:00:47
n°1398420
kiki29
Posté le 01-07-2006 à 01:52:51  profilanswer
 

Mon exe tourne correctement qq soit le nb de colonnes ou lignes des n fichiers Excel ( nb colonnes et lignes peuvent varier d'un fichier à l'autre)  
cela dans un temps correct sans charger le systeme.  
Ici effectivement la solution VBA ne semble pas la bonne vu le volume de données , le composant que j'ai utilisé n'existe pas pour VB6.
 
Test sur 18 fichiers (20 mo)  au final  45368 lignes (2974965 cellules) traités en 22s
Il n'y plus qu'a importer le fichier texte tabulé résultant dans Excel
 
Un exé autonome est dispo si tu veux le tester en situation réelle ?
l'installation est minimaliste il suffit de placer l'exé dans un dossier, les qqs parametres nécessaires sont sauvés au même niveau dans un fichier ini ,rien n'est inscrit dans la base de registre.

Message cité 1 fois
Message édité par kiki29 le 01-07-2006 à 15:24:31
n°1398615
nexius26
Yeah !!!!!!!!!
Posté le 01-07-2006 à 18:11:09  profilanswer
 

kiki29 a écrit :

l'exe lit maintenant n fichiers, si cela t'intéresse je peux te zipper cet exe pour voir et te laisser juge. Prends contact à phlh29@wanadoo.fr


 
Oui ça m'intéresse, je vais prendre contact
 

kiki29 a écrit :

Suite et Fin ?
Sur un test Delphi+Composant Excel sur 18 fichiers Excel ( environ 20 Mo) de données
avec un paramétrage réglé par défaut à 65 Colonnes x 4000 Lignes pour chaque fichier,  
ce qui fait 72000 Lignes à lire, et 45374 rééllement utiles  
et enregistrées dans un fichier en texte tabulé  
en environ 32 s pour 13 Mo


 
La seule vraiable qui change dans l'import c'est le nombre de lignes qui s'incrémentent, le nombre de colonnes reste inchangé
 

kiki29 a écrit :

Mon exe tourne correctement qq soit le nb de colonnes ou lignes des n fichiers Excel ( nb colonnes et lignes peuvent varier d'un fichier à l'autre)  
cela dans un temps correct sans charger le systeme.  
Ici effectivement la solution VBA ne semble pas la bonne vu le volume de données , le composant que j'ai utilisé n'existe pas pour VB6.
 
Test sur 18 fichiers (20 mo)  au final  45368 lignes (2974965 cellules) traités en 22s
Il n'y plus qu'a importer le fichier texte tabulé résultant dans Excel
 
Un exé autonome est dispo si tu veux le tester en situation réelle ?
l'installation est minimaliste il suffit de placer l'exé dans un dossier, les qqs parametres nécessaires sont sauvés au même niveau dans un fichier ini ,rien n'est inscrit dans la base de registre.


 
Pfiouuuuu..... :heink:  
Oui ok ça me semble jouable, donc je vais prendre contact avec toi pour récupérer l'exé et je testerai ça lundi, je te tiens au jus,
 
petit hors sujet: tu pourrais presque faire un tuto pour l'export Excel-->Excel  
 
bon week end  :hello:

n°1409082
kiki29
Posté le 19-07-2006 à 07:05:08  profilanswer
 

l'exé autonome ( Xls2Tab ) est téléchargeable sur http://www.fobec.com/CMS/blog.php?_id=7
Il supprime les caractères indésirables : espaces debut/fin,espaces surnuméraires,caractères non imprimables, chr(160) etc. et génère un fichier texte tabulé final et/ou Excel ( réparti sur plusieurs feuilles si Nb Lignes > 65536 )


Message édité par kiki29 le 18-07-2010 à 15:50:49
n°1410027
kiki29
Posté le 20-07-2006 à 11:01:44  profilanswer
 

Version XL ( sans suppression des caractères indésirables )
Outils | References Cocher Microsoft ActiveX Data Objects 2.x Library
 
Adapter les 4 variables au contexte d'utilisation


Const Dossier As String = "C:\Transfert\Test\"
Const NomFeuille As String = "Test"
Const FichierRch As String = "Prod ## ## ##.xls"
Const Plage As String = "A1:BM5000"



Option Explicit
 
Dim NbFichiers As Integer
Const Dossier As String = "C:\Faq\FaqVba\Exemples\LectureDonnees\Ado\ADO\Test"
Const NomFeuille As String = "Feuil1"
Const Plage As String = "C6:G26"
Const FichierRch As String = "Classeur*.xls"
 
Sub LireDatas_Tst()
Dim NomFichier As String, Tableau As Variant
Dim Debut As Variant, r As Long
Dim i As Long, NumeroLigne As Long
 
    Application.StatusBar = ""
    Debut = Time()
 
    ShFichiers.Cells.Clear
    ListeFichiers Dossier
 
    Application.ScreenUpdating = False
    ShDatas.Cells.Clear
    NumeroLigne = 1: r = 1
    For i = 1 To NbFichiers
        NomFichier = Dossier & "\" & ShFichiers.Range("A" & NumeroLigne)
        LireDonnéesADO NomFichier, NomFeuille, Plage, Tableau
        With ShDatas
            .Range("A" & r, .Cells(r + UBound(Tableau, 1) - 1, _
                                   UBound(Tableau, 2))).Value = Tableau
            r = .Range("A65536" ).End(xlUp).Row + 1
        End With
        NumeroLigne = NumeroLigne + 1
        Application.StatusBar = i & " / " & NbFichiers
    Next
 
    ShDatas.Select
    Cells.Select
    Selection.Columns.AutoFit
    Range("C1" ).Select
 
    Application.StatusBar = "Terminé : " & Format((Time() - Debut) * 100000, "0.00" )
 
    Application.ScreenUpdating = True
End Sub
 
Private Sub ListeFichiers(ByVal NomDossierSource As String)
Dim NomFichier As String, TabFichiers() As String
Dim r As Long, i As Long
 
    If Right(NomDossierSource, 1) <> "\" Then _
       NomDossierSource = NomDossierSource & "\"
    NomFichier = Dir(NomDossierSource)
 
    Erase TabFichiers
    ShFichiers.Cells.Clear
    NbFichiers = 0
 
    Do While Len(NomFichier) > 0
        If UCase(NomFichier) Like UCase(FichierRch) Then
            NbFichiers = NbFichiers + 1
            ReDim Preserve TabFichiers(1 To NbFichiers)
            TabFichiers(NbFichiers) = NomFichier
        End If
        NomFichier = Dir()
    Loop
 
    r = 1
    If NbFichiers > 0 Then
        For i = 1 To UBound(TabFichiers)
            ShFichiers.Cells(r, 1) = TabFichiers(i)
            r = r + 1
        Next
    End If
End Sub
 
Sub LireDonnéesADO(ByVal Fichier As String, ByVal Feuille As String, _
                   ByVal Plage As String, ByRef TableauDatas As Variant)
Dim Conn As ADODB.Connection, Cmd As ADODB.Command
Dim Rs As ADODB.Recordset
Dim Ligne As Long, Colonne As Integer
 
    Set Conn = New ADODB.Connection
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Data Source=" & Fichier & ";" & _
              "Extended Properties=""Excel 8.0;HDR=No;"";"
 
    Set Cmd = New ADODB.Command
    Cmd.ActiveConnection = Conn
    Cmd.CommandText = "SELECT * from `" & Feuille & "$" & Plage & "`"
 
    Set Rs = New ADODB.Recordset
    Rs.Open Cmd, , adOpenKeyset, adLockOptimistic
    ReDim TableauDatas(1 To Rs.RecordCount, 1 To Rs.Fields.Count)
 
    Rs.MoveFirst
    Do While Not Rs.EOF
        For Ligne = 1 To Rs.RecordCount
            For Colonne = 0 To Rs.Fields.Count - 1
                TableauDatas(Ligne, Colonne + 1) = Rs.Fields(Colonne).Value
            Next
            Rs.MoveNext
        Next
    Loop
 
    Conn.Close
    Set Rs = Nothing
    Set Cmd = Nothing
    Set Conn = Nothing
End Sub


Message édité par kiki29 le 10-03-2008 à 20:57:48
n°1410817
nexius26
Yeah !!!!!!!!!
Posté le 21-07-2006 à 09:36:09  profilanswer
 

Thanks mais le petit exé est vraiment super, je lui reste fidèle

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème avec Excel

 

Sujets relatifs
[VB & EXCEL] Problème de récupération de dateExport Excel probleme
Problème VBA - Excel / Variable / range[sql/Excel] requête sql vers Excel : problème de saut de ligne ...
Probleme sous Excel (fonction index) urgentProblème excel... [RESOLU]
Probleme separation ; dans excel pour csvProblème sur Macro Excel
probleme de lecture/ecriture dans un fichier excelenorme probleme excel
Plus de sujets relatifs à : Problème avec Excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR