XL 2013 VBA ET FONCTION EXCEL

vinciHorus

XLDnaute Junior
Bonjour

Est - il possible d’intégrer une fonction dans un code vba?

Si oui quelle est la syntaxe ?

Exemple de fonction : =SI(C2="";"";SIERREUR(INDEX(p!$D$2:$D$1048576;EQUIV(C2;t!$B$2:$B$1048576;0);1);"-"))
 
Solution
Alors il faut passer par une macro évenementielle.
En PJ la macro se lance quand on modifie la cellule B8, il recalcule en temps réel le Nom et la Ville du prénom choisi avec Worksheet_Change.
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Address = "$B$8" Then
        Sheets("Essai").Range("D8") = Nom(Range("B8"))
        Sheets("Essai").Range("F8") = Ville(Range("B8"))
    End If
End Sub
On peut aussi relancer les calculs d'une feuille quand on sélectionne cette feuille avec Worksheet_Activate. toutes ces macros événementielles doivent être mises impérativement dans la feuille concernée.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour VinciHorus,
Un exemple à tester :
VB:
Function VinciHorus(C)
VinciHorus = "" ' Valeur de retour par défaut
If C = "" Then
    Exit Function
Else
    If Not IsError(Application.Match(C, Sheets("t").Range("B:B"), 0)) Then
        Pointeur = Application.Match(C, Sheets("t").Range("B:B"), 0)
        VinciHorus = Sheets("p").Range("D" & Pointeur)
    Else
        VinciHorus = "-"
    End If
End If
End Function
La syntaxe est :
=VinciHorus(nomcellule)
Tuto sur les fonctions personnelles :
 

vinciHorus

XLDnaute Junior
Bonjour VinciHorus,
Un exemple à tester :
VB:
Function VinciHorus(C)
VinciHorus = "" ' Valeur de retour par défaut
If C = "" Then
    Exit Function
Else
    If Not IsError(Application.Match(C, Sheets("t").Range("B:B"), 0)) Then
        Pointeur = Application.Match(C, Sheets("t").Range("B:B"), 0)
        VinciHorus = Sheets("p").Range("D" & Pointeur)
    Else
        VinciHorus = "-"
    End If
End If
End Function
La syntaxe est :
=VinciHorus(nomcellule)
Tuto sur les fonctions personnelles :
D'accord je vérifie de mon cote
 

vinciHorus

XLDnaute Junior
Bonjour VinciHorus,
Un exemple à tester :
VB:
Function VinciHorus(C)
VinciHorus = "" ' Valeur de retour par défaut
If C = "" Then
    Exit Function
Else
    If Not IsError(Application.Match(C, Sheets("t").Range("B:B"), 0)) Then
        Pointeur = Application.Match(C, Sheets("t").Range("B:B"), 0)
        VinciHorus = Sheets("p").Range("D" & Pointeur)
    Else
        VinciHorus = "-"
    End If
End If
End Function
La syntaxe est :
=VinciHorus(nomcellule)
Tuto sur les fonctions personnelles :
cela ne s'affiche pas!

le but c'est d'avoir la formule dans le code vba pour eviter que ceux qui utilisent le modifient par erreur
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Testez ma PJ. Elle marche.
Sauf si je n'ai pas compris la demande. Vous parlez de fonctions, donc j'ai répondu Fonctions.

Voulez vous que les calculs se fassent sans formules accessibles à l'utilisateur ?
Dans ce cas c'est autre chose. Veuillez préciser votre besoin.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Alors il faut passer par une macro évenementielle.
En PJ la macro se lance quand on modifie la cellule B8, il recalcule en temps réel le Nom et la Ville du prénom choisi avec Worksheet_Change.
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Address = "$B$8" Then
        Sheets("Essai").Range("D8") = Nom(Range("B8"))
        Sheets("Essai").Range("F8") = Ville(Range("B8"))
    End If
End Sub
On peut aussi relancer les calculs d'une feuille quand on sélectionne cette feuille avec Worksheet_Activate. toutes ces macros événementielles doivent être mises impérativement dans la feuille concernée.
 

Pièces jointes

  • FonctionPerso(V2).xlsm
    23.8 KB · Affichages: 3

vinciHorus

XLDnaute Junior
Alors il faut passer par une macro évenementielle.
En PJ la macro se lance quand on modifie la cellule B8, il recalcule en temps réel le Nom et la Ville du prénom choisi avec Worksheet_Change.
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Address = "$B$8" Then
        Sheets("Essai").Range("D8") = Nom(Range("B8"))
        Sheets("Essai").Range("F8") = Ville(Range("B8"))
    End If
End Sub
On peut aussi relancer les calculs d'une feuille quand on sélectionne cette feuille avec Worksheet_Activate. toutes ces macros événementielles doivent être mises impérativement dans la feuille concernée.
D'accord merci pour le retour
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 086
Messages
2 085 197
Membres
102 814
dernier inscrit
JLGalley