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

Débutant - Tri de données [RESOLU] - VB/VBA/VBS - Programmation

Marsh Posté le 12-05-2014 à 11:25:10    

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
Reply

Marsh Posté le 12-05-2014 à 11:25:10   

Reply

Marsh Posté le 12-05-2014 à 12:37:43    

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

Reply

Marsh Posté le 12-05-2014 à 12:43:14    

 
           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
Reply

Marsh Posté le 12-05-2014 à 13:56:32    

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
Reply

Marsh Posté le 12-05-2014 à 16:54:30    

 
           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)  …
 

Reply

Marsh Posté le 13-05-2014 à 14:11:51    

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 !

Reply

Marsh Posté le 13-05-2014 à 14:19:35    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed