Explication d'une fonction

infogeo

XLDnaute Nouveau
Salut!

Je suis amené à reprendre des macros effectuées par une autre personne et à les améliorer en gros car il y a des bugs, mais il y a une fonction que je comprend pas trop et ca serait sympa si vous pourriez m'éclairer ^^

Code:
Public Function compar(m1 As String, m2 As String, Optional k As Integer = 0) As Double

    Dim i As Integer
    Dim j As Integer
    Dim r As Integer
    
    Application.Volatile
    
    j = Len(m1): r = 0
    If Len(m2) > j Then j = Len(m2)
    
    For i = 1 To j
        If k = 1 Then
            If Mid(m1, i, 1) = Mid(m2, i, 1) Then r = r + 1
        Else
            If LCase(Mid(m1, i, 1)) = LCase(Mid(m2, i, 1)) Then r = r + 1
        End If
    Next i
    
    compar = r / j
End Function


je suis pas tres bon en VBA donc c'est pour ca que je fais appel à vous =)

J'espere que vous pourrez m'aider

a+
 

Vorens

XLDnaute Occasionnel
Re : Explication d'une fonction

Hello,


Visiblement ta fonction parcours un range et contrôle l'état de certain cellule. Suivant l'état elle effectue une incrémentation de 1. La valeur renvoyée par la fonction est le résultat de la variable incrémentée r divisée par le nombre max de cellule dans ton range. (Supposition sans avoir testé la macro étant donné qu'il n'y a pas de fichier joins.

Afin de bien comprendre comment un code fonctionne je te propose de le parcourir en pas à pas (touche F8 dans l'éditeur de code). Ensuite tu afficher la fenêtre des variables afin d'en étudier l'état. Avec ses deux outils tu pourra tout analyser et comprendre et également voir à quel endroit le résultat attendu n'est pas le bon.

Meilleures salutations
 

pierrejean

XLDnaute Barbatruc
Re : Explication d'une fonction

Bonjour infogeo

La fonction compar compare deux mots (m1 et m2) et le resultat est le ratio entre le nombre de lettres identiques et a la même place dans chacun des mots et le nombre de lettres du plus grand des deux
Le k optionel a 0 permet la comparaison sans prendre en compte la casse
la casse est prise en compte lorsque le k est à 1
j'espere m'etre exprimé clairement

Edit: Salut Vorens
 

eriiic

XLDnaute Barbatruc
Re : Explication d'une fonction

Bonjour,

Le fait que ca soit application.volatile, veut dire que cette fonction peut etre utilisée n importe quand ?
Je dirais plutôt qu'elle est ré-évaluée à chaque recalcul de la feuille, même si aucun de ses paramètre ne change.
Ca me parait superflu dans ce cas (?). Sans, elle sera de toute façon ré-évaluée si un de ses antécédents change.
Me trompe-je ?
eric
 

pierrejean

XLDnaute Barbatruc
Re : Explication d'une fonction

Re

Voici l'officiel :

Une fonction volatile doit être recalculée chaque fois qu'un calcul est effectué dans une cellule quelconque de la feuille de calcul. Une fonction non volatile n'est recalculée qu'en cas de changement des variables d'entrée

Eriiiic a donc parfaitement raison
 

Statistiques des forums

Discussions
312 485
Messages
2 088 808
Membres
103 971
dernier inscrit
abdazee