[VBA]Combo.Value > Long à l'execution

TheLio

XLDnaute Accro
Bonjour le forum,
Ci joint un fichier qui a pris forme grâce à Hasco, BrunoM45, + ceux que j'oublie. Que je remercie au passage ;)
Il y a deux points que j'aimerais pouvoir régler sur ce fichier bouton9 :
  • Au moment de la validation des données, le processus est assez long à s'executer, peut-on l'optimiser d'une manière ou d'une autre?

  • Paralellement, je n'arrive pas à modifier l'affectation des labels Nom, Age,...
    avec ma macro effacer,
    J'ai tenté de faire un deuxième Userform pour la Macro Effacer, atteignable par Mot de passe, ce qui serait mieux que de l'avoir sur le masque de base, mais je butte.
Alors si vous avez quelques pistes pour moi, c'est très volontiers.
A++
TheLio
 

Pièces jointes

  • Forum_Cartes.zip
    131.1 KB · Affichages: 54
  • Forum_Cartes.zip
    131.1 KB · Affichages: 53
  • Forum_Cartes.zip
    131.1 KB · Affichages: 57

TheLio

XLDnaute Accro
Re : [VBA]Combo.Value > Long à l'execution

Re tous,
Vous savez quoi?
Malgrés tous vos bons conseils et votre patience, (c'est peu dire)
l'execution est encore longue ~40-50 secondes par validation :confused:
Si vous avez encore une petite idée d'optimisation, je suis preneur
Merci d'avance
Lio
 

Pièces jointes

  • 14_12_Cartes_Repas.zip
    134 KB · Affichages: 32

skoobi

XLDnaute Barbatruc
Re : [VBA]Combo.Value > Long à l'execution

Salut Lionel,

remplace le code du bouton sauvegarde par celui-ci et dis-nous:

Code:
Private Sub BtnSave_Click()
  Dim Col As Long, Liste()
  'Dim I As Variant
  ligne = 6 + cbChambres.ListIndex
  'Pour les combos
  Application.ScreenUpdating = False
  Call DeprotegeTout
  ReDim Liste(1 To 1, 1 To 9)
  For Col = 11 To 19
    Liste(1, Col - 10) = Me.Controls("cbx" & Col).Value
  Next
  Sheets("BD").Range(Cells(ligne, 11), Cells(ligne, 19)) = Liste
  ReDim Liste(1 To 1, 1 To 11)
  For Col = 20 To 30
    Liste(1, Col - 19) = Me.Controls("cbx" & Col).Value
  Next
  Sheets("BD").Range(Cells(ligne, 20), Cells(ligne, 30)) = Liste
  ReDim Liste(1 To 1, 1 To 65)
  For Col = 50 To 114
    Liste(1, Col - 49) = Me.Controls("cbx" & Col).Value
  Next
  Sheets("BD").Range(Cells(ligne, 50), Cells(ligne, 114)) = Liste
  ReDim Liste(1 To 1, 1 To 11)
  For Col = 31 To 41
    Liste(1, Col - 30) = Me.Controls("cbxt" & Col).Value
  Next
  Sheets("BD").Range(Cells(ligne, 31), Cells(ligne, 41)) = Liste
  ReDim Liste(1 To 1, 1 To 8)
  For Col = 42 To 49
    Liste(1, Col - 41) = Me.Controls("cbxp" & Col).Value
  Next
  Sheets("BD").Range(Cells(ligne, 42), Cells(ligne, 49)) = Liste
  Call ProtegeTout
  Application.ScreenUpdating = True
End Sub
Le principe est de transférer pour chaque boucle les valeurs des comboboxs vers un tableau à 2 dimensions puis copier d'un seul cout ce tableau vers la feuille excel.
 

Statistiques des forums

Discussions
312 198
Messages
2 086 133
Membres
103 128
dernier inscrit
pmordel@parisbrestconsult