Soyez le premier à donner votre avis sur cette source.
Snippet vu 7 606 fois - Téléchargée 20 fois
'===============================dans un module standard(VBA) ou .bas (VB6)=============================== Option Explicit '===== le présent code, déposé par ucfoutu sur VBFrance, est la seule propriété de VBFrance '=====VBFrance en autorise les libres copie et utilisation à la seule condition d'y laisser '=====insérées les trois présentes lignes commentées Public Sub supprime_index(ByRef ARRAY_A_TRAITER, INDEX_ou_texte_element_A_SUPPRIMER) Dim I As Long, Sucf As String If VarType(INDEX_ou_texte_element_A_SUPPRIMER) = 8 Then Sucf = INDEX_ou_texte_element_A_SUPPRIMER I = ucfI(ARRAY_A_TRAITER, Sucf) Else I = INDEX_ou_texte_element_A_SUPPRIMER End If If I >= 0 Then ARRAY_A_TRAITER = ucfS(ARRAY_A_TRAITER, I) End Sub Public Sub ajoute_index(ByRef ARRAY_A_TRAITER, VALEUR_A_AJOUTER As String, INDEX_A_ATTRIBUER_A_CETTE_VALEUR As Long) ARRAY_A_TRAITER = ucfA(ARRAY_A_TRAITER, VALEUR_A_AJOUTER, INDEX_A_ATTRIBUER_A_CETTE_VALEUR) End Sub Public Function retourne_index(ByVal ARRAY_A_TRAITER, CHAINE_CONCERNEE As String) As Long retourne_index = ucfI(ARRAY_A_TRAITER, CHAINE_CONCERNEE) End Function Private Function ucfS(Aucf, Iucf) As Variant Dim Sucf As String Aucf(Iucf) = "" Sucf = Join(Aucf, Chr(0)) If Iucf = 0 Then Sucf = Mid(Sucf, 2) If Iucf = UBound(Aucf) Then Sucf = Left(Sucf, Len(Sucf) - 1) ucfS = Split(Replace(Sucf, Chr(0) & Chr(0), Chr(0)), Chr(0)) End Function Private Function ucfA(Aucf, qucf As String, Iucf As Long) As Variant If Iucf = UBound(Aucf) + 1 Then Aucf(Iucf - 1) = Aucf(Iucf - 1) & Chr(0) & Chr(0) Else Aucf(Iucf) = Chr(0) & Chr(0) & Aucf(Iucf) End If Aucf = Split(Replace(Join(Aucf, Chr(0)), Chr(0) & Chr(0), Chr(0)), Chr(0)) Aucf(Iucf) = qucf ucfA = Aucf End Function Private Function ucfI(Aucf, Cucf As String) As Long Dim I As Long, Sucf As String Sucf = Chr(0) & Join(Aucf, Chr(0)) & Chr(0) I = InStr(Sucf, Chr(0) & Cucf & Chr(0)) If I = 0 Then ucfI = -1: Exit Function Sucf = Mid(Sucf, 1, I) ucfI = UBound(Split(Sucf, Chr(0))) - 1 If ucfI < 0 Then ucfI = -1 End Function '======================================exemples d'utilisation ================================== Private Sub CommandButton1_Click() 'pour supprimer un élément (par son index ou par son contenu) Dim toto toto = Array("bonjour tout le monde", "salut les potes", "ciao", "voilà", "bye") supprime_index toto, 2 '_________________ 'ou | les deux fonctionnent 'supprime_index toto, "ciao" '___________| For I = 0 To UBound(toto) '___________ MsgBox toto(I) ' |====>> preuve Next '_________________________________| End Sub Private Sub CommandButton2_Click() 'pour ajouter un élément et lui attribuer un index Dim toto toto = Array("bonjour tout le monde", "salut les potes", "ciao", "voilà", "bye") ajoute_index toto, "Il fait beau", 2 For I = 0 To UBound(toto) '____________ MsgBox toto(I) ' |====>> preuve Next '__________________________________| End Sub Private Sub CommandButton3_Click() 'pour déterminer l'index d'un élément dont on connait le contenu Dim toto Dim resul As Long toto = Array("bonjour tout le monde", "salut les potes", "ciao", "voilà", "bye") resul = retourne_index(toto, "salut les potes") MsgBox resul End Sub
25 juin 2013 à 16:47
Merci de ton commentaire. Je ne pensais pas que les experts de Microsoft étaient aussi légers: ils ont quand même fait de grandes choses, mais en effet il y a des fois où ils ne se foulent pas trop...!
En tout cas, tu as raison: ton code met en avant l'utilisation du caractère chr(0),ce qui est rarement montré. J'ai eu l'occasion de le découvrir dans un de mes programmes.
Bon courage (et inspiration) pour de nouveaux codes.
Cdt
25 juin 2013 à 08:15
Ta source fonctionne bien et mon commentaire n'a rien a voir avec ta source (Il était tard...)
Salutation et sorry..
Dany
25 juin 2013 à 07:15
Je ne comprends pas ta remarque, surtout la partie concernant l'ajout d'un "champ" supplémentaire. Je vois vraiment mal où tu pourrais l'insérer dans un array.
25 juin 2013 à 02:15
Cette remarque ne concerne pas spécialement ton code (ton application) mais plutôt pour tous les codes dont on manipule les données stockées que ce soit dans un BD ou un array (surtout les suppressions).
MFG; Dany
24 juin 2013 à 23:23
Je crois que tu as compris (et t'en félicite) le but de cette demo.
Il n'est pas tant d'aboutir à un résultat plus rapide (encore que, dans certains cas ... oui) que de montrer ce qu'est, dans un array, le caractère nul de terminaison et comment l'utiliser.
Et tu as raison : le split et le join sont gourmands. Et pour ne rien te cacher, ils fonts tous deux appels, eux, au boucles que je "n'utilisais pas" ( pas directement, comme tu le vois, mais très surement et insidieusement via VB). Ces deux fonctions (split et Join), sont en fait des "bébelles" que Microsoft a ajoutés à VB5 pour justifier la mise sur le marché de VB6. Sans toutefois vraiment se "fouler"...
Et tu sais quoi ? Cette petite demo a pour but caché (il nous faut être aussi insidieux que Microsoft, de temps à autre) de démontrer que certaines fonctions ne sont que des leurres à bon marché. Cette demo n'est que le premier pas vers un "aboutissement" inattendu. ( comment dit-on ? Ah oui : LOL)
Amitiés.
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.