IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Transcription de la fonction SI en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 1
    Par défaut Transcription de la fonction SI en VBA
    Bonjour,

    J'ai un petit problème en vba.
    Voilà j'ai un tableau excel ou j'ai certaine valeur égale à 0 que je voudrais remplacer par NA mais en gardant la formule. J'ai reussi à le faire avec une formule dans excel

    =SI((D57+D347+D427+D505+D576+D274) = 0; NA();D57+D347+D427+D505+D576+D274)

    mais je n'arrive pas à la retranscrire en vba pour l'appliquée à tous mon tableau. Le problème est que quand je veux qu'il affiche NA, je veux tous de même gardé la formule car le tableau change très souvent et je ne veux pas refaire toutes les formules à la main.

    Pour l'instant en VBA j'ai essayer à plusieurs reprises mais je n'arrive pas à gardé la formule en mémoir...

    En espérant que vous pourrez m'aider !!

    Cordialement

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Une piste avec une fonction personnalisée.
    Copiez le code suivant dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Function SOMME_SI_DIFFERENT_ZERO(ParamArray Cellule() As Variant) As Variant
    Dim retour As Variant
    Dim R As Range
    Dim C As Range
    Dim x#
    Dim i&
    '---
    For i& = LBound(Cellule) To UBound(Cellule)
      If TypeName(Cellule(i&)) = "Range" Then
        Set R = Range(Cellule(i&).Address)
        If IsArray(R) Then
          For Each C In R
            If IsNumeric(C) Then x# = x# + C
          Next C
        ElseIf IsNumeric(R) Then
          x# = x# + R
        End If
      End If
    Next i&
    '--- Retour ---
    If x# <> 0 Then
      retour = x#
    Else
      retour = CVErr(xlErrNA)
    End If
    SOMME_SI_DIFFERENT_ZERO = retour
    End Function
    Exemple d'utilisation :
    Dans la cellule E1, tapez la formule SOMME_SI_DIFFERENT_ZERO(D1;D5:D7;D14)

    La fonction fait la somme de toutes les cellules de la plage D1;D5:D7;D14 contenant un nombre.
    - Si la somme est différente de 0, la somme s'inscrit en E1
    - Si la somme est égale à 0, l'erreur #N/A s'affiche en E1

  3. #3
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Avril 2012
    Messages : 49
    Par défaut BONSOIR /BONJOUR
    Voici 2 procédures permettant d'implanter des fct Si en VBA :
    • Pour le Si en ligne, je l'utilise lorsqu'il faut filtrer une cellule pour actionner une fonction rechercheV que si une valeur est saisie en début de ligne
    • Le SI en colonne permet de propager des tests en bout de tableaux

    Sinon,par simplification j'ai mis 10 pour si la cdt est OK et sans si non OK, bref à vous de voir, cordialement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    Public Sub Faire_Si_EN_LIGNE()
    Dim Col As Integer
    Dim Ligne As Integer: Ligne = 10
    Dim i As Integer
     
    Dim ws As Worksheet: Set ws = Application.Sheets("TEST")
     
        With ws
            .Activate
                For Col = 2 To 7
                    i = i + 1
                    .Cells(Ligne, Col).Activate
                        ActiveCell.FormulaR1C1 = "=IF(RC[" & -i & "]=1,10,100)"
                Next Col
        End With
    Set ws = Nothing
     
    End Sub
     
    Public Sub Faire_Si_EN_COLONNE()
    Dim Col As Integer: Col = 3
    Dim Ligne As Integer
    Dim i As Integer: i = 1
     
    Dim ws As Worksheet: Set ws = Application.Sheets("TEST")
     
        With ws
            .Activate
                For Ligne = 2 To 7
                    .Cells(Ligne, Col).Activate
                        ActiveCell.FormulaR1C1 = "=IF(RC[" & -i & "]=1,10,100)"
                Next Ligne
        End With
    Set ws = Nothing
     
    End Sub

Discussions similaires

  1. [VBA]Fonction 'ajout' en vba sur une table
    Par rico63 dans le forum VBA Access
    Réponses: 15
    Dernier message: 28/03/2007, 16h56
  2. Comment écrire dans une cellule la fonction SUM en vba?
    Par Subkill dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/02/2007, 19h24
  3. Fonction excel en VBA
    Par Gary US dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/12/2006, 17h39
  4. Fonction Yield en VBA sans Automation
    Par laurentcr dans le forum Access
    Réponses: 7
    Dernier message: 02/10/2006, 14h43
  5. Réponses: 1
    Dernier message: 14/10/2005, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo