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 :

Calcul avec une division via VBA [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut Calcul avec une division via VBA
    Bonjour,

    Je désire via une macro faire une division de 2 cellules soit D12/D13.

    J'ai déjà trouvé la solution pour effectuer la somme de plusieurs cellules soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub func_somme_ventes_semaine()
    Range("D17").Value = Application.WorksheetFunction.Sum(Range("D12:I12"))
    End Sub
    Mais je reste bloqué pour la division:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub func_taux_de_placement_jour()
    Range("D14").Value = Application.WorksheetFunction.Range("D12 / D13")
    End Sub
    Un petit coup de main s'il vous plaît ?

    Merci

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonjour,

    quand tu utilise les objets Range, cells... sans rien devant ils concernent la feuille active ..

    pour éviter les problèmes mieux vaut préciser cette feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Feuil1").Range("D14").Value = ThisWorkbook.Worksheets("Feuil1").Range("D12").Value / ThisWorkbook.Worksheets("Feuil1").Range("D13").Value
    on peu simplifier l'écriture en utilsant With qui te permet d'éviter la répétition d'un préfixe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       With ThisWorkbook.Worksheets("Feuil1")
           .Range("D14").Value = .Range("D12").Value / .Range("D13").Value
        End With
    tu peu aussi utiliser une variable feuille de calcul pour agir sur celle-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Div2()
      Dim sh As Worksheet
      Set sh = ThisWorkbook.Worksheets("Feuil1")
      sh.Range("D14") = sh.Range("D12") / sh.Range("D13")
    End Sub
    j'ai aussi enlevé le .Value qui n'est pas obligatoire la propriété value étant la propriété par défaut d'un objet range.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Bonjour,

    Tout d'abord, merci pour tes exemples très utiles

    Par contre, si j'exécute par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    With ThisWorkbook.Worksheets("Beta 1.2")
    .Range("D14").Value = .Range("D12").Value / .Range("D13").Value
    End With
     
    End Sub
    J'ai le message suivant:
    Erreur d'exécution '11'
    Division par zéro
    Sauf que par défaut, quelques cellules sont = 0. Ce serait sympa de ne plus avoir ce message

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tu peu simplement conditionné ton calcul au fait que la valeur soit nulle ou pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF .Range("D13").Value <> 0 Then
    ....
     
    Endif

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Une autre piste pour ne pas à avoir à gérer les valeurs est d'utiliser les formules, tout en évitant l'affichage d'une erreur dans le cas
    où les cellules sont vides, mais en concervant l'erreur en cas de division par 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Worksheets("Beta 1.2")
            .Range("D14").Formula = IIf(.Range("D13").Value <> "", "=D12/D13", "")
    End With

  6. #6
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Merci beaucoup pour votre aide

    Est-il possible de créer une fonction comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub func_taux_de_placement_jour()
    If .Range("C14").Value <> 0 Then
    .Range("C14").Value = .Range("C12").Value / .Range("C13").Value
    End If
    End Sub
    car lorsque je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With ThisWorkbook.Worksheets("Beta 1.2")
    If .Range("D14").Value <> 0 Then
    .Range("D14").Value = .Range("D12").Value / .Range("D13").Value
    End If
    End With
    End Sub
    La cellule est vide mais il n'y a pas d'erreurs non plus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. execute une macro via vba sous access
    Par nes dans le forum Access
    Réponses: 4
    Dernier message: 28/03/2006, 23h15
  2. Problème avec une division
    Par ghan77 dans le forum Débuter
    Réponses: 3
    Dernier message: 08/12/2005, 10h50
  3. comment modifier le nom d'une colonne via VBA?
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 24/11/2005, 15h36
  4. Réponses: 2
    Dernier message: 24/11/2005, 11h46
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

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