XL 2013 VBA ET FONCTION EXCEL

  • Initiateur de la discussion Initiateur de la discussion vinciHorus
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
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 :
 
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
 
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
 
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.
 
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

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Résolu(e)
Microsoft 365 DATEDIF
Réponses
11
Affichages
236
Réponses
5
Affichages
377
Retour