Erreur '6' depassement de capacité

redga - 1 oct. 2012 à 14:02
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 1 oct. 2012 à 19:41
Bonjour,

je dois reprendre une macro dans ma nouvelle boite et j'ai un probleme avec un des fichiers.
Cette macro traite en general des fichiers de 500 lignes maxi. Mais j'en ai un de 1 500 lignes et la une des fonctions 'IF' ne passe pas.

J'ai essayé de la modifier mais j'ai toujours le meme probleme de depassement de capacité.

la partie qui pose probleme

----------------------------------------------------------

For i = 2 To Range("A1").End(xlDown).Row
'toto = Val(contrat)

If Cells(i, 30) <> "" And Cells(i, 2) holding And Cells(i, 10) client And Cells(i, 12) = contrat Or Cells(i, 30) <> "" And Cells(i, 2) = holding And Cells(i, 10) = client And contrat = "TOUS" Or Cells(i, 30) <> "" And Cells(i, 2) = holding And "TOUS" = client Then

MsgBox ("Attention, vous êtes sur le point de corriger les informations pour le client " & holding)

Exit For

End If

----------------------------------------------------------

Cette macro est utilisée dans un formulaire qui permet de mettre a jour chaque ligne en fonction de la holding, de la filiale et du contrat.
La partie posant probleme est le IF, il doit y avoir trop de données a traiter et ca ne va pas.
Je cherche depuis ce matin mais je n'ai pas trouvé de solution valable.


Avez vous une piste.

D'avance merci.

3 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
1 oct. 2012 à 18:47
Bonjour,

As-tu espionné les valeurs des données de la ligne ? (Sélection, puis Shift+F9)
Je pense que l'origine du problème n'est pas clairement déterminé.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
1 oct. 2012 à 19:33
Bonjour,
Il y a de surcroît des redondances évidentes dans ton code.
On ne sait par ailleurs pas vraiment ce que tu cherches à faire exactement
Exprime-le voir en français naturel, que l'on y voie plus clair.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 oct. 2012 à 19:41
Salut

Pour faciliter la compréhension de tous :
- Quand tu colles du code, utilise la coloration syntaxique = 3ème icone à droite
- Dans ton code, au lieu d'avoir des lignes de 3 km de long, utilise le symbole _ pour couper une instruction et continuer à la ligne (21 maximum) --> Clarté

Ce qui donnerait :
For i = 2 To Range("A1").End(xlDown).Row
    'toto = Val(contrat)
    If Cells(i, 30) <> "" And _
       Cells(i, 2) = holding And _
       Cells(i, 10) = client And _
       Cells(i, 12) = contrat Or _
       Cells(i, 30) <> "" And _
       Cells(i, 2) = holding And _
       Cells(i, 10) = client And _
       contrat = "TOUS" Or _
       Cells(i, 30) <> "" And _
       Cells(i, 2) = holding And _
       "TOUS" = client Then
        MsgBox ("Attention, vous êtes sur le point de corriger les informations pour le client " & holding)
        Exit For
    End If
Next i

Moi, je vois des And et des Or qui se mélangent : jamais bon --> Utiliser des parenthèses.

Bien qu'une égalité ait des éléments identiques, cette formulation n'est pas top (et moins aisée à comprendre/relire) :
"TOUS" = client
Mieux vaudrait
client = TOUS"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous