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 d'exécution 6 Dépassement de capacité [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Par défaut Erreur d'exécution 6 Dépassement de capacité
    Bonjour
    J'ai ce code qui fonctionne sur d'autres classeurs sans aucun problème, mais qui ne fonctionne pas sur ce classeur, j'ai passé 4 heures à tout essayer, mais rien n'y fait, j'ai toujours Erreur d'exécution 6 Dépassement de capacité...ce code fait suite à d'autres lignes de code par :
    Call Module2SupprimeMotAdroitePour1ColonneAvecBoucle

    Je procède ainsi: j'ai mon module principal qui Appelle par Call les modules au fur et à mesure de l'avancement de leurs bon fonctionnement, et là quand j'appel ce lui ci, j'ai ce beug dont je ne comprends pas...

    Je ne sais plus quoi faire...

    Ce code supprime le mot de droite d'une chaine.

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Module2SupprimeMotAdroitePour1ColonneAvecBoucle()
     
    Dim derlig As Integer, i As Integer
      derlig = Range("B:B").SpecialCells(xlCellTypeLastCell).Row
      For i = 1 To derlig
        Range("B" & i).Value = Mid(Trim(Range("B" & i).Value), 1, InStrRev(" " & Trim(Range("B" & i).Value), " ") - 1)
      Next
    End Sub

  2. #2
    Membre éprouvé Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Par défaut
    En fait, je viens de m'apercevoir que si j'enregistre mon fichier là ou le code s'arrête, la macro fonctionne en la relançant, je pense qu'il me faudrait un code qui me vide la mémoire de ma dernière copie car c'est celà qui empêche la macro de s'exécuter.
    J'ai essayer de mettre ces lignes avant le lancement du code, mais c'est pareil.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ' désactiver le rafraîchissement de l'écran pour accélérer le traitement
        Application.ScreenUpdating = False
        ' désactiver les alertes pour empêcher l'affichage
        ' des messages du genre "Voulez-vous etc."
        Application.DisplayAlerts = False

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Dans ton code tu désignes une plage (Range), mais tu ne parles pas de la feuille.

    En effet, par défaut ton code va s'opérer sur la feuille active (car tu n'indiques pas la feuille), es-tu sûr que ce soit la bonne actuellement ?

    De plus tu as des variables de type Entier (Integer), soit une limite de 32000, es-tu sûr que ta dernière ligne n'est pas supérieure à 32000 ? Change le type en long de tes deux variables pour voir.

    Philippe

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    Salut

    Je pense également que le problème résulte du typage de i en integer

    A ce propos (et par ailleurs) :
    es-tu bien conscient de ce que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    derlig = Range("B:B").SpecialCells(xlCellTypeLastCell).Row
    fait que derlig est la ligne de la dernière cellule remplie du usedrange et non celle de la dernière cellule remplie de la colonne B ?
    Est-ce bien ce que tu veux ?

  5. #5
    Membre éprouvé Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Par défaut
    Bonjour babaothe, philippe

    J'ai bien lu vos conseils, j'ai modifié le code au plus simple en nombre de ligne, j'ai nommé la feuille et ...ça bloque, je ne touche rien, j'enregistre le fichier tel quel, je lance la macro et ça fonctionne ... je n'y comprends plus rien , un vrai casse tête ...pourtant j'utilise cette macro sur d'autres fichiers sans problême ... je vais encore essayer de chercher dans la mise en forme de la chaine, pour voir si c'est le contenu qui me bloque, il faut que je trouve, sinon je vais devoir chercher une autre macro qui supprime le mot à droite d'une chaine.
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Module2SupprimeMotAdroitePour1ColonneAvecBoucle()
     
    Sheets(2).Range("B2:B10").Select
     
    Dim derlig As Integer, i As Integer
      derlig = Range("B2:B10").SpecialCells(xlCellTypeLastCell).Row
      For i = 1 To derlig
        Range("B" & i).Value = Mid(Trim(Range("B" & i).Value), 1, InStrRev(" " & Trim(Range("B" & i).Value), " ") - 1)
      Next
    End Sub

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    re salut

    Ecoute et ne crie pas partout que je suis un violent (ce qui est loin d'être le cas) :

    1) et surtout : je n'aime pas un tel mécanisme car il est dangereux (tel qu'il est) puisque, lancé plusieurs fois, il aboutirait nécessairement, au bout d'un certain nombre de fois, à des cellules vides !!! (mais c'est encore autre chose et je te laisse avec la décision à prendre ou à ne pas prendre de ne traiter ainsi que si au moins deux mots !)
    2) en analysant ton code, que vois-je ? ===>> que tu veux supprimer le dernier mot de chaque cellule entre B2 et B10. Bien ! cela sous-entend donc que tu veux traiter ainsi les seules cellules qui ne comportent pas de résultats résultant de formules ou fonctions ('sinon : ce serait tourner en rond !)
    3) dans un tel cas et lourdeurs pour lourdeurs (je n'aime décidément pas normalement utiliser de tels mécanismes de gestion d'erreur, mais je le fais là; pour une fois, pour que tu puisses "suivre" un peu) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Module2SupprimeMotAdroitePour1ColonneAvecBoucle()
      Dim plage As Range
      On Error Resume Next
      Set plage = Sheets(2).Range("B2:B10").SpecialCells(xlCellTypeConstants)
      If Not Err Then
        For Each c In plage
          c.Value = Mid(Trim(c.Value), 1, InStrRev(" " & Trim(c.Value), " ") - 1)
        Next
      End If
    End Sub
    voilà (et je regrette cette vraie lourdeur, crois-moi)

    EDIT : et je regrette également que tu n'aies pas su lire ni Philippe JOCHMANS, ni moi-même.
    Nous te parlions tous deux du typage de i.
    J'ai personnellement appelé ton attention sur un fait complémentaire précis, qui est tel que ton derlig (tel que calculé) dépasse probablement, pour les raisons que je t'ai signalées, la limite d'un Integer !

    Lis et relis calmement....
    Viendra alors, cette étape passée, une solution sans gestion d'erreur et donc plus "orthodoxe".
    Bonne analyse et bonne étude.

    EDIT :
    Allez ... regarde mais tiens compte de tout ce que j'ai dit plus haut (il te faut l'assimiler) :
    Tu veux quoi ? traiter toutes tes cellules du range B2:B10, mais il ne faut surtout pas "tripoter" celles contenant une formule de calcul (me relire) Tu n'as nul besoin de définir la dernière ligne (forcément 10 !) puisque tu as déjà défini la plage de traitement (CQFD). Alors ? tout bête ===>>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Module2SupprimeMotAdroitePour1ColonneAvecBoucle()
        For Each c In Sheets(2).Range("B2:B10")
          If Not c.HasFormula Then
            c.Value = Mid(Trim(c.Value), 1, InStrRev(" " & Trim(c.Value), " ") - 1)
          End If
        Next
    End Sub
    (et sans préjudice de ce que je t'ai dit à propos de la catastrophe que génèrerait plusieurs lancement successifs, hein... et que l'on peut gérer facilement avec une condition complémentaire fort simple)

    EDIT : et si finalement la plage B2:B10 n'était qu'un exemple, mais que tu pourrais avoir à traiter une plage plus importante et donc ne pas traiter au delà de sa dernière ligne remplie, dis-le et on "reduira" alors comme il le faut.

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

Discussions similaires

  1. "erreur d'exécution" dépassement de capacité
    Par guigui71 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 30/04/2010, 01h04
  2. Erreur d'exécution '6': Dépassement de capacité
    Par XpFive dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 05/08/2009, 09h31
  3. Erreur d'éxecution '6' : dépassement de capacité
    Par mariafan dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/06/2008, 10h21
  4. [Access 2003] Erreur "Dépassement de capacité"
    Par Bapt.ice dans le forum Access
    Réponses: 2
    Dernier message: 08/06/2006, 12h15
  5. Réponses: 8
    Dernier message: 06/02/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