Macro excel : optimisation de code et création

Fermé
james405 Messages postés 154 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 10 juin 2014 - 24 mai 2014 à 16:52
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 10 juin 2014 à 08:14
Bonjour,

J'ai commencé un projet sous VBA que j'ai bientôt terminé. Pour autant, j'ai besoin d'optimiser certains bouts de codes.

J'aurais besoin de qqn qui pourrait m'aider et que je pourrais contacter par téléphone pour lui expliquer et répondre aux questions en direct. Je pense qu'il y en a pour une ou deux heures. Je ne peux pas mettre le fichier en ligne car c'est un peu confidentiel.

Donc voila si quelqu'un s'y connait bien en macro et à un peu de temps à me consacrer je suis preneur. (bien sur une contrepartie pourra être fournie.
A voir également:

42 réponses

skk201 Messages postés 942 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
Modifié par skk201 le 28/05/2014 à 11:24
Apparement personne ne veut te faire des coups de fil.

Un suivi par message privé serait pas suffisent à ton avis ?
0
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 339
28 mai 2014 à 11:08
Bonjour,

CCM est un forum où on expose publiquement ses problèmes pour obtenir
 une assistance publique, visible de tous et gratuite 
.
0
skk201 Messages postés 942 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
28 mai 2014 à 11:25
HS // Actuellement dans la charte :

"Les propositions d'aide par messagerie privée ou en prise de contrôle à distance ne sont pas permises sur le forum et les intervenants verront leurs messages supprimés. Exception faite des intervenants certifiés ccm dans le cadre d'un suivi de dossier et de besoin de numéro confidentiel ; le reste de la discussion devant se poursuivre sur le forum."

On parle ni du fait que l'assistance est gratuite, ni qu'elle est visible de tous :)
0
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 339
Modifié par Chris 94 le 28/05/2014 à 12:06
Comme tu dis :
Les propositions d'aide par messagerie privée ou en prise de contrôle à distance ne sont pas permises sur le forum...
D"ailleurs tu notes aussi, plus exactement tu copies à la suite :
...les intervenants verront leurs messages supprimés.

Ce n'est donc pas HS, ni ta proposition (mail) avant ta correction de 11 h 24, ni celle d'après ne sont conformes à la charte.

Merci de ne pas insister sur cette vois glissante.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
skk201 Messages postés 942 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
28 mai 2014 à 12:00
Oui par mail je pensait message privé :)

Mais per message privé c'est pas interdit ? Je pense que par messagerie privé ça sous-entend plutôt MSN, facebook, etc. ?
0
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 339
28 mai 2014 à 12:06
Dernière explication :
Toute proposition d'aide privée que ce soit par MP sur CCM, par mail, par téléphone, par WLM, FB, Twitter ou avec des tam-tams est prohibée. Le but de CCM est de mettre l'aide à la disposition du plus grand nombre.
0
skk201 Messages postés 942 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
28 mai 2014 à 13:24
Alors James405 est-ce que tu peux nous donner plus d'information par rapport é ton code ?

A ton avis qu'est-ce qui n'est pas optimal ?
0
james405 Messages postés 154 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 10 juin 2014
28 mai 2014 à 21:16
Ok dsl ... Je vais mettre de demain un fichier bien modifier pour ne pas avoir d'info confidentielle dedans ...

J'ai 5 soucis de code et je vais commencer par le premier qui est d'optimiser le bout de code du commande bouton 2 qui fait une quadruple boucle sur des tableaux de données pré enregistrée ... La macro met 30 secondes a s'exécuter et c'est vraiment trop ... Je met le fichier en ligne tard ce soir ou demain ... Désole je ne pensais pas enfreindre les règles ...
0
james405 Messages postés 154 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 10 juin 2014
28 mai 2014 à 21:39
Bon je le fais maintenant du coup !! :)

Pour expliquer le principe de l'outil assez rapidement :

C'est un outil qui permet de faire des budget et planning de travaux. quand on arrive sur l'outil, on saisit les informations du chantier. Ensuite on saisit des taches comme terrassement remblais... Quand je saisis une tache j'y affecte des ressources !! Ensuite je fais la même chose pour chaque tâche.. Ce n'est pas très clair mais vous comprendrez en regardant l'exemple mis dans l'outil. Pour tester la lenteur de la macro il suffit de charger l'exemple (pour cela clic sur recherche, puis chantier test puis charger puis edition :) ) c'est cette macro qui prend bcp trop de temps a mon gout !

https://www.cjoint.com/?DECvJJSkd47

Bon n'hesitez pas si vous avez des questions je serai très réactif, (et vous en aurez je pense). le code est assez basique mais si je peux faciliter la compréhension ...

Voila le fautif !!!



