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 :

Premier algo en VBA, ca bug! [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Actuaire
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Actuaire
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Points : 42
    Points
    42
    Par défaut Premier algo en VBA, ca bug!
    salut tout le monde
    j'ai un soucis en VBA, c'est mon premier code dans ce langage, je suis pas encore un expert et je ne connais pas trop les subtilités des boucles dans ce langage

    en gros voici l'algorithme que j'essaie de coder:

    -Tant que le numéro client est le meme (colonne E), si la cellule de colonne O vaut B, on recupere la valeur de la cellule T et on la stocke dans la variable valbase
    -si la cellule de la colonne O vaut R, on recupere la valeur de la cellule de la colonne U et , on l'additionne a valbase (somme) et on la divise par valbase pour obtenir le ratio (variable ratio.)

    Une fois que l'on change de client, les 3 variables se remettent a 0 et l'algo recommence.

    Le soucis c'est que je suis un noob et que jsuis passé à coté de 3 problèmes majeurs:

    L'existence de valbase lorsqu'on passe d'une ligne a l'autre
    La remise a zéro des variables
    l'imbrication du for pour parcourir les lignes (i) et du do while pour s'assurer qu'on est sur le meme client.

    pouvez vous m'aider svp?

    Voici le fichier en ligne, http://cl.ly/3S3e1u1E2G2V332H1Y45

    J'ai mis des 0 partout par souci de confidentialité, seul les cases utiles sont restées pleines.
    les 2 dernières colonnes sont les résultats de la macro (la première le ratio) et la 2eme la valeur de la somme ou de la valbase.

    Merci d'avance
    Guillaume


    ps: si vous ne souhaitez pas télécharger la pièce jointe, voici un screenshot et le code vba:

    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
    Sub reval()
        Dim i As Long
        Dim somme As Double, ratio As Double, valbase As Double
     
     
     
        For i = 3 To 12
     
            Do While Cells(i, 5).Value = Cells(i + 1, 5).Value
     
            If Cells(i, 15).Value = B Then
     
                    valbase = Cells(i, 20).Value
                    somme = valbase + somme
                    Cells(i, 25).Value = valbase
     
             ElseIf Cells(i, 5).Value = Cells(i - 1, 5).Value And Cells(i, 15).Value = R Then
     
                    somme = Cells(i, 21).Value + somme: Cells(i, 25).Value = somme
                    ratio = valbase / somme
                    Cells(i, 24).Value = ratio
     
                End If
     
     
            Loop
     
        Next i
               somme = 0: valbase = 0: ratio = 0
     
            End Sub

  2. #2
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bonjour Methodrone8,

    Il y a un bel effort à essayer de nous présenter ton problème.
    Cependant, il y a de nombreuses incohérences - pas seulement sur la syntaxe.

    J'ai essayé d'aménager néanmoins ce que tu as fait :

    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
    Sub reval()
        Dim i As Long
        Dim somme, valbase As Double
     
        ' Range("E" & Rows.Count).End(xlUp).Row donne la ligne de la dernière cellule présente dans la colonne "E"
        For i = 3 To Range("E" & Rows.Count).End(xlUp).Row
     
            If Cells(i, 5).Value = Cells(i - 1, 5).Value Then
     
                If Cells(i, 15).Value = "B" Then
                        valbase = Cells(i, 20).Value
                ElseIf Cells(i, 15).Value = "R" And valbase <> 0 Then
                        somme = Cells(i, 21).Value + somme
                        ' je stocke le ratio en colonne 24
                        Cells(i, 24).Value = (somme + valbase) / valbase / 100
                End If
     
            Else
     
                somme = 0
                valbase = 0
                If Cells(i, 15).Value = "B" Then
                        valbase = Cells(i, 20).Value
                End If
     
            End If
     
        Next i
     
    End Sub
    Je stocke le ratio en colonne 24. Ce ratio n'est calculé que si la colonne E = "R" ou si la variable valbase est différente de zéro (car une division par zéro provoque une erreur).
    Fais des tests et dis nous si ça marche où si ça bug (et à quel endroit ça bug).

    Bertrand

  3. #3
    Membre du Club
    Homme Profil pro
    Actuaire
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Actuaire
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Points : 42
    Points
    42
    Par défaut
    Salut!
    merci beaucoup pour ta réponse, je me suis rendu compte des énormités qu'il y avait dans le code, c'était pas le bon , j'avais essayé plein de trucs et je n'ai pas posté le code que je pensais vraiment utiliser
    je vais essayer celais que tu as mis, je te remercie beaucoup pour ton aide!

    Guillaume

    Edit: Ca marche parfaitement! Merci beaucoup, j'ai beaucoup à apprendre en programmation, mais c'est en forgeant qu'on devient forgeron! je vais beaucoup lire le forum et les tutos ça va bien m'aider

    merci encore

  4. #4
    Membre du Club
    Homme Profil pro
    Actuaire
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Actuaire
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Points : 42
    Points
    42
    Par défaut
    petite rectification:
    Cela fonctionne parfaitement sur le fichier coupé que j'ai mis a votre disposition, mais pas sur le fichier source.
    il y a une erreur :

    "Erreur d'exécution "13" : incompatibilité de type"
    sur la ligne 8 du code:

    cela s'explique je pense du fait que les cellules de cette colonne dans le fichier source sont par exemple:
    GU000022750
    ou parfois
    1560830

    comment régler ça?
    j'ia tenté de selectionner la colonne -> format de cellule -> standard mais l'erreur reste.



    merci d'avance pour votre précieuse aide

  5. #5
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Re,

    Ton erreur pointe sur quelle colonne ? La 20ème ou colonne "T" ?

    Bertrand

  6. #6
    Membre du Club
    Homme Profil pro
    Actuaire
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Actuaire
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Points : 42
    Points
    42
    Par défaut
    l'erreur pointe sur la ligne 8 de ton code, à savoir la colonne E du classeur (la colonne num client)

    edit: j'ai mis en ligne dans le premier message le fichier modifié avec le code de Bertrand , et des id clients semblables a ceux du fichier source

  7. #7
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Cela est cohérent : tu veux comparer un chiffre avec un texte... Hors Excel compare des données de même type.

    Ton ID client peut être converti en type texte grâce à ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("E" & i) = CStr(Range("E" & i))
    Tu peux l'insérer dans ta boucle :

    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
    Sub reval()
        Dim i As Long
        Dim somme, valbase As Double
     
     
        ' Range("E" & Rows.Count).End(xlUp).Row donne la ligne de la dernière cellule présente dans la colonne "E"
        For i = 3 To Range("E" & Rows.Count).End(xlUp).Row
     
     
            ' conversion de la colonne E en texte
            Range("E" & i) = CStr(Range("E" & i))
     
            If Cells(i, 5).Value = Cells(i - 1, 5).Value Then
     
                If Cells(i, 15).Value = "B" Then
                        valbase = Cells(i, 20).Value
                ElseIf Cells(i, 15).Value = "R" And valbase <> 0 Then
                        somme = Cells(i, 21).Value + somme
                        ' je stocke le ratio en colonne 24
                        Cells(i, 24).Value = (somme + valbase) / valbase / 100
                End If
     
            Else
     
                somme = 0
                valbase = 0
                If Cells(i, 15).Value = "B" Then
                        valbase = Cells(i, 20).Value
                End If
     
            End If
     
        Next i
     
    End Sub
    Dis moi si ça fonctionne chez toi.

    Bertrand

  8. #8
    Membre du Club
    Homme Profil pro
    Actuaire
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Actuaire
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Points : 42
    Points
    42
    Par défaut
    cette fois, cela marche parfaitement!

    merci beaucoup pour ton aide

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

Discussions similaires

  1. [VBA-E] Bug macro bouton commande
    Par allergique dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/08/2006, 23h00
  2. [Vba-E]Bug dans mon code
    Par antoinelavigne dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 19/06/2006, 14h55
  3. [VBA-E] Bug dans la concaténation de String
    Par krollkop dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 01/06/2006, 11h41
  4. [VBA-E] bug de Excel au démarrage
    Par gruget dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/05/2006, 10h47
  5. [VBA] Mettre au premier plan par VBA?
    Par Caroline1 dans le forum Access
    Réponses: 9
    Dernier message: 02/05/2006, 22h49

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