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 pourcentage / VB ou excel ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 153
    Par défaut Calcul pourcentage / VB ou excel ?
    bonjour,

    Voilà mon souci.

    J'ai chargé dans un fichier Excel via VB deux colonnes (A et B) .

    Lorsque je lance la macro, j'obtiens le résultat souhaité.

    Je souhaite faire un pourcentage dans une troisième colonne par rapport aux colonnes A et B.


    J'ai paramétré directement la formule dans le fichier excel est j'obtiens

    dans les cellules le message d'erreur suivant :"VALEUR!!"


    Question :

    -Est il possible après avoir lancer des macros d'enchainer par une fonction classique excel?

    -ou faut il passer obligatoirement par une nouvelle macro?


    Merci de votre aide

    olivier

  2. #2
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Bonjour,

    Plusieurs possiblites:
    Soit tu remplace ta formule =A1/B1 par
    =IF(B1<>0;A1/B1;0) qui ne fera le calcul que si la cellule contient un chiffre different de 0 et puis apres tu etends avec la souris

    Soit tu integre le calcul dans ta macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    range("A" & i).value = valeur1
    Range("B" & i).value = valeur2
    if valeur1 <> 0 then Range("C" & i).value = valeur2 / valeur1
    Soit tu integre la copie de la formule dans ta macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("C1").Formula = "=A1/B1 "
    Range("C1").Select
    Selection.AutoFill Destination:=Range("C1:C500"), Type:=xlFillValues
    A adapter a tes index et colonnes bien sur

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 153
    Par défaut
    merci pour l'aide :

    ma macro est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    Sub calculpourcentage()
     
    Dim valeur1 As Double
    Dim valeur2 As Double
    Dim i
     
     
    Range("I" & i).Value = valeur1
    Range("H" & i).Value = valeur2
    If valeur2 <> 0 Then Range("J" & i).Value = valeur2 / valeur1
     
    End Sub
    j'obtiens de le message d'erreur suivant :

    erreur d'execution "1004". la méthode 'Range' de l'objet global a échoué

    ai je oublié de faire quelquechose?

  4. #4
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Oui, d'affecter une valeur a i (ton numero de ligne).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub calculpourcentage()
     
    Dim valeur1 As Double
    Dim valeur2 As Double
    Dim i as Integer
     
    for i = 1 to derniereligne 
    Range("I" & i).Value = valeur1
    Range("H" & i).Value = valeur2
    If valeur1 <> 0 Then Range("J" & i).Value = valeur2 / valeur1
    next i
     
    End Sub
    Reste a remplacer derniereligne par le numero de ta derniere ligne. Fait attention de faire le test "<> 0" sur la valeur qui se trouve au denominateur (j'ai corrige la)

    Tu peux aussi integrer le code dans ta macro d'importation si jamais tu utilises deja une boucle.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 153
    Par défaut
    ca ne fonctionne pas

    cela met à blanc mes données chargées precédemment de la colonne I et et J


    Y a t il une antitode?

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 45
    Par défaut
    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
    Sub calculpourcentage()
     
    Dim valeur1 As Double
    Dim valeur2 As Double
    Dim i as Integer
     
    for i = 1 to derniereligne 
    valeur1 = Range("I" & i).Value 
    valeur2 = Range("H" & i).Value 
    If valeur1 <> 0 Then 
    Range("J" & i).Value = valeur2 / valeur1
    end if
    next i
     
    End Sub

    comme cela ca devrait marcher je pense

  7. #7
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Oh la belle boulette

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 153
    Par défaut
    bonjour,

    en intégrant cette macro , j'ai une erreur d'execution du type "13".

    incompatibilité de type?

    merci de votre aide.

    olivier

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 153
    Par défaut
    Bonjour,

    je crois voir d'ou vient le pb .

    Dans ma colonne "i" , je charge des données au format 000 000,00

    Dans ma colonne H, les données sont chargées au format 000 000.00.

    La variation en pourcentage entre la colonne I et J ne peut pas s'effectuer.

    Comment est il possible de convertir les données chargées dans la colonne I au format 000 000.00

    J'ai mis mon code ci dessous.

    merci de votre aide

    olivier



    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
     
    Sub Copie_fich()
    mpath = "C:\div\"
    mfich1 = "Contrôle benchmarké1.xls"
    mfich2 = "Tableau de contrôle.xls"
    mfich3 = "Evl_09_05.xls"
     
    Application.DisplayAlerts = False
    Workbooks.Open Filename:=mpath & mfich2, updatelinks:=False
    Application.DisplayAlerts = True
    Sheets("recap v2 - b").Copy Before:=Workbooks(mfich1).Sheets(1)
    Windows(mfich2).Activate
    Sheets("recap v2 - a").Copy Before:=Workbooks(mfich1).Sheets(1)
    Workbooks(mfich2).Close SaveChanges:=False
    Windows(mfich1).Activate
    Sheets("recap v2 - a").Activate
    Columns("W:BL").Select
            Selection.Delete Shift:=xlRight
    Range("A3").Select
    Sheets("recap v2 - b").Activate
    Columns("W:BL").Select
            Selection.Delete Shift:=xlRight
    Range("A3").Select
    Workbooks.Open Filename:=mpath & mfich3
    Sheets("Evlsav1").Activate
    Range("G31:G40").Select
        Selection.NumberFormat = "#,##0.00"
    'Range("I31:I34").Select
    '     Selection.NumberFormat = "dd/mm/yyyy"
    'Range("L31:L34").Select
    '     Selection.NumberFormat = "dd/mm/yyyy"
    Call Separe
    Windows(mfich1).Activate
    Sheets("recap v2 - b").Activate
     
    'Nettoyer un plage de cellule
    'Range(Cells(21, 8), Cells(23, 9)).Select
    'Selection.ClearContents
    'Selection.NumberFormat = "#,##0.00"
    'Range(Cells(6, 8), Cells(16, 9)).Select
    'Selection.ClearContents
    'Selection.NumberFormat = "#,##0.00"
     
     
    Sheets("recap v2 - a").Activate
    Call Affect("Recap V2 - a")
    Sheets("recap v2 - b").Activate
    Call Affect("Recap V2 - b")
     
    End Sub
     
    Sub Separe()
      Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 1), _
            Array(7, 1), Array(8, 1), Array(9, 2), Array(10, 1), Array(11, 1), Array(12, 2), Array(13, 1 _
            ), Array(14, 1), Array(15, 1))
    End Sub
     
    Function chargement_cours_j_moins1(code_isin) As Double
        Dim code_prod As String
        Dim cours As Double
        Dim ptr As Variant
     
        cours = 0
        Set ptr = CreateObject("ADODB.Recordset")
     
        ptr.Open "SELECT DISTINCT _CODEPRODUI FROM omega.com.produit WHERE _ISIN = '" & code_isin & "'", Mybd
        Do While Not ptr.EOF
            code_prod = ptr("_CODEPRODUI")
            ptr.movenext
        Loop
        ptr.Close
     
        ptr.Open "SELECT  _COURSCLOSE FROM omega.com.prixhist WHERE _CODEPRODUI = '" & code_prod & "' ORDER BY _DATE DESC", Mybd
        Do While Not ptr.EOF
            cours = ptr("_COURSCLOSE")
            Exit Do
        Loop
        chargement_cours_j_moins1 = cours
    End Function
     
    Sub Affect(nom_feuille)
    Dim i
     
    For i = 6 To 500
        If (Sheets(nom_feuille).Range("A" & i)) <> "" Then
            mont = chargement_cours_j_moins1(Sheets(nom_feuille).Range("A" & i))
            Sheets(nom_feuille).Range("h" & i) = mont
        Else
     
        End If
    Next i
     
    End Sub

  10. #10
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Oula ton code est vraiment complique
    Pour autant que je sache tu dois pouvoir te separer de tous les activate et de beaucoup de select
    par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Windows(mfich2).Activate
    Sheets("recap v2 - a").Copy Before:=Workbooks(mfich1).Sheets(1)
    'deviendrait
    Workbooks(mfich2).Sheets("recap v2 - a").Copy Before:=Workbooks(mfich1).Sheets(1)
    ou ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Windows(mfich1).Activate
    Sheets("recap v2 - a").Activate
    Columns("W:BL").Select
    ''devient
    Workbooks(mfich1).Sheets("recap v2 - a").Columns("W:BL").Delete Shift:=xlRight
    Ton code sera ainsi beaucoup plus clair. Teste quand meme regulierement pendant les modifs, des fois on peut pas

    Sinon pour ton probleme de format:
    Suivant les versions d'Excel et/ou de Windows (j'ai jamais trop compris) les nombres decimaux contiennent soit "." soit ",". Pour eviter de galerer, si jamais tu ne sais pas quel est celui qu'il faut utiliser sur ta machine tu convertis tout en Double (ou autre suivant le cas, cherche CDbl dans l'aide VBA tu devrais trouver un recapitulatif de tous les convertisseurs et tu choisis celui que tu veux).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    valeur1 = CDbl(Range("I" & i).Value)
    valeur2 = CDbl(Range("H" & i).Value) 
    ...
    Je pense que ca devrait marcher

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

Discussions similaires

  1. probleme de calcul pourcentage
    Par patgame dans le forum Modélisation
    Réponses: 9
    Dernier message: 26/07/2007, 17h25
  2. calcul pourcentage dans une requete imbriquée
    Par timal78 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/07/2007, 14h28
  3. Calcul pourcentage dans un sous formulaire
    Par kriskiller dans le forum Access
    Réponses: 9
    Dernier message: 11/07/2006, 09h45
  4. [Débutant] calculer pourcentages
    Par Satan dans le forum Access
    Réponses: 4
    Dernier message: 25/04/2006, 16h07
  5. update pour calcul pourcentage (SQL SERVER 2000)
    Par meufeu dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/09/2005, 09h04

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