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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [RESOLU] Débutant - Tri de données

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Débutant - Tri de données

n°2227761
joyoftech
Pigs have flown
Posté le 12-05-2014 à 11:25:10  profilanswer
 

Bonjour,
 
Je débute en VBA. Et les erreurs sont sûrement en conséquence.
Je cherche tout d'abord à exécuter une macro dès l'ouverture du fichier joint. Il ouvre un fichier CSV dans lequel se trouve trois données qui m'intéressent.
Dans le fichier joint, je recopie une donnée du fichier CSV selon une recherche à deux critères avec BDLIRE au bon endroit dans mon fichier joint, et si la recherche n'aboutit pas, je remplis un marqueur avec des 1.
Je rencontre trois problèmes :
- le CSV utilise des ; en séparateurs. Quand je l'ouvre avec Excel "normalement" (i.e. par double-clic  :pt1cable: ) il me sépare bien les colonnes ; mais quand le fichier est ouvert par Workbooks.Open...(*.CSV) il ne les sépare pas correctement (il attend sans doute un format américain avec des virgules en séparateurs). Comment faire pour l'ouvrir correctement ?
- Ma condition de succès d'une RECHERCHEH ne fonctionne pas (erreur 438) :
" If Not (WorksheetFunction.IsNA(WorksheetFunction.HLookup(wb2.Sheets("coherence" ).Cells(k * 240 + 1, 1), wb1.Range("C:C" ), 1, False))) "
- Je n'arrive pas à remplir les cellules par le contenu d'une autre (erreur 1004) :
" wb2.Sheets("tri" ).Cells(2, 1).Value = wb2.Sheets("coherence" ).Cells((k - 1) * 240 + x, 1).Value "
 
Le fichier en question : http://www.cjoint.com/data/0EmlzpI6mXW.htm
 
Merci d'avance  :ange:


Message édité par joyoftech le 13-05-2014 à 14:14:27
mood
Publicité
Posté le 12-05-2014 à 11:25:10  profilanswer
 

n°2227775
joyoftech
Pigs have flown
Posté le 12-05-2014 à 12:37:43  profilanswer
 

Premier problème résolu : ajout d'une ligne avant la déclaration et ajout Local:=True... Simple en somme.

n°2227776
Marc L
Posté le 12-05-2014 à 12:43:14  profilanswer
 

 
           Bonjour,
 
           consulter l'aide VBA de la méthode  Find  pour effectuer une recherche …
 
           Quant à l'erreur 1004, il s'agit soit d'une erreur quant au nom d'une feuille de calculs soit d'une erreur de conception
           et là il suffit de placer un point d'arrêt sur la ligne déclenchant l'erreur et d'y vérifier le contenu des variables …
           Du reste c'est certainement le même souci pour RECHERCHEH …


Message édité par Marc L le 12-05-2014 à 12:49:29
n°2227781
joyoftech
Pigs have flown
Posté le 12-05-2014 à 13:56:32  profilanswer
 

J'ai pu avancer ; ma recherche fonctionne, mais pas la fonction BDLIRE (Dget) qui renvoie une erreur 1004 : "Impossible de lire la propriété Dget de la classe WorksheetFunction".
 
Je n'ai rien trouvé de significatif dans l'aide, ni sur d'autres topics (erreurs courantes pour les RECHERCHEH et RECHERCHEV apparemment...)
 
Le bout problématique :
 

Code :
  1. Dim a_chercher2 As Variant
  2. Dim res2 As Variant
  3. Dim chercher_dans As Variant
  4. Set a_chercher2 = wb2.Sheets("tri" ).Range("A1:B2" )
  5. Set chercher_dans = wb1.Sheets("20140501_0700_EXTRACTION_6mn_0h" ).Range("A:D" )
  6. Set res2 = WorksheetFunction.DGet(chercher_dans, "debit", a_chercher)


 
Une idée ?


Message édité par joyoftech le 13-05-2014 à 12:40:53
n°2227802
Marc L
Posté le 12-05-2014 à 16:54:30  profilanswer
 

 
           Merci d'utiliser l'icône dédiée pour baliser le code conformément aux règles du forum …
 
           En général l'aide intégrée au VBA ou à Excel suffit amplement.
 
           Sinon faire directement la recherche dans une cellule via une formule de calculs qui, une fois au point,
           ne sera pas difficile à traduire en VBA (en lisant le contenu de sa propriété  Formula)  …
 

n°2227881
joyoftech
Pigs have flown
Posté le 13-05-2014 à 14:11:51  profilanswer
 

Pour ceux qui galèrent avec la fonction BDLIRE (Dget) en VBA comme moi, voilà comment j'ai procédé :
 

Code :
  1. wb2.Sheets("coherence" ).Cells((k - 1) * 240 + x + 1, 3).Formula = "=DGET('20140501_0700_EXTRACTION_6mn_0h0h.csv'!C1:C4,""debit"",tri!R1C1:R2C2)"
  2. wb2.Sheets("coherence" ).Cells((k - 1) * 240 + x + 1, 3).Formula = wb2.Sheets("coherence" ).Cells((k - 1) * 240 + x + 1, 3).Value


 
Comme la formule fonctionnait lorsque tapée directement dans Excel, comme l'a suggéré Marc L j'ai copié la formule sortie par l'enregistreur de macro.
range.Formula = range.Value permet de faire ensuite un pseudo copier/coller uniquement la valeur sans être aussi gourmand si j'ai bien compris.
 
Il y a sûrement plus efficace néanmoins...
 
Merci !

n°2227882
Marc L
Posté le 13-05-2014 à 14:19:35  profilanswer
 

 
           Peut-être directement en utilisant la puissante méthode  Evaluate  …


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

  [RESOLU] Débutant - Tri de données

 

Sujets relatifs
Base de données ou fichier de données ?VBA excel Suppression ligne sous condition
base de données d'utilisateurs pour assurer la sécurité du service.PETITE DEMANDE : comment récupérer des données XML dans un flash
Affichage de la fenêtre word - VBA ExcelCompteur d'heures de travail par projet VBA EXCEL
Extraction données via scriptproblème pour inserer des données dans une table à partir d'un Jframe
VBA simple : comment faire une série d'identifiant à partir d'un chiff 
Plus de sujets relatifs à : [RESOLU] Débutant - Tri de données


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