Fonction SI ESTERREUR en vba

  • Initiateur de la discussion Initiateur de la discussion peternewman007
  • 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 !

P

peternewman007

Guest
Bonjour,

Je souhaite transformer une fonction en vba.
Voici la fonction :
=SI(ESTERREUR(+AM1886/RECHERCHEV($A1886;$A$3847:$AP$3942;39;FAUX));0;+AM1886/RECHERCHEV($A1886;$A$3847:$AP$3942;39;FAUX))

Et voici mon essai en vba :
Code:
If IsError(Cells(target.Row, 39) / Application.WorksheetFunction.VLookup(Cells(target.Row, 1).Value, Range("A:AP"), 39, False).Value) Then
    Cells(target.Row, 41) = 0
Else
    Cells(target.Row, 41) = Cells(target.Row, 39) / Application.WorksheetFunction.VLookup(Cells(target.Row, 1).Value, Range("a:ap"), 39, False)
End If

Qu'est-ce qui cloche?

Merci d'avance,

Peter
 
Re : Fonction SI ESTERREUR en vba

Bonjour si tu veux simplement transcrire ta formule en VBA utilise l'enregistreur de macro comme ceci :

"=IF(ISERROR(+R[1884]C[37]/VLOOKUP(R[1884]C1,R3847C1:R3942C42,39,FALSE)),0,+R[1884]C[37]/VLOOKUP(R[1884]C1,R3847C1:R3942C42,39,FALSE))"
 
Re : Fonction SI ESTERREUR en vba

Bonjour,

comme conseillé par Tibo, utilise l'enregistreur de macro sur la première ligne, et applique ensuite le code donné sur la plage de cellule en question... nous pas de fichier pour tester...

bon après midi
@+
 
Re : Fonction SI ESTERREUR en vba

Bonjour,

Ok, je suis parvenu à le faire fonctionner mais maintenant je cherche le moyen de l'actualiser une fois que je modifie une ligne.
Je m'explique..

Lorsque je suis sur ma ligne cela fonctionne mais lorsque je remplis une ligne en-dessous, la ligne sur laquelle je suis s'adapte aux lignes précédentes mais la ligne précédente ne se met pas à jour.

Comment pourrais-je faire?

Merci,

Peter
 
Re : Fonction SI ESTERREUR en vba

Oui je suis bien en calcul automatique.

Voici le code :

Code:
If target.Column > 7 And target.Column < 40 Then
    Application.EnableEvents = 0
        If Cells(target.Row, 7) <> "oui" Then
            Cells(target.Row, 40) = 0
        ElseIf Cells(target.Row, 2) = "Chantier" Then
            If Cells(target.Row, 3) <> "Tâches_générales_réparties" And Cells(target.Row, 3) <> "Tâches_S.A.A._réparties" And Cells(target.Row, 3) <> "Tâches_Prod_réparties" Then
                If Cells(target.Row, 4) <> "Suivi - 1" And Cells(target.Row, 4) <> "Achat - 5" Then
                    Cells(target.Row, 40) = Cells(target.Row, 39).Value + (Range("AR370") * (Cells(target.Row, 39) / Range("AR371")))
                ElseIf Cells(target.Row, 4) = "Suivi - 1" Then
                    Cells(target.Row, 40) = Cells(target.Row, 39).Value + (Range("AR367") * (Cells(target.Row, 39) / Range("AR368"))) + (Range("AR370") * (Cells(target.Row, 39) / Range("AR371")))
                ElseIf Cells(target.Row, 4) = "Achat - 5" Then
                    Cells(target.Row, 40) = Cells(target.Row, 39).Value + (Range("AR366") * (Cells(target.Row, 39) / Range("AR369"))) + (Range("AR370") * (Cells(target.Row, 39) / Range("AR371")))
                End If
            End If
        ElseIf Cells(target.Row, 2) = "Bureau_de_dessin" Then
            If Cells(target.Row, 3) <> "Tâches_Bureau_de_dessin_réparties" Then
                Cells(target.Row, 40) = Cells(target.Row, 39).Value + (Range("AR372") * (Cells(target.Row, 39) / Range("AR373")))
            End If
        ElseIf Cells(target.Row, 2) = "Promotion" Then
            If Cells(target.Row, 3) <> "Tâches_promo_réparties" Then
                Cells(target.Row, 40) = Cells(target.Row, 39).Value + (Range("AR374") * (Cells(target.Row, 39) / Range("AR375")))
            End If
        ElseIf Cells(target.Row, 2) = "Soumission" Then
            If Cells(target.Row, 3) <> "Tâches_soum_réparties" Then
                Cells(target.Row, 40) = Cells(target.Row, 39).Value + (Range("AR376") * (Cells(target.Row, 39) / Range("AR377")))
            Else
                Cells(target.Row, 40) = Cells(target.Row, 39).Value + 0
            End If
        End If
    Application.EnableEvents = 1
End If

Où placerais-tu le .calculate?

Peter
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
628
Réponses
2
Affichages
739
Réponses
13
Affichages
598
  • Question Question
Microsoft 365 Cpier/coller en VBA
Réponses
7
Affichages
782
Retour