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 :

Erreur type 13 selon valeur d'une variable [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 126
    Points : 69
    Points
    69
    Par défaut Erreur type 13 selon valeur d'une variable
    Bonjour,
    J'ai un problème en VBA qui me prend la tête depuis hier.
    Sur les lignes de code ci dessous, le programme marche très bien sauf lorsque la variable "dernierelignegeode" atteint un nombre supérieur à environ 22 000, un message apparait :
    Erreur 13.Incompatibilité de type
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
        Dim G As Range, K As Range, O As Range, var1, var2, var3, var4, var5, var6
        Dim S1, S2, S3, S4, S5 As Long
        var2 = 1
        var3 = 2
        var4 = 3
        var5 = 4
        var6 = 5
        Set G = Range("Regroupement!G3:G" & dernierelignegeode)
        Set K = Range("Regroupement!K3:K" & dernierelignegeode)
        Set O = Range("Regroupement!O3:O" & dernierelignegeode)
        
        
        For j = 3 To derniereligneprepplusop
            
            If (Range("V" & j).Value <> 0) Then
                var1 = Range("C" & j).Value
                S1 = 0
                S2 = 0
                S3 = 0
                S4 = 0
                S5 = 0
                i = 1
                
                For i = 1 To G.Count
                S1 = S1 + (G(i) = var1) * (K(i) = var2) * O(i)
                S2 = S2 + (G(i) = var1) * (K(i) = var3) * O(i)
                S3 = S3 + (G(i) = var1) * (K(i) = var4) * O(i)
                S4 = S4 + (G(i) = var1) * (K(i) = var5) * O(i)
                S5 = S5 + (G(i) = var1) * (K(i) = var6) * O(i)
                Next
                Range("E" & j).Value = S1
                Range("F" & j).Value = S2
                Range("G" & j).Value = S3
                Range("H" & j).Value = S4
                Range("I" & j).Value = S5
                
            Else
                Range("E" & j).Value = ""
                Range("F" & j).Value = ""
                Range("G" & j).Value = ""
                Range("H" & j).Value = ""
                Range("I" & j).Value = ""
            End If
                
                
        Next
    Le message d'erreur apparait après le Next en gras.

    Les variables derniereligneprepplusop et dernierelignegeode sont définis en Long.


    Merci de votre aide.
    Cdlt,

    Vincent

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 58
    Points : 56
    Points
    56
    Par défaut
    As-tu définis la variable j en long également ?

  3. #3
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    Oui i et j sont également définis en Long

  4. #4
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour à tous,

    Quand tu fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim S1, S2, S3, S4, S5 As Long
    Seule la variable S5 est définnie as long, la bonne syntaxe en VBA est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim S1 As Long, S2 As Long, S3 As Long, S4 As Long, S5 As Long

  5. #5
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Points : 307
    Points
    307
    Par défaut
    A mon avis , les syntaxes du type suivant sont un peu nébuleuses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    S1 = S1 + (G(i) = var1) * (K(i) = var2) * O(i)
    G et K et O sont des objets Range .
    Pour moi , il faut améliorer la syntaxe avant de s'interesser au contenu des cellules .
    Au moment du plantaxe, tu peux essayer de relever la valeur de i et vérifier le contenu de ces cellules .

  6. #6
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    J'ai fait comme tu m'as dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim S1 As Long, S2 As Long, S3 As Long, S4 As Long, S5 As Long
    Mais le problème persiste.
    Ce que je trouve bizarre c'est que ça marche très bien depuis 1 mois et puis tout d'un coup vu que j'ai eu plus de ligne que d'habitude ça a planté.Aujourd'hui ça remarche mais je voudrais résoudre le problème car il risque de replanter bientot.

  7. #7
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    Au moment où ça plante i est bloqué à 20630 alors qu'il devrait monter à 22 800.
    Et de plus quand je regarde O(i) il m'affiche
    O(i) = Erreur2007
    .

    Je travaille sur du excel 2002.

  8. #8
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Re,

    Met option explicit en début de module et déclares toutes tes variables.

  9. #9
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    Et de plus quand je regarde O(i) il m'affiche

    Citation:
    O(i) = Erreur2007



    Je travaille sur du excel 2002.


    Toutes mes variables sont bien déclarées.
    Peux tu m'expliquer comment mettre option explicit en début de module ?

  10. #10
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    Je viens de trouver le problème !!!

    O(i) à la valeur i = 20630 à comme valeur Div/0!.

    C'est la premiere fois que ça arrive dans cette colonne.

    En tout cas, je vous remercie tous pour votre aide spécialement aalex_38 et CodeFacile.

  11. #11
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Peux tu m'expliquer comment mettre option explicit en début de module ?
    En haut de ton code VBA tu mets :


    Je viens de trouver le problème !!!

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

Discussions similaires

  1. Insertion valeur dans une variable de type Object
    Par Doki95 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 08/04/2011, 16h30
  2. Réponses: 2
    Dernier message: 18/06/2009, 00h00
  3. Créations de table selon les valeurs d'une variable
    Par rocsylcanar dans le forum SAS Base
    Réponses: 9
    Dernier message: 27/05/2009, 13h22
  4. Réponses: 5
    Dernier message: 12/10/2008, 14h41
  5. Réponses: 5
    Dernier message: 13/12/2006, 14h34

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