débutant - Créer nouvelle fonction

pdemaret

XLDnaute Nouveau
Bonjour

Avis aux connaisseurs avant d'aller plus loin :
Je qualifie ma connaissance excell de moyenne (par rapport aux balaises qu'il y a ici), par contre celle des macro et VB est nulle.
Je suis programmeur de formation donc ca ira vite, mais je ne sais pas comment m'y prendre pour commencer une macro, comment les appeller, etc ...
Merci de bien vouloir m'aider

J'ai justement un cas très pratique qui va me permettre d'être plongé dans le sujet.

Dans un de mes tableaux j'utilise une formule classique (ensemble de fonctions) un grand nombre de fois. Cette formule est longue à écrire.
Souvent les cellules possèdent un SI où la fameuse formule se retrouve à la fois dans le 'then' et dans le 'else' (avec des param différents)
Bref ca devient très dur à éditer.

Voici un exemple idéal pour créer une fonction spécifique qui reprendrait la formule et qui rendrait un résultat.
Je dois donc utiliser je suppose une macro ou un développement VB.

Mes questions :
  • Comment commencer le développement de cette fonction ?
  • Y a t'il un canevas standard de procédure VB dans lequel on écrit le code ?
  • Comment appeler cette fonction ?
  • Comment passer des arguments ?
  • Comment recevoir le résultat ? les résultats ?
  • Y a t'il des classes à définir ?
  • Gestion des erreurs ?

Si vous avez un tutorial où tout cela serait expliqué ce serait parfait.

J'espère ne pas trop en demander, mais je suis vraiment coincer.

Merci d'avance
 

pdemaret

XLDnaute Nouveau
Re : débutant - Créer nouvelle fonction

Bonjour à tous

Je reviens à nouveau dans ce post de débutant en fonction.

Je désire utiliser la fonction GAUCHE() donc ma fonction et effectivement dans l'enregisteur macro, excel traduit cela étrangement en LEFT() :)

Et bien quand dans ma fonction je tape WorksheetFunction.Left(a1, 4) ça ne marche pas.
De fait dans la liste des fonctions disponibles dans l'aide à la frappe, il n'y a pas de LEFT. D'ailleurs il y a plein d'autres fonctions non disponibles.

Qu'est-ce que je n'ai pas compris ?

Merci
 

JNP

XLDnaute Barbatruc
Re : débutant - Créer nouvelle fonction

Re :),
Déjà, Left est une fonction native, donc elle n'a pas été ajoutée à WorkSheetFunction. Il faut l'utiliser direct
Code:
Left("tata", 2)
par exemple.
Deuxièmement, si c'est à la cellule A1 que tu veux faire référence, il faut soit un Range("A1"), soit un Cells(1, 1), qu'il est prudent de faire précéder de la feuille, soit
Code:
Left(WorkSheets("Feuil1").Range("A1"), 4)
Enfin, dans le principe d'une fonction, tu évites d'utiliser une référence absolue, et tu passes plutôt un Range via ta fonction
Code:
[COLOR=blue]Function[/COLOR] Test(Cellule [COLOR=blue]As[/COLOR] Range) [COLOR=blue]As String[/COLOR]
[COLOR=blue]If[/COLOR] Cellule.Count > 1 [COLOR=blue]Then Exit Function[/COLOR]
[COLOR=blue]If[/COLOR] Len(Cellule.Text) < 4 [COLOR=blue]Then[/COLOR] Test = Cellule.Text [COLOR=blue]Else[/COLOR] Test = Left(Cellule.Text, 4)
[COLOR=blue]End Function[/COLOR]
Bon courage :cool:
 

Staple1600

XLDnaute Barbatruc
Re : débutant - Créer nouvelle fonction

Bonjour à tous


Dans la série "comment s'amuser avec VBA un dimanche matin"

Code:
Function gd(s$, Optional sens = "g", Optional nbcar = 4)
gd = IIf(sens = "g", Left(s, nbcar), Right(s, nbcar))
End Function
Code:
Sub test()
Dim a$, b$, c$, d$, e$
a = "Bonjour"
b = gd(a): c = gd(a, , 3) 'gauche
d = gd(a, "d"): e = gd(a, "a droite toute! mille sabord", 2) 'droite
MsgBox a & vbLf & b & vbLf & c & vbLf & d & vbLf & e
End Sub
 

Discussions similaires

Réponses
6
Affichages
231
Réponses
16
Affichages
613

Statistiques des forums

Discussions
312 203
Messages
2 086 193
Membres
103 153
dernier inscrit
SamirN