redga
-
1 oct. 2012 à 14:02
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 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é.
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)
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.
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)