amelioration du code avec for

  • Initiateur de la discussion Initiateur de la discussion sergio5862
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

sergio5862

Guest
Bonjour a toutes et tous

j'ai créé une macro qui controle des champs dans des colonnes dans plusieurs onglets et qui m'ecrit dans un onglet "resulats" les erreurs .J'aimerai savoir s'il est possible d'effecter un controle avec l'instruction For 1 to x ,la même procedure des colonnes non contigues.
( Voir For Index = 17 To 21 Step 1)
Le programme traite 13 Onglets pour une base d'environ 24 000 Infos .le Sub Traite_X(Adr_L,Adr_C,Adr_E ) effectue 10 Choix possible.Même en compressnant le minimun ,le fichier fait 638 Ko
Je vous joins un exemple pour une meilleure compréhension.A l'avance ,je vous remercie.
De plus ,je mets 5 minutes pour un controle complet de toutes mes variables /par Onglet


Cordialement ,Sergio5862
 
Dernière modification par un modérateur:
Re : amelioration du code avec for

Re bonjour ,
j'ai déposé le fichier suivant demande ,merci d'y regarder
'enlevé ce jour pour données confidentielles
Cordialement
sergio5862
 
Dernière modification par un modérateur:
Re : amelioration du code avec for

rebonjour sergio5862,

belle "usine à gaz" ton fichier 🙂
j'ai du mal à lire ton code, je m'y mettrai ce soir, mais déjà, un moyen d'améliorer ton code est d'enlever tous les "Select".

remplacer
Code:
Sheets("Resultats").Select
Cells(Adr_E, 1).Value = Text_Er
Cells(Adr_E, 2).Value = "blablabla"
par
Code:
Sheets("Resultats").Cells(Adr_E, 1).Value = Text_Er
Sheets("Resultats").Cells(Adr_E, 2).Value = "blablabla"
ou
Code:
With Sheets("Resultats")
      .Cells(Adr_E, 1).Value = Text_Er
      .Cells(Adr_E, 2).Value = "blablabla"
End With
a+
 
Re : amelioration du code avec for

