Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Il y a 83 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Alleger optimiser mon code, ouvert à toutes critiques !!! ;)

 
n°18874
lapomme23
Profil : Jeune recrue
Posté le 06-08-2007 à 14:21:49  profilanswer
 

Bonjour je me permets de réecrire un message à la suite de l'ancien. J'ai réussi à trouver une solution pour mon ancien problème.
J'ai juste besoin d'aide pour optimiser mon programme, le rendre un peu plus court, plus lisible etc...il marche comme je veux.
Si vous avez des remarques à faire qui allegeraient le programme, par avance merci.
 
De plus comme je fais un copier coller de chacune de mes 180 feuilles sur une nouvelle feuille le programme est un peu long.
En effet il ouvre chaque feuille pour faire le copier coller, si quelqu'un a une idée pour copier coller sans ouvrir la feuille merci.
 

Code :
  1. Private Sub CommandButton1_Click()
  2. If ComboBox3.Value = "" Then
  3.     MsgBox "Merci de choisir un produit"
  4.     Exit Sub
  5. End If
  6. Dim i, j, k, Lne As Integer
  7. k = 3
  8. Sheets("Produits" ).Select
  9. For i = 1 To 129
  10.     If (Range("A" & i).Value = ComboBox3.Value) Then
  11.     Lne = i
  12.     End If
  13. Next i
  14.    
  15. For j = 3 To 183
  16.    Worksheets(j).Select
  17.    Range("B" & Lne & ":I" & Lne).Select
  18.    Selection.Copy
  19.    Sheets("Prod" ).Select
  20.    Range("B" & k).Select
  21.    Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
  22.         , Transpose:=False
  23.     ActiveSheet.Paste Link:=True
  24.    k = k + 1
  25. Next j
  26. k = 3
  27. For l = 3 To 183
  28. Sheets("Prod" ).Select
  29. Range("A" & k).Value = Worksheets(l).Name
  30. k = k + 1
  31. Next l
  32. Range("A1" ).Value = ComboBox3.Value
  33.    
  34. Range("A1" ).Select
  35. Unload Me
  36. End Sub


Message édité par lapomme23 le 06-08-2007 à 15:29:55
n°18877
galopin01
Profil : Membre
Posté le 07-08-2007 à 08:09:11  profilanswer
 

bonjour,
Multiplier les posts sur le même sujet n'est pas le meilleur moyen pour te faire aider.
De plus d'un post à l'autre il ya des noms de feuilles qui change. Pas facile d'y comprendre quelque chose dans dans ta démarche.
D'autant que tes explications sont confuses... Tu mélanges feuilles et classeur dans tes explications, alors que visiblement tu as tout sur le même classeur.
La perte de temps n'est donc pas dans l'ouverture de classeurs mais dans les nombreuses boucles redondantes.
Enfin tous ces collages avec liens ne doivent pas accélérer le traitement !
Pour résumer ligne 12 à 15 pas fameux... Tu avais trouvé mieux avec :

Code :
  1. Do
  2.     i = i + 1
  3. Loop Until (ComboBox3.Value = Range("A" & i).Value)


 
Ligne 18 et 33 : Quand on a une boucle, inutile d'en faire 2...
For j = 3 To 183
 
Ligne 38, 40 ces lignes me paraissent fort douteuses mais je les ai laissées.
 
Enfin supprimer tous les Select : ils ne servent à rien ce sont eux qui bouffent 50 % de ton temps, les autres 50 % sont pris par l'affichage à l'écran.
En commençant la macro par :
Application.ScreenUpdating = True
... ça devrait déjà bien améliorer le truc
 
Toutefois si tu tiens absolument à avoir un lien entre les 2 feuilles ce n'est pas un collage qu'il faut faire
Il suffit de créer le lien directement avec une formule du genre :

Code :
  1. For j = 3 To 183
  2.    Sheets("Prod" ).Range("B" & k).Formula = "=" & Worksheets(j).Name & "!B" & i
  3. Next j


 
En résumé, (bien sur je n'ai pas pu tester) ça devrait donner :
 

Code :
  1. Private Sub CommandButton1_Click()
  2. Dim i%, j%, z$
  3. Application.ScreenUpdating = True
  4.   If ComboBox3.Value <> "" Then
  5.  
  6.     Do
  7.       i = i + 1
  8.     Loop Until (ComboBox3.Value = Range("A" & i).Value)
  9.  
  10.     For j = 3 To 183
  11.       z = Worksheets(j).Name
  12.        Sheets("Prod" ).Range("B" & k).Formula = "=" & z & "!B" & i
  13.        Sheets("Prod" ).Range("A" & k).Value = z
  14.     Next j
  15.  
  16.     With Sheets("Prod" )
  17.       .Range("A1" ).Value = ComboBox3.Value
  18.       .Activate
  19.     End With
  20.  
  21.     Unload Me
  22.  
  23.   Else
  24.     MsgBox "Merci de choisir un produit"
  25.   End If
  26. End Sub


 
...Si j'ai bien compris !  :D  
 
A+


Message édité par galopin01 le 07-08-2007 à 08:16:25
n°18879
lapomme23
Profil : Jeune recrue
Posté le 07-08-2007 à 09:51:27  profilanswer
 

merci pour tes critiques

n°18881
galopin01
Profil : Membre
Posté le 07-08-2007 à 20:02:10  profilanswer
 

bonsoir,
j'espère que tu ne le prends pas seulement pour des critiques, parce que dans ce cas je me suis fatigué pour rien...
Si tu te balades un peu à droite à gauche tu verras qu'il n'est pas dans mon habitude de me moquer des gens : Toutes ces observations sont absolument pertinentes et je démontre code à l'appui tout ce que j'affirme.
Il reste que je ne peux pas tester mon code car je n'ai pas de classeur témoin et il subsiste quelques zones de flou dans tes exposés.
En conséquence je suis peut-être un peu à coté de la plaque...
Ceci dit si mon code ne convient pas et si tu es capable d'expliquer ce qui ne va pas et ce que tu es en train de faire, éventuellement de joindre un petit classeur démo, (je n'ai pas besoin de 180 pages ni de 200 lignes par pages) je veux bien reprendre le truc...
A+


---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°18884
lapomme23
Profil : Jeune recrue
Posté le 09-08-2007 à 10:39:35  profilanswer
 

ne te sens pas agresser c'était sincère ...

n°18885
lapomme23
Profil : Jeune recrue
Posté le 09-08-2007 à 10:46:31  profilanswer
 

Bonjour...un nouveau problème un peu différent de mon ancien.
J'ai un UserForm3 avec deux ComboBox 3 et 4, un TextBox1 et deux commandbutton  
Je voudrais qu'en cliquant sur un de mes deux commandbutton cela change la RowSource d'un ComboBox1 d'un autre UserForm (UserForm1 ici)
Je voudrais ajouter le TextBox1.Value que je viens de demander à l'utilisateur dans la RowSource de l'autre Userform1
 
Quand j'excécute il me dit accès refusé
N'y connaissant pas grand chose quelqu'un pourrait il m'orienter?
Voilà le bout de code qui nous interesse:
 

Code :
  1. UserForm1.ComboBox1.AddItem TextBox1.Value


Aller à :
Ajouter une réponse