For lig = 6 To 216 'On boucle sur toutes les lignes de la feuille BudgetPlan

'On boucle sur toutes les colonnes de la feuille BudgetPlan
For Col = 8 To drcol
'on remet la quantité à 0
qtte = 0
'On boucle sur toutes les lignes de la feuille "plan" (même nbre de colonne que BudgetPlan)
For j = 6 To 216
'Si la cellule est colorée alors
If .Cells(j, Col).Interior.ColorIndex = 15 Then
'on boucle sur notre tableau de données
For i = LBound(TblDonnees, 2) To UBound(TblDonnees, 2)
'si on trouve la tache et la désignation dans la même ligne du tableau, on ajoute la quantité
If TblDonnees(1, i) = Feuil10.Cells(j, 2) And TblDonnees(4, i) = Feuil10.Cells(lig, 2) Then qtte = qtte + CInt(TblDonnees(5, i))

Next i
End If
Next j

.Cells(lig, Col) = qtte

If fourn = True Then Exit For
Next Col

Next





Merci pour votre aide :)
0
Bonjour
Ses jolie mes on peut rien voir car il manque le mot de passe
Et on ne peut rien voir


A+
Maurice
0
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 339
29 mai 2014 à 10:38
Bonjour,

Hein ? Comment ? Qu'est-ce que tu ne vois pas ?
0
james405 Messages postés 154 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 10 juin 2014
29 mai 2014 à 10:38
admin le mot de passe.
0
re
la feuille "BudgetPlan" est vide
la feuille "plan" est vide
il manque par mal de chose dans la macro HI

A+
Maurice
0
james405 Messages postés 154 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 10 juin 2014
29 mai 2014 à 12:44
Oui les deux feuilles sont vides j'ai peur de les supprimer elles me servaient au départ mais plus maintenant .. Pour la macro tout y es ... Pk dis tu qu'il en manque ?


0
re

Sub TestOnglet()
'Plein de correction a faire
'With Sheets(3) 'Feuille "plan" pas bon
'car si on deplace Onglet ca ne marche plus ou si on change le nom de l'onglet
'Mettre With Sheets(Feuil3.Name) ou With Feuil3
' en gros il faut tous revoir
With Feuil3
.Select
.Unprotect "admin"
.Range("A2:BZ" & Rows.Count).Clear
.Cells.Interior.ColorIndex = xlNone
.Protect "admin", True, True, True, True, True, True
End With
End Sub

A+
Maurice
0
james405 Messages postés 154 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 10 juin 2014
29 mai 2014 à 14:00
Merci pour ton aide maurice mais ces feuilles ne me servent plus ... L'optimisation de code dont j'ai besoin concerne la macro du commande Bouton 22 de l'user form 1...
0
Re
je ne trouve pas le bouton CommandButton22 dans UserForm1

A+
Maurice
0
james405 Messages postés 154 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 10 juin 2014
29 mai 2014 à 19:28
command bouton 2...
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 717
30 mai 2014 à 19:00
Bonjour,

Ton code est foisonnant et donc ce n'est pas étonnant qu'il prenne du temps.
Dans la portion que tu vises, tu peux mettre ta feuille10 en tableau ainsi que les cellules en couleur, cela devrait améliorer.
Il faudrait des heures pour rentrer dans ta logique car même si les fonctions sont basiques, leur combinaison ne l'ai pas tellement même si pour toi c'est évident.
Pour améliorer la vitesse, il faudrait à mon avis constituer les fonctions de base par une procédure spécifique, puis les appeler à bon escient : cela s'appelle fonctionner en objet.
Voilà ma réflexion et il est très difficile d'aller modifier 2000 lignes de code écrites par un autre.
0
james405 Messages postés 154 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 10 juin 2014
30 mai 2014 à 19:03
Quand je le test par segment cet seulement la quadruple boucle qui prend tout le temps le reste prends deux secondes ... Les données sont stocké dans des tableaux et je boucle ces tableaux et mes cellules ... Il y a bien un petit moyen de faire mieux sur ces dix lignes de code. Le reste je gère a peu près
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 717
31 mai 2014 à 10:07
Bonjour james405,

la quadruple boucle qui prend tout le temps le reste prends deux secondes ...

Objection, votre honneur ce n'est pas vrai chez moi.
La boucle prend 1/3 du temps et le reste est partagé avec 1/3 avant et 1/3 après la boucle !
Si l'on diminue le temps de la boucle ce ne sera pas satisfaisant non plus.
0
james405 Messages postés 154 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 10 juin 2014
31 mai 2014 à 10:09
Lol le code prend cb de temp pour toi ? J'ai moi il prend 32 secondes dont 27 uniquement dans ma quadruple boucle
0