alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010
-
8 janv. 2008 à 15:16
alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010
-
9 janv. 2008 à 11:51
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 ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 9 janv. 2008 à 11:39
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
alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010 9 janv. 2008 à 11:51
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
yourspinner
Messages postés26Date d'inscriptionmardi 20 mai 2003StatutMembreDernière intervention22 janvier 2008 8 janv. 2008 à 15:27
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.
alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010 8 janv. 2008 à 15:34
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!@$ :-: >>>>
Vous n’avez pas trouvé la réponse que vous recherchez ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 8 janv. 2008 à 16:56
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.
alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010 9 janv. 2008 à 09:25
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
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 9 janv. 2008 à 09:29
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)
alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010 9 janv. 2008 à 09:44
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
alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010 9 janv. 2008 à 10:18
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
alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010 9 janv. 2008 à 11:20
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.