Exploiter un .xls en VB6

Résolu
Messages postés
308
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
23 mars 2010
-
Messages postés
308
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
23 mars 2010
-
Bonjour,

J'ai parcouru le forum pour savoir si cela était possible de parcourir un fichier .xls en VB6 cependant la majeure partie des posts restent sans réponses.
Actuellement j'ai un fichier .xls dans lequel je dois comparer des données avec un fichier .csv
L'avantage du .csv c'est que le Split nous sert à délimiter mes champs, cependant dans le .xls c'est pas possible et c'est la justement ou je fais appel à vous. Car en utilisant le fso, j'ai constaté que le filestream que me retourne vb est inexploitable, j'ai que des caractères en forme de carré au lieu des simples données qui sont présentes dans ce fichier .xls.
Je suis donc un peu dans le flou. Si vous avez des indications la-dessus ?

_______________________
<<<< :-: 4L!@$ :-: >>>>

14 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
Dans quelle colonne (XLS) se trouve le numero de téléphone et dans quelle colonne se trouve le numéro de la carte SIM.

NOTE. ActiveSheet.Range("A1") = ActiveSheet.Range("A" & I)
Ce que je veux dire c'est que tu spécifier l'adresse d"une cellule comme montrer

DOnc pour une boucle sur la colonne D par exemple. tu peux tres bien faire

Dim i As Long
Dim Numero As String
Dim NumSim  As String
   Numero = "0611111111"
   'pour aller de la ligne 1 a la ligne 15
   For i = 1 To 15
       'on teste le contenu de la cellule D1 puis D2 puis D3... D15
       If ActiveSheet.Range("D" & CStr(i)).Value = Numero Then
           'si = alors on récupère le numero SIM en colonne E (exemple)
           NumSim = ActiveSheet.Range("E" & CStr(i)).Value
       End If
   Next

, ----
[code.aspx?ID=41455 By Renfield]
Voila j'espere que ce petit exemple peu t'aider à avancer

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
308
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
23 mars 2010

