Créer une fonction personnelle
Problème : Comment créer fonction qui réponde à nos besoins personnels alors que l'équipe Microsoft ne semble pas l'avoir prévue. Dans cet exemple, nous allons comparer le contenu de 2 listes de valeurs et afficher en regard de la seconde valeur si "oui" ou "non" elle existe dans la première liste
Un dessin vaut mieux qu'un long discours
Nous allons pour chaque cellule de la colonne B vérifier si cette valeur existe dans la colonne A en indiquant cette information par un "oui" ou un "non" dans une cellule choisie. Ici, dans la colonne C, mais ce n'est pas obligatoire; nous verrons que nous pourrons utiliser cette fonction au même titre que les fonctions standards d'Excel
Si nous examinons notre problème, on constate que l'on va devoir manipuler différentes choses,
- d'abord, une cellule dans la colonne B (première variable)
- ensuite la comparer dans la plage des cellules de la colonne A (seconde variable)
- et obtenir un résultat (troisième variable)
Lançons nous dans VBE (Visual Basic Editor) avec l'habituel ALT+F11 et écrivons le code
Function Existe(valeur As Range, adr1 As Range) As String
Dim c As Range
For Each c In adr1
If valeur = c Then
Existe = "oui"
End If
Next
If Existe <> "oui" Then
Existe = "non"
End If
End Function
Commentaire :
- Pour Excel, les cellules sont des "Range". Ainsi une cellule est un "range" de une cellule et l'on peut écrire Range("A1")...Mais cela peut être un ensemble de cellules, on peut donc aussi écrire Range("A1:A20")...Le tout , pour nous est de bien imaginer l'objet dont on parle : est-ce une seule cellule ou une plage de cellules. Gardons bien ce concept en tête
- J'ai dit tout à l'heure que nous allions examiner une cellule de la colonne B et comme je ne peux pas savoir à l'avance laquelle je vais traiter, je vais lui donner un nom générique, ici j'ai choisi valeur, comme Excel lui ne connait pas valeur, je vais lui indiquer le type de cette variable et comme c'est une cellule, je note valeur as Range (observez la première ligne de code de notre fonction)
- La seconde variable est composée des cellules de la colonne A, là aussi, je ne sais pas si ce sera toujours cette colonne là qui sera utilisée et je lui définis donc un nom générique adr1 as Range Dans le code, il faudra bien à un moment comparer valeur aux cellules de adr1.Il faut donc que je décompose adr1, mais on le réalise à l'intérieur de la fonction, voilà l'utilité de la variable c (pour cellule). c est donc une composante de adr1
- Le résultat de nos cogitations doit maintenant prendre place, et dans excel la valeur de retour d'une fonction est toujours récupéré par le nom de la fonction, c'est pour cela que le résultat du traitement doit être ici inclus dans Existe
- On peut donc dès maintenant écrire notre fonction de manière classique
- Ou utiliser l'aide des fonctions en appuyant sur l'icône Fx dans la barre d'outils, nous retrouverons la nôtre dans la rubrique personnalisée. N'oubliez pas que valeur doit désigner une seule cellule et que ard1 peut désigner plusieurs cellules. Le Résultat indiquera "oui" ou "non"...that's all
télécharger le fichier exemple FonctionOuiNon
FIN