Module vb5 -> vb6

Soyez le premier à donner votre avis sur cette source.

Vue 8 850 fois - Téléchargée 252 fois

Description

Malgrès son titre (modVB6.bas), c'est au utilisateur de VB5 qu'il est adressé. Il ajoute quelques fonctions bien pratique à VB5 empreintées à VB6. Celle-ci sont :

- InstRev (de moi, déjà poster en fait, méthode bourrine et à la con [;p] )
- Round (de moi, tirer par les cheveux celle-la, nan ?)
- Replace (pas de moi)
- Split (pas de moi sur la base, mais maintenant, ouais [:)] )

Ce qui permet de faire facilement les opérations suivantes :

- Editer sans trop de difficultés le travail d'un autre travaillant sous VB6.
- Utiliser ses fonctions dans vos projets, même si je ne garantis pas l'optimisation de celle-ci.

Il manquerait FormatDateTime, mais elle est généralement peu usitée et il est quasiment plus comode d'utiliser Format("hh:nn:ss"). Je vous conseille par ailleurs de faire un tour dans l'aide sur cette fonction. C'est incroyable comme elle est puissante.

Rq qur l'utilisation de Split : Il n'y pas d'affectation directe au tableau (MArray = Split(ARG)). Je ne cois pas que ce soit possible en VB5 et pour tout vous dire, j'ai pas vraiment cherché. L'utilisation d'un array Public (Splt) me convient amplement.

Source / Exemple :


'> Split Function
Public SpltT() As String
Public Sub Splt(TMsg As String, TCar As String)

'----- Déclaration des variables locales
    Dim Ind As Long
    ReDim SpltT(0)
    
'----- Boucle de calcul
    If Right(TMsg, 1) = TCar Then TMsg = Left(TMsg, Len(TMsg) - 1)
    Do
        SpltT(UBound(SpltT)) = Mid(TMsg, Ind + 1, IIf(InStr(Ind + 1, TMsg, TCar) <> 0, _
        InStr(Ind + 1, TMsg, TCar) - Ind - 1, Len(TMsg)))
        Ind = InStr(Ind + 1, TMsg, TCar)
        ReDim Preserve SpltT(UBound(SpltT) + 1)
        DoEvents
    Loop While Ind <> 0

End Sub
'-----// Fin du code

Public Function Round#(Number#, NbreDec%)

Round = IIf(Number * 10 ^ NbreDec - Fix(Number * 10 ^ NbreDec) >= 0.5, _
Sgn(Number) * Abs(Int(-1 * Abs(Number * 10 ^ NbreDec))) / 10 ^ NbreDec, _
Sgn(Number) * Abs(Fix(-1 * Abs(Number * 10 ^ NbreDec))) / 10 ^ NbreDec)

End Function

Public Function InStrRev(MyStr As String, SearchStr As String, Optional MStart As Long, Optional Compare As VbCompareMethod) As Long
'Les p'tites variables
Dim RStr As String
Dim RSearchStr As String

'Inversion des chaînes, et oui, C kon, mé ca marche !
For I = Len(MyStr) - MStart To 1 Step -1
RStr = RStr + Mid(MyStr, I, 1)
Next
For I = Len(SearchStr) To 1 Step -1
RSearchStr = RSearchStr + Mid(SearchStr, I, 1)
Next

'Et un petit InStr classique pour finir
'--
'Le +2 est la pour paré les effets du Instr qui donne le N° caractère et non sa place
'Si vous faites InStr("TEST","TEST"), la valeur retournée sera 1...
'--
'Le reste, je pense, va de soi
'--
'pour tester le code, faites un TextBox et un CommandButton
'Dans l'Event Click du CommandButton, inscrivez
'Me.Caption = Mid(Text1.Text, InStrRev(Text1.Text, "TEST"), Len("TEST"))
'Vous verez, ca marche
InStrRev = Len(MyStr) - InStr(RStr, RSearchStr, Compare) + 2 - Len(SearchStr) - MStart
End Function

Public Function Replace(ByVal Expression As String, ByVal Trouver As String, ByVal Remplacement As String, Optional ByVal Start As Long = 1, Optional ByVal Count As Long = -1, Optional ByVal Compare As VbCompareMethod = vbBinaryCompare) As String
    '
    ' Tente de reproduire le plus fidèlement possible
    ' la fonction Replace de VB6
    '
    ' Expression     : La chaine à traiter
    ' Trouver            : L'expression ou caractère à remplacer
    ' Remplacement : L'expression ou caractère de remplacement, peux être vide
    ' Start                : Le caractère à partir duquel commencer le remplacement, défaut : 1, soit début de la chaine
    ' Count                : Le nombre de remplacement à effectuer, défaut : -1, soit illimité
    '
    Dim iPos1 As Integer            'Position où commence "Trouver"
    Dim iLngExp As Integer      'Longueur de "Expression"
    Dim iLngTrv As Integer      'Longueur de "Trouver"
    Dim iDnrPos1 As Integer  'Dernière position relevée

    'Préparations et vérifications de limites
    Replace = vbNullString
    If ((LenB(Expression) = 0) Or ((LenB(Expression) / 2) > 32767)) Then
            Err.Raise vbObjectError + 1, App.Title & ".Replace", "Le paramètre [Expression] est vide ou dépasse 32767 caractères."
            Exit Function
        Else
            iLngExp = Int(LenB(Expression) / 2)
    End If
    If ((LenB(Trouver) = 0) Or ((LenB(Trouver) / 2) > 32767)) Then
            Err.Raise vbObjectError + 2, "Replace", "Le paramètre [Trouver] est vide ou dépasse 32767 caractères."
            Exit Function
        Else
            iLngTrv = Int(LenB(Trouver) / 2)
    End If
    'If ((LenB(Remplacement) = 0) Or ((LenB(Remplacement) / 2) > 32767)) Then
    If ((LenB(Remplacement) / 2) > 32767) Then
            'On permet que "Remplacement" soit vide
            Err.Raise vbObjectError + 3, "Replace", "Le paramètre [Remplacement] est vide ou dépasse 32767 caractères."
            Exit Function
        'Else
    End If
    If ((Start < 1) Or (Start > (iLngExp - 1))) Then
            Err.Raise vbObjectError + 4, "Replace", "La valeur du paramètre [Start] est sous 0 ou dépasse la longueur de [Expression]."
            Exit Function
        'Else
    End If
    If (Count > (iLngExp - 1)) Then
            Err.Raise vbObjectError + 5, "Replace", "La valeur du paramètre [Count] dépasse la longueur de [Expression]."
        Else
            If (Count < 0) Then
                    Count = iLngExp + 1 'Illimité
                Else
                    If (Count = 0) Then Count = 1
            End If
    End If
    If (Compare = vbDatabaseCompare) Then
            Err.Raise vbObjectError + 6, "Replace", "Database Compare non supporté..."
            'Compare = vbBinaryCompare
            Exit Function
        'Else
    End If

    'Prendre le début si Start <> 1
    If (Start > 1) Then
            Replace = Left$(Expression, Start - 1)
        'Else
    End If

    'Remplacement...
    iDnrPos1 = Start
    Do
        iPos1 = InStr(iDnrPos1, Expression, Trouver, Compare)
        If (iPos1 > 0) Then
                Replace = Replace & Mid$(Expression, iDnrPos1, iPos1 - iDnrPos1)
                Replace = Replace & Remplacement
                iDnrPos1 = iPos1 + iLngTrv
                Count = Count - 1
            Else
                Replace = Replace & Mid$(Expression, iDnrPos1, iLngExp - iDnrPos1 + 1)
                iDnrPos1 = iLngExp + 1
        End If
    Loop Until ((iDnrPos1 > iLngExp) Or (Count <= 0))

    'Ramasser les miettes si Count <> -1
    If (iDnrPos1 <= iLngExp) Then
            Replace = Replace & Mid$(Expression, iDnrPos1, iLngExp - iDnrPos1 + 1)
        'Else
    End If
End Function

Conclusion :


Je n'est pas verifié autrement qu'avec ma compil' si il existe d'autres modules du genre. Je vous prie de m'excuser si tel est le cas.

A ce propos, Nix, je sait que tu es surbooké, mais si (on ne sait jamais) tu pouvais autorisés le téléchargement des Compil' par des programmes tel que FlashGet ou GetRight, ca serait sympa. (et ouais! on a pas tous l'adsl. Faudrait que je regarde, ya peut-être des fonctions d'anonymizing dessus...).

Si quelqu'un a de nouvelles fonctions ajouter, bheu... contactez-moi quoi...

Et puis une dernière chose, ce module est n'est pas 'fini' (et n'est pas destiné à l'être). Je ne sais trop comment le dire mais, il n'y a pas de gestion d'erreur, rien d'optimisé. Il me permet d'utiliser des fonctions bien utiles, je le mets à votre disposition pour VOUS, si ca peut vous etre utile et parce que ca serait bête de garder ca pour moi (je trouve qu'il a un intérêt quand même). Je vous demande juste de pas venir en râlant avec vos gros sabots en disant "Comment on peut ce dire programmeur en envoyant un module à moitié fini, en plus c'est meme pas comme ca qu'elle fonctionne Round." (je raconte pas un peu ma vie la nan ????). Cependant, j'accepte toutes les remarques constructives et les améliorations que vous pourriez apporter.
Si ca interesse vraiment du monde, alors je ferais les vraies fonctions (au maximum) de VB6, avec des gestions d'erreurs et tout...

Voila ! ca va ? ca vous a pas trop fait chié de lire tout le spitch que j'ai pondu ? (souriez quand même :D )

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Alan71
Messages postés
530
Date d'inscription
lundi 3 juin 2002
Statut
Membre
Dernière intervention
13 juin 2004

Pour pas kon me diz que j'ai pas pensé au jeunot :
- Split : dékoupe une chaine en fonction d'un caractère et place le tout dans un tableau
- Round : arrondi o nombre de décimal indiqué
- InStrRev : Recherche une chaine dans une autre et releve la position mé a l'envers ! (contrairement a InStr)
- Replace : remplace un caractère dans une chaine par un autres
Alan71
Messages postés
530
Date d'inscription
lundi 3 juin 2002
Statut
Membre
Dernière intervention
13 juin 2004

ok ok, je me galère pas trop pour la description des fonctions. mais une mauvaise utilisation doit etre capable de la fer planté. alors, fo pas trop commetre d'erreur, ce que l'on fait généralement quand on débute (et C le cas kan on ne connais pas ces fonctions, généralement).
cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
Salut Alain
Je pensais à une chose : dans VB5, il y a bien possibilité d'insérer des DLLs afin de s'en servir avec les déclarations d'api ? (me souviens plus)
Alors pourquoi ne pas transformer tes modules en un DLL ?
Le mec, sous VB5, insères ta DLL et il dispose de tes fonctions d'une manière simple.
Elle est pas bonne mon idée à moi personnelle, hein ?
Alan71
Messages postés
530
Date d'inscription
lundi 3 juin 2002
Statut
Membre
Dernière intervention
13 juin 2004

idée interessante, mais ca necessitera une dll en plus. ce module me suffit pour l'instant, et je n'ai pas réellement le tps de l'améliorer. De plus, pour split, je ne vois pas comment rebalancer la variable tableau

et puis moi, C Alan71 et pas Alain :p

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.