Bon j'ai réussi à trouver la soluce ! désolé pour le retard ^^ Je poste la solution au cas où quelqu'un en aurait besoin ! Merci encore.

    For I = 2 To NbLine
        If Val(ExcelSheet.Cells(I, 5)) = Val(Replace(Numero, """", "")) Then
            Numero = Val(ExcelSheet.Cells(I, 5))
            NumeroSim = Val(ExcelSheet.Cells(I, 3))
            MsgBox NumeroSim
            Exit For
        End If
    Next I

_______________________
<<<< :-: 4L!@$ :-: >>>>
Messages postés
26
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
22 janvier 2008

Salam,

Tu peux par exemple créer un fichier .csv temporaire par copie du fichier .xls .
Tu l'exploites comme tu veux et puis tu l'effaces à la fin de ton prog.
Messages postés
308
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
23 mars 2010

bah la actuellement j'ai qu'un petit csv car il contient 30 000 enregistrements, cependant il en traite beaucoup plus que ca, car il contient toutes les cartes Sim Sfr qui est notre client, il faudrait un truc plus optimisé sinon le pc va fumer..
En gros tu me dis créer chaque ligne que je lie dans un fichier csv temporaire ?

_______________________
<<<< :-: 4L!@$ :-: >>>>
Messages postés
26
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
22 janvier 2008

tu as plus simple :

Utilises la library d'excel : Microsoft Excel Object Library

Tu trouveras tout ce que tu veux dedans.
Messages postés
308
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
23 mars 2010

Bah je l'utilise cependant je cherche comment spliter un xls, ou comment recup la valeur d'une colonne via le filestream

_______________________
<<<< :-: 4L!@$ :-: >>>>
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Avec Microsoft Excel Object Library plus besoin de splitter, tu peux parcourir ton fichier Xls par colonne par ligne, bref faire tout ce que tu souhaites comme si tu étais sous Excel.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
308
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
23 mars 2010

Bon j'utilise ce que tu m'as dis mais je bloque tjrs sur un point, comment récupérer la valeur de la colonne dans la ligne sur laquelle je suis positionné.

Dim ExcelApp As Excel.Application
Dim ExcelWB As Excel.Workbook
Dim ExcelSheet As Excel.Worksheet
Dim ExcelCols As ColumnHeaders   
Dim NbLine As Long
Dim I As Integer
    Set ExcelApp = New Excel.Application
    Set ExcelWB = ExcelApp.Workbooks.Open("C:\dev\vb6\Facturation_sim\trunk\lot500_1207.xls")
    NbLine = ActiveSheet.UsedRange.Rows.Count
   
    For I = 1 To NbLine
        If ExcelCols(4).Text = Numero Then
            Numero = ExcelCols(4).Text
            NumeroSim = ExcelCols(2).Text
            Exit For
        End If
    Next I
    ExcelApp.Workbooks.Close

_______________________
<<<< :-: 4L!@$ :-: >>>>
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Dans un objet Range contenu dans un objet worksheet, les propriétés Row et Column doivent etre ce que tu cherches.
NOTE:
1- ActiveCell est de type Range.
2- Range est le type d'objet LE plus important d'EXCEL (a mon aviq)

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
308
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
23 mars 2010

C'est vrai le Range m'aide bien, cependant dans mon code j'ai une erreur, et j'ai l'impression qu'actuellement dans mon code le numero prendra la valeur de la 1ere ligne et non la ligne sur laquelle je serai positionné. Je me trompe ?

    For I = 1 To NbLine
        If Range.Column(4) = Numero Then
            Numero = Range.Column(4)
            NumeroSim = Range.Column(2)
            Exit For
        End If
    Next I

Merci de ton aide

_______________________
<<<< :-: 4L!@$ :-: >>>>
Messages postés
308
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
23 mars 2010

j'ai modifié ainsi mon code, cependant je pense avoir résolu le problème de l'index de la colonne cependant toujours la meme erreur stipulant que l'argument n'est pas facultatif en parlant de Range.

    For I = 1 To NbLine
        If ActiveCell.Range.Columns(I, 4) = Numero Then
            Numero = ActiveCell.Range.Columns(I, 4)
            NumeroSim = ActiveCell.Range.Columns(I, 2)
            MsgBox ActiveCell.Range.Columns(I, 4)
            Exit For
        End If
    Next I

_______________________
<<<< :-: 4L!@$ :-: >>>>
Messages postés
308
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
23 mars 2010

Alala je suis paumé...ca fait 1h que je sèche sur ce truc alors que je suis sur que c'est un truc tout con pour vous vu ma faible expérience

_______________________
<<<< :-: 4L!@$ :-: >>>>
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
essaie d'expliquer ce que tu cherches as faire Exactement avec cette boucle. j'essaierais alors de te donner un exemple commenté

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
308
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
23 mars 2010

En gros j'ai 2 fichiers :

Le 1er contient des données concernant : le numero de telephone, le nombre de sms, le prix, etc... (Extension fichier : .csv)
Le 2eme contient des données concerannt : le numero de telephone et le numero de la sarte sim (Extension fichier : .xls)

    For I = 1 To NbLine
        If Range(ActiveCell.Columns(I, 4)) = Numero Then
            Numero = Range(ActiveCell.Columns(I, 4))
            NumeroSim = Range(ActiveCell.Columns(I, 2))
            Exit For
        End If
    Next I

Dans ce code, je compte le nombre de ligne de mon fichier .xls et je boucle jusqu'a ce que je trouve le Numero(Numero est une variable que je recupère avant dans le fichier .csv, il contient la valeur d'un numéro de portable sans espace : "06 ......")
Si je trouve la correspondance dans mon fichier .xls avec celui ma variable, alors je peux recupérer le numero de la carte Sim par la suite.

Comprends-tu ?

_______________________
<<<< :-: 4L!@$ :-: >>>>