Besoin d'une formule de math

Besoin d'une formule de math - VB/VBA/VBS - Programmation

Marsh Posté le 19-05-2005 à 20:55:06    

While Not EOF(iFreeFile)  
 
  startPos = 1  
 
  Line Input #1, sTmp 'Lire une ligne complète et la mettre dans sTmp.  
 
  For x = 0 To 5  
     
    iLen = InStr(startPos, sTmp, sPipe) - startPos    
         
    List1.AddItem Mid(sTmp, startPos, iLen)  
     
    startPos = startPos + iLen + 1  
   
  Next  
   
  List1.AddItem Mid(sTmp, startPos, Len(sTmp))  
  'Je voudrais supprimer cette ligne et mettre for x = 0 to 6 et mettre startpos = startpos + ilen + 1 au début et faire en sorte que ilen retourne soit la longueur de la chaine stmp ou soit il retourne la valeur de Instr si c pas 0, donc qu'il renvoit soit la position de la string sPipe ou soit la longueur de la chaine sTmp si c 0, donc jamais 0  
 
Wend  
 
Donc une formule de math qui doit renvoyer la valeur de sTmp ou la valeur de InStr() si elle égale pas 0

Reply

Marsh Posté le 19-05-2005 à 20:55:06   

Reply

Marsh Posté le 19-05-2005 à 23:49:46    

D'après ce que je comprends du résultat recherché, j'ai pondu un petit quelque chose.
Bon, d'accord c'est plus long que ce que tu avais fait mais c'est nettement plus souple et plus universel.
 
Dans le userform, je mets le code suivant:

Private Sub cmdGo_Click()
 
  Dim iInputFile As Integer
  Dim sTextFile As String
  Dim sTmp As String
  Dim vArray As Variant
  Dim vI As Variant
   
  sTextFile = "D:\My Documents\Excel\Forum\TestPourExcel.txt"
   
  lst1.Clear
  iInputFile = FreeFile()
  Open sTextFile For Input As iInputFile
  While Not EOF(iInputFile)
    Line Input #iInputFile, sTmp
    vArray = Split(sTmp, "|" )
    For Each vI In vArray
      lst1.AddItem (vI)
    Next vI
  Wend
  Close iInputFile
 
End Sub


J'ai pris la liberté de définir le séparateur "|" en voyant que tu l'avais nommé sPipe.
 
Au cas où tu travaillerais encore sous Office 97, j'ai recréé la fonction (ou méthode) Split de VBS (ou JScript).

Function Split(sLine As String, sSep As String) As Variant
   
  Dim aRet() As String
  Dim iI As Integer
  Dim iLen As Integer
  Dim sBuff As String
  Dim sChar As String
   
  ReDim aRet(0)
  iLen = Len(sLine)
  sBuff = ""
   
  For iI = 1 To iLen
    sChar = Mid$(sLine, iI, 1)
    If sChar = sSep Then
      aRet(UBound(aRet)) = sBuff
      sBuff = ""
      ReDim Preserve aRet(UBound(aRet) + 1)
    ElseIf iI = iLen Then
      sBuff = sBuff & sChar
      aRet(UBound(aRet)) = sBuff
    Else
      sBuff = sBuff & sChar
    End If
  Next iI
  Split = aRet
End Function


J'espère que ça fait ce que tu veux.
 
Edit --> Remplacement de SplitText par Split et commentaire pour les utilisateurs de Office 97.


Message édité par AlainTech le 20-05-2005 à 00:39:55

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 19-05-2005 à 23:56:37    

Merci, je vais regarder tout cela  :jap:

Reply

Marsh Posté le 20-05-2005 à 00:35:25    

Comme je travaille presqu'exclusivement sur Excel 97, la fonction Split n'y est pas présente.
Par contre, elle l'est dans des versions plus récentes.
 
Il suffit donc de remplacer SplitText par Split dans la ligne suivante

vArray = SplitText(sTmp, "|" )


et ignorer le code que j'ai dit de mettre dans un module.
 
Dommage, j'étais pourtant fier de moi... :cry:


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 26-08-2005 à 09:44:32    

:) Très bien pour le remplacement de SPLIT.
Cela m'a bien servi.
Cela n'aura pas été inutile.
Tu peux être fier de toi.
 :bounce:  
 
 

AlainTech a écrit :

Comme je travaille presqu'exclusivement sur Excel 97, la fonction Split n'y est pas présente.
Par contre, elle l'est dans des versions plus récentes.
 
Il suffit donc de remplacer SplitText par Split dans la ligne suivante

vArray = SplitText(sTmp, "|" )


et ignorer le code que j'ai dit de mettre dans un module.
 
Dommage, j'étais pourtant fier de moi... :cry:


Reply

Sujets relatifs:

Leave a Replay

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