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 :

VBA : depassement de capacité.


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Par défaut VBA : depassement de capacité.
    Bonjour à tous,

    J'ai écris un code qui, en soit fonctionne mais VBA me dit :" Dépassement de capacité" et cela m'embête car j'aimerais appliquer ce code à tout mon fichier et il m'en empêche, pouvez-vous m'aider ?

    Voici le code :

    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
    Sub titre()
    For i = 1 To 790
    Cells(i + 1, 8).Select
    Cells(i + 1, 8) = (Cells(i + 2, 2) - Cells(i + 1, 2)) / Cells(i + 1, 2)
    Next
    End Sub
     
    Sub SPI()
    For i = 1 To 790
    Cells(i + 1, 8).Select
    Cells(i + 1, 8) = (Cells(i + 2, 2) - Cells(i + 1, 2)) / Cells(i + 1, 2)
    Next
    End Sub
    Sub rdtanormaux()
    For i = 1 To 790
    Cells(i + 1, 10).Select
    Cells(i + 1, 10) = (Cells(i + 1, 8) - Cells(i + 1, 9))
    Next
    End Sub
    Sub pppp()
    Call titre
    Call SPI
    Call rdtanormaux
    End Sub
    Je peux joindre le fichier si besoin est : Merci à tous

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Un sujet fort similaire traité ce matin.
    Tu as peut être la solution

    http://www.developpez.net/forums/d13...ment-capacite/

  3. #3
    Membre expérimenté
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Par défaut
    Bonjour,

    Au cours des lignes 4 et 11, tu effectue une division par . Si cette valeur vaut 0 => dépassement de capacité, car les grandes lois des mathématiques nous interdisent toutes division par 0.

    Cdt

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Par défaut
    Je vois...Merci ! Comment puis-je remédier à ceci silteplait ? Je suis assez nouveau dans VBA je n'ai pas encore les bons reflexes.

    Merci.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Par défaut
    Dans un premier temps, tu peux supprimer toutes tes lignes avec des Select, de ce que l'on voit de ta macro, ils sont inutiles.

    Ensuite, tu effectue un test sur la valeur bloquante avec une structure conditionelle if... end if.

    Pour cela remplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i + 1, 8) = (Cells(i + 2, 2) - Cells(i + 1, 2)) / Cells(i + 1, 2)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If cells(i+1,2) = 0 then
    "Action à faire si la valeur est 0, cela dépend de ton fichier"
    else
    Cells(i + 1, 8) = (Cells(i + 2, 2) - Cells(i + 1, 2)) / Cells(i + 1, 2)
    end if
    Enfin, je ne saisis pas la différence entre ta fonction Titre() et Spi().

    Bonne journée à toi, et bon courage dans le codage

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    En testant la valeur du dénominateur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if Cells(i + 1, 2).value <>0 then Cells(i + 1, 8) = (Cells(i + 2, 2) - Cells(i + 1, 2)) / Cells(i + 1, 2)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Par défaut
    @ Guiiand

    Je te remercie cela fonctionne parfaitement. La fonction titre et SPi sont pour 2 colonnes différents si jamais.

    Bonne journée

    Bonsoir,
    Alors cela fonctionne sur une feuille du classeur, mais pas sur toutes. La ligne en rouge est en cause... Je réouvre donc le sujet, je n'arrive pas a uploader le fichier sur le site, il est disponible sous ce lien : http://cjoint.com/13ma/CCfsvQhuR4l.htm ! Merci !

    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
    Code: Tout sélectionner
        Sub titre()
          For i = 2 To Range("A" & Rows.Count).End(xlUp).Row - 1
            Cells(i, 8) = (Cells(i + 1, 2) - Cells(i, 2)) / Cells(i, 2)
          Next
        End Sub
        
        Sub SPI()
          For i = 2 To Range("A" & Rows.Count).End(xlUp).Row - 1
        Cells(i, 9) = (Cells(i + 1, 6) - Cells(i, 6)) / Cells(i, 6)
          Next
        End Sub
    
        Sub rdtanormaux()
          For i = 2 To Range("A" & Rows.Count).End(xlUp).Row - 1
            Cells(i, 10) = (Cells(i, 8) - Cells(i, 9))
        Next
        End Sub
    
        Sub pppp()
        Dim RR As Worksheet
        For Each RR In ActiveWorkbook.Sheets
            RR.Activate
         
          Call titre
          Call SPI
          Call rdtanormaux
          Next
        End Sub

  8. #8
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Pourquoi ne testes tu pas la valeur de Cells(i, 6) comme nous te l'avons proposé?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if val("" & Cells(i, 6))=0 then
       Cells(i, 9) =0
    else
       Cells(i, 9) = (Cells(i + 1, 6) - Cells(i, 6)) *(1/ Cells(i, 6))
    end if

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Par défaut
    Citation Envoyé par jfontaine Voir le message
    Pourquoi ne testes tu pas la valeur de Cells(i, 6) comme nous te l'avons proposé?
    Excuse moi je ne vois pas ou cela est proposé, comment l'écrirais tu ? Merci d'etre compréhensif, je débute vraiment

  11. #11
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    soit la version de rdurupt

    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Sub SPI()
          For i = 2 To Range("A" & Rows.Count).End(xlUp).Row - 1
              if Cells(i, 6) <> 0 then Cells(i, 9) = (Cells(i + 1, 6) - Cells(i, 6)) / Cells(i, 6)
          Next
        End Sub

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Par défaut
    Bonsoir, Merci pour l'aide mais cela ne fonctionne pas.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if val("" & Cells(i, 6))=0 then
       Cells(i, 9) =0
    else
       Cells(i, 9) = (val("" & Cells(i + 1, 6)) - val("" & Cells(i, 6))) *(1/val("" & Cells(i, 6)))
    end if

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Par défaut
    Citation Envoyé par jfontaine Voir le message
    soit la version de rdurupt

    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Sub SPI()
          For i = 2 To Range("A" & Rows.Count).End(xlUp).Row - 1
              if Cells(i, 6) <> 0 then Cells(i, 9) = (Cells(i + 1, 6) - Cells(i, 6)) / Cells(i, 6)
          Next
        End Sub
    VBA me dit : Incompatibilité de type pour la ligne après Then

    rdurupt : Cela fonctionne, sauf qu'il me met un 0 dans la ligne 1 ou il y avait du texte.

    J'aimerais également que cela s'arrète lorsqu'il n'y a plus rien à calculer comme dans le code de jfontaine, mais je ne vois pas comment il procède!

    Merci pour votre aide !

  15. #15
    Invité
    Invité(e)
    Par défaut
    Je n’ai pas change la cellule des dividendes n’y c’elle du diviseur encor mois le quotient
    Un exit for quand tu juge la fin du calcul.

  16. #16
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Montres nous la méthode que tu as utilisé

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Par défaut
    En faite cela fonctionne, j'ai tout repris au calme ce matin, peut etre que j'ai mal copié quelque chose.

    Merci à tous.

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

Discussions similaires

  1. [VBA-E] erreur 1004 et depassement de capacité dans une boucle
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 11/02/2007, 14h37
  2. [VBA Excel] pb depassement de capacité
    Par DiverSIG dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/12/2006, 15h06
  3. [VBA-E]Depassement de capacité
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 16/05/2006, 16h13
  4. [VB6] Hex(Double) - depassement de capacite
    Par SErhio dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 18/05/2005, 18h09
  5. depassement de capacité
    Par jpg dans le forum ASP
    Réponses: 2
    Dernier message: 19/08/2004, 19h26

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