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 :

Pb de formule de calcul sous VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 133
    Par défaut Pb de formule de calcul sous VBA
    Bon, je crois que je me suis un peu emballé. Voici mon code. Il ne fonctionne pas. Je désire faire: Colonne D - (Colonne E+F) / Colonne D *100.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "(C7:C101-((D7:D101)+(E7:E101)))/(C7:C101)*100"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Et ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cellule).formula = "(C7:C101-((D7:D101)+(E7:E101)))/(C7:C101)*100"
    (pas vérifié si ça marche, pas le temps )

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 133
    Par défaut
    Non, ça marche po. Voici le code entier avec ta correction.

    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
    'Adresse de la cellule contenant la donnée à récupérer
        Range(Cellule).Formula = "(C7:C101-((D7:D101)+(E7:E101)))/(C7:C101)*100"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
     
        Feuille = "Données de la carte$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = ActiveWorkbook.Path & "\" & "mes.xls"
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
     
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        Worksheets("JANV").Range("B98").CopyFromRecordset Rst
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing

  4. #4
    Membre éclairé
    Homme Profil pro
    Formateur & Dévrloppeur en Bureautique
    Inscrit en
    Février 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formateur & Dévrloppeur en Bureautique

    Informations forums :
    Inscription : Février 2007
    Messages : 47
    Par défaut Question pas claire
    Bonjour,
    la référence "Cellule" doit contenir la formule ou bien la valeur de la formule?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Bonjour,

    J'ai comme l'impression que la formule initiale n'est pas la bonne, il faut faire attention à la priorité des opérateurs.
    La formule ressemble à un calcul de pourcentage (merci de confirmer ou infirmer).
    dans ce cas Colonne D - (Colonne E+F) / Colonne D *100
    doit s'écrire : 100 * (Colonne D - (Colonne E + Colonne F) ) / Colonne D
    ou : 100 * (Colonne D - Colonne E - Colonne F ) / Colonne D

    Quand tu écris
    Non, ça marche po.
    Merci de nous écrire aussi ce qui ne marche pas.

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set cellule=Range("A7:A101")
    cellule.formula= "=100*(C7:C101-D7:D101-E7:E101)/(C7:C101)"
    manquait aussi un =

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 133
    Par défaut
    En y mettant la derniere formule, j'obtiens sur l'onglet excel sur lequel je déclenche la macro des DIV/0! partout. J'aimerais pourtant que le résultat apparaisse dans l'onglet "JANV" et cellule B98 comme indiqué dans le code que je vous forunis. Pour info, c'est le résultat de cette opération que je veux voir apparaitre.

    Merci à vous de votre aide

    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
    'Adresse de la cellule contenant la donnée à récupérer
        Range(Cellule).Formula = "=100*(C7:C101-D7:D101-E7:E101)/(C7:C101)"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
     
        Feuille = "Données de la carte$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = ActiveWorkbook.Path & "\" & "mes.xls"
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
     
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        Worksheets("JANV").Range("B98").CopyFromRecordset Rst
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Tu n'as pas montrée à quoi correspond la valeur de la variable celulle
    Tu as une DIV/0 c'est explicite, tu n'as pas de données en C7:C101
    Pour écrire la formule dans la feuille JANV
    fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("JANV").Range(Cellule).Formula = "=100*(C7:C101-D7:D101-E7:E101)/(C7:C101)"

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 133
    Par défaut
    Ok, le code avance mais le résultat ne s'affiche pas dans la cellule visée. En l'occurence, je veux que le résultat s'affiche dans la cellule "B98" de l'onglet "JANV". (Le calcul qui est fait s'effectue sur un classeur excel fermé).

    Bag

Discussions similaires

  1. Insertion dans une table d'une valeur calculée sous VBA
    Par fbourdon dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/11/2009, 20h52
  2. [XL-2003] Formule de calcul avec VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/06/2009, 13h23
  3. Formule de calcul en Vba Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/03/2009, 15h58
  4. Formule de calcul en VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/11/2008, 11h39
  5. Formule de calcul sous Excel
    Par spopofes dans le forum Excel
    Réponses: 4
    Dernier message: 19/05/2006, 21h39

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