Bonjour
merci MRomain de t'interesser a mon cas .
Je sais que le code n'est pas trop optimiser ,mais comme la majorité d'entre nous du forum ,je suis autodidact en visual basic Application.J'ai travaillé ce code en fonction des mes petites connaissance dans d'autres languages et j'en ai fait un condensé....
Je fais appel a vos connaissances en VBA pour optimiser mon code ,car je le trouve trop long en temps .J'ai mis les onglets les moins importants pour le test.
J'ai effectué cette macro pour controler avant une intégration les erreurs d'affectation des cellules.Cette base de données générent un fichier csv et est utilisée par une supervision.En cas de mauvais renseignements ( surtout les "ATS et "CTV" ( Alarme sur seuil ou consigne sur valeurs ,j'ai un plantage de mon application sans génération de log par le programme.Je voudrai pouvoir effectuer a l'aide de cette macro une vérification totale de tousmes onglets afin de repartir avec une base nickel.
Cordialement
Je vais commencé a modifié d'aprés tes remarques.Merci

Sergio5862
 
Dernière modification par un modérateur:
Re : amelioration du code avec for

re,

juste pour exemple si tu remplace
Code:
If Cells(Adr_L, Adr_C + 16).Value = "E" Then
 If (Cells(Adr_L, Adr_C + 29).Value = "" Or Cells(Adr_L, Adr_C + 30).Value = "" Or Cells(Adr_L, Adr_C + 31).Value = "" Or Cells(Adr_L, Adr_C + 32).Value = "" Or Cells(Adr_L, Adr_C + 33).Value = "" Or Cells(Adr_L, Adr_C + 34).Value = "" Or Cells(Adr_L, Adr_C + 35).Value = "" Or Cells(Adr_L, Adr_C + 36).Value = "") Then
 Text_Er = adresse_base + "---Variable type " + Cells(Adr_L, Adr_C).Value + " - Ligne : " + CStr(Adr_L) + ", Manque détails communication sur variable équipement"
 Sheets("Resultats").Select
 Cells(Adr_E, 1).Value = Text_Er
 Adr_E = Adr_E + 1
 Sheets("fichier a traiter").Select
 End If
End If
par
Code:
If Cells(Adr_L, Adr_C + 16).Value = "E" Then
 If (Cells(Adr_L, Adr_C + 29).Value = "" Or Cells(Adr_L, Adr_C + 30).Value = "" Or Cells(Adr_L, Adr_C + 31).Value = "" Or Cells(Adr_L, Adr_C + 32).Value = "" Or Cells(Adr_L, Adr_C + 33).Value = "" Or Cells(Adr_L, Adr_C + 34).Value = "" Or Cells(Adr_L, Adr_C + 35).Value = "" Or Cells(Adr_L, Adr_C + 36).Value = "") Then
      Sheets("Resultats").Cells(Adr_E, 1).Value = adresse_base + "---Variable type " + Cells(Adr_L, Adr_C).Value + " - Ligne : " + CStr(Adr_L) + ", Manque détails communication sur variable équipement"
      Adr_E = Adr_E + 1
  End If
End If
ta macro ira plus vite (sans les Select)

ensuite, si tu as une macro dont tu es sûr qu'elle ne buggue pas, tu peux rajouter
Code:
Application.ScreenUpdating = False
en début de macro, et
Code:
Application.ScreenUpdating = True
en fin de macro.
cela permet de désactiver temporairement l'affichage d'excel et ça accélère la macro (surtout si il y a beaucoup de Select).

a+
 
Re : amelioration du code avec for

bonjour au forum
Merci à MRomain.
je modifie et je teste l'amélioration concernant la rapidité.
concernant Application.ScreenUpdating = False ,je le fais deja en debut de macro et je le met a true en sortie .
A+

sergio5862
 
Dernière modification par un modérateur:
Re : amelioration DU PROGRAMME

bonjour au forum et MRomain

j'ai modifié le fichier suivant la réponse de mromain ( queje remercie encore)et je continue a l'améliorer.
En fonction du Type de la Col A ,je vérifie que tous les champs sont correctemnt remplis,si ce n'est ps le cas j'envoie l'erreur sur un onglet "resultats".
J'aimerai savoir si on on peut me donner la solution pour que la colonne de la ligne concerné par l'erreur se colore en Rouge ( Exemple si erreur en AK3:AK5 - supprimé volontairemnt la Taille en bit pour test sur onglet B_ES ).Je change deja la couleur sur le Type en Col A ,mais je ne sais pas faire pour les autres colonnes.
Merci de vous interesser a mon probléme.
Sergio5862
Cijoint.fr - Service gratuit de dépôt de fichiers
 
Re : amelioration du code avec for

R bonjour a tous

J'ai trouvé cette solution mais je pense pas que ca soit l'idéale

'Vérification communication si variable équipement
If Cells(Adr_l, Adr_c + 16).Value = "E" Then
If (Cells(Adr_l, Adr_c + 29).Value = "" Or Cells(Adr_l, Adr_c + 30).Value = "" Or Cells(Adr_l, Adr_c + 31).Value = "" Or Cells(Adr_l, Adr_c + 32).Value = "" Or Cells(Adr_l, Adr_c + 33).Value = "" Or Cells(Adr_l, Adr_c + 34).Value = "" Or Cells(Adr_l, Adr_c + 35).Value = ""
'couleur pour savoir ou se situe l'erreur
Or Cells(Adr_l, Adr_c + 36).Value = "") Then
Cells(Adr_l, Adr_c + 29).Interior.ColorIndex = 6
Cells(Adr_l, Adr_c + 30).Interior.ColorIndex = 6
Cells(Adr_l, Adr_c + 31).Interior.ColorIndex = 6
Cells(Adr_l, Adr_c + 32).Interior.ColorIndex = 6
Cells(Adr_l, Adr_c + 33).Interior.ColorIndex = 6
Cells(Adr_l, Adr_c + 34).Interior.ColorIndex = 6
Cells(Adr_l, Adr_c + 35).Interior.ColorIndex = 6
Cells(Adr_l, Adr_c + 36).Interior.ColorIndex = 6
' couleur pour le type
Selection.Interior.ColorIndex = 3

Merci d'y regarder
cordialement
sergio5862
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Retour