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 :

Out of Range, que se passe-t-il ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Responsable de projet
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Points : 110
    Points
    110
    Par défaut Out of Range, que se passe-t-il ?
    Bonjour,

    J'ai développé une macro qui tri une feuille en fonction de catégories spécifiées sur une autre feuille.

    Quand je l’exécute, au bout d'un moment je me retrouve avec le message d'erreur "Out of Range" et je comprend pas du tout pourquoi.

    Avez vous une idée ?

    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
     
    Sub reportingByModality()
     
        Application.DisplayAlerts = False
     
        With Sheets("raw_data")
     
        Dim category As String
        Dim lastCategory As String
        Dim modality As String
        Dim maxLineRawData As Long
        Dim maxLineModality As Long
        Dim cursor As Long
     
        category = ""
        lastCategory = ""
        maxLineModality = Sheets("Modality").Range("B65536").End(xlUp).Row
        maxLineRawData = Sheets("raw_data").Range("B65536").End(xlUp).Row
     
            For i = 2 To maxLineModality
     
                modality = Trim(Sheets("Modality").Range("A" & i).Value)
                category = Trim(Sheets("Modality").Range("B" & i).Value)
     
                If Replace(category, "/", "-") <> Replace(lastCategory, "/", "-") Then
                    Application.ScreenUpdating = True
     
                    'On crée une nouvelle feuille
                    category = Replace(category, "/", "-")
                    Sheets.Add.Move After:=Sheets(Sheets.Count)
                    Sheets(Sheets.Count).Name = category
     
                    'on copie l'entete
                    Sheets("raw_data").Cells(1, "A").EntireRow.Copy
                    Sheets(category).Cells(1, 1).Insert Shift:=xlDown
                    Sheets(category).Range("A:CN").Columns.AutoFit
     
                    Application.ScreenUpdating = False
                End If
     
                'On parse la feuille raw data
                cursor = 2
                For j = 1 To maxLineRawData
     
                    If Trim(Sheets("raw_data").Range("CF" & j).Value) = Trim(modality) Then
                        Sheets("raw_data").Cells(j, "A").EntireRow.Copy
                        Sheets(category).Cells(cursor, 1).Insert Shift:=xlDown
                        cursor = cursor + 1
                    End If
     
                Next j
     
                lastCategory = category
     
            Next i
     
        End With
     
    End Sub

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Sur qu'elle ligne ?

  3. #3
    Membre régulier
    Profil pro
    Responsable de projet
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par bbil Voir le message
    Sur qu'elle ligne ?
    Je débute complètement en VBA, comment connaitre la ligne qui pose soucis ?

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Je pencherai pour une variable dont le type n'est pas adaptée du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim I As Integer 'bornes -32767 à 32767
     
    'dépassement de capacité
    I = 60000
    Mais je peux me tromper sans plus de précision.

    Oups,

    Je n'ai pas fait attention au code, désolé, les variables semblent bien déclarées.
    Je pense que le mieux est de faire un pas à pas, appuis successifs sur F8 et à un moment donné l'erreur surviendra sur la ligne incriminée.

    Hervé.

  5. #5
    Membre régulier
    Profil pro
    Responsable de projet
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par Theze Voir le message
    Oups,

    Je n'ai pas fait attention au code, désolé, les variables semblent bien déclarées.
    Je pense que le mieux est de faire un pas à pas, appuis successifs sur F8 et à un moment donné l'erreur surviendra sur la ligne incriminée.

    Hervé.
    Ouai j'y ai pensé, mais je parcoure 34 000 lignes, c'est super long :s

  6. #6
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Citation Envoyé par bbil Voir le message
    Sur qu'elle ligne ?
    Bonjour,

    normalement, quand il y a message d'erreur, le code VBA s'arrête sur une ligne soulignée => celle qui provoque l'erreur.

    C'est cette ligne qu'on te demande

    Parfois, c'est plus complexe, si la ligne n'est pas significative, on te diras comment procéder.

    Si c'est une variable compteur, il faut inspecter sa valeur au moment du blocage.

    Genre I en integer ne pourrait monter à 34 000 par exemple s'il était concerné...

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  7. #7
    Membre régulier
    Profil pro
    Responsable de projet
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par Ormonth Voir le message
    Bonjour,

    normalement, quand il y a message d'erreur, le code VBA s'arrête sur une ligne soulignée => celle qui provoque l'erreur.
    Je suis sous Excel 2010 et il ne me souligne pas la ligne qui provoque l'erreur.
    Dois je activer une option pour cela ?

    Autrement, j'ai fais le teste en déclarant i et j en tant que Long, mais j'ai le même problème, c'est vraiment étrange !

  8. #8
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    Outils, Options, Général, Arrêt sur les erreurs non gérées (à cocher).

    Sinon, c'est plus complexe, mais à tous les coups tu sors du champ d'une variable, d'une plage ou de la feuille.
    Tu peux procéder par approximation, comme pour certaines recherches, tu limites ta procédure à 34000/ 2 = 17 000.
    ça plante ou non, selon tu recommence pour
    17 000 /2 ou 17 000 + 17 000/2 pour circonscrire la zone d'erreur, ça peut se programmer d'ailleurs

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  9. #9
    Membre régulier
    Profil pro
    Responsable de projet
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Points : 110
    Points
    110
    Par défaut
    Magnifique, grace à toi je sais ou le probléme se situe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(category).Cells(cursor, 1).Insert Shift:=xlDown
    Par contre c'est complètement fou, je ne vois aucun dépassement de variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cursor = 2
    j = 9931
    i = 10

  10. #10
    Membre régulier
    Profil pro
    Responsable de projet
    Inscrit en
    Décembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet

    Informations forums :
    Inscription : Décembre 2005
    Messages : 97
    Points : 110
    Points
    110
    Par défaut
    Problème résolu

    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
    Sub reportingByModality()
     
        Application.DisplayAlerts = False
     
        With Sheets("raw_data")
     
        Dim category As String
        Dim lastCategory As String
        Dim modality As String
        Dim maxLineRawData As Long
        Dim maxLineModality As Long
        Dim cursor As Long
        Dim j As Long
        Dim i As Long
     
        category = ""
        lastCategory = ""
        maxLineModality = Sheets("Modality").Range("B65536").End(xlUp).Row
        maxLineRawData = Sheets("raw_data").Range("B65536").End(xlUp).Row
     
            'For i = 2 To maxLineModality
            For i = 9 To 10
     
                modality = Trim(Sheets("Modality").Range("A" & i).Value)
                modality_s = modality
                category = Trim(Sheets("Modality").Range("B" & i).Value)
                category = Replace(category, "/", "-")
     
                If category <> lastCategory Then
                    Application.ScreenUpdating = True
     
                    'On crée une nouvelle feuille
                    Sheets.Add.Move After:=Sheets(Sheets.Count)
                    Sheets(Sheets.Count).Name = category
     
                    'on copie l'entete
                    Sheets("raw_data").Cells(1, "A").EntireRow.Copy
                    Sheets(category).Cells(1, 1).Insert Shift:=xlDown
                    Sheets(category).Range("A:CN").Columns.AutoFit
     
                    Application.ScreenUpdating = False
                End If
     
                'On parse la feuille raw data
                cursor = 2
                For j = 1 To maxLineRawData
     
                    If Trim(Sheets("raw_data").Range("CF" & j).Value) = Trim(modality) Then
                        Sheets("raw_data").Cells(j, "A").EntireRow.Copy
                        Sheets(category).Cells(cursor, 1).Insert Shift:=xlDown
                        cursor = cursor + 1
                    End If
     
                Next j
     
                lastCategory = category
     
            Next i
     
        End With
     
    End Sub
    Un GRAND merci aux personnes qui m'ont aidées

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

Discussions similaires

  1. Out-of-range value que dans une clause WHERE
    Par Marc_27 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/07/2012, 15h57
  2. un impossible "list index out of range" alors que si !
    Par guiguizekid dans le forum Général Python
    Réponses: 3
    Dernier message: 18/05/2008, 04h04
  3. datetime data type resulted in an out-of-range
    Par faamugol dans le forum ASP
    Réponses: 2
    Dernier message: 26/05/2004, 20h51
  4. Que se passe-t-il en interne si un ROLLBACK plante ?
    Par jack554 dans le forum Administration
    Réponses: 4
    Dernier message: 07/04/2004, 12h55
  5. [VB6] [Install] Que se passe-t-il lors du setup?
    Par petit scarabée dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 28/10/2002, 08h26

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