IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Optimisation du code d'un Userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Par défaut Optimisation du code d'un Userform
    rebonjour sabzzz
    j'ai un autre probleme avec le lancement d'un userform, car il prend plus de temps qu'il en faut et je pense que c'est ce bout du code qui n'est pas en ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub UserForm_Initialize()
    Dim j As Integer
    Sheets("liste_du_personnel").Select 
    For j = 7 To Range("e65536").End(xlUp).Row
    ComboBox1 = Range("e" & j) 
    If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Range("e" & j)
    Next j
    With UserForm1
            .StartUpPosition = 3
            .Width = Application.Width
            .Height = Application.Height
            .Left = 0
            .Top = 0
    End With
    End Sub
    je te remercie d'avance.

  2. #2
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour DRH01,

    au lieu d'utiliser la propriété AddItem dans une boucle,
    tu gagnerais beaucoup en rapidité avec la propriété RowSource
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim lp As Object, plage As String
    'Attribue la référence d'objet lp à la feuille "liste_du_personnel"
    Set lp = Sheets("liste_du_personnel")
    'définir l'adresse de la plage renseigné sur la colonne E7:Ex
    plage = lp.Range("E7:E" & lp.Range("E65536").End(xlUp).Row).Address
    'identifier la source de données
    Me.ComboBox1.RowSource = "liste_du_personnel!" & plage

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Par défaut
    bonjour sabzzz
    je te remercie ca marche à merveille.

    boujour sabzzz
    je me demande bien si je peux avoir mon combobox sans doublon autant que c'est un fichier du personnel ou il existe des salaries avec la même qualification.

  4. #4
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour DRH01 isabelle le forum essai comme cela. on peut mettre dans l'ordre aplha eventuellement !!! a adapter



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_Initialize()
     Dim c As Variant, m As Object
      Sheets("liste_du_personnel").Select
      Set m = CreateObject("Scripting.Dictionary")
      For Each c In Range("e7:e" & Range("e65536").End(xlUp).Row)
      If Not m.Exists(c.Value) And c <> "" Then m.Add c.Value, c.Value
      Next c
     ComboBox1.List = m.items
      'ect...
    End Sub

  5. #5
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Par défaut
    bonjour laetitia
    je te remercie ca marche tres bien.

  6. #6
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Par défaut
    bonjour le forum
    j'ai besoin de votre aide car quand je lance mon usf un message d'erreur s'affiche
    Erreur D'exécution 91:
    Variable objet ou variable de bloc With non définie
    je vous remercie d'avance.

  7. #7
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    re, c'est quoi le code de ton user ???

  8. #8
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Par défaut
    bonjour laetita
    normalement code du userform c'est bien celui la:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub UserForm_Initialize()
     Dim c As Variant, t As Variant, m As Object, n As Object, s As Object, g As Variant, a As Variant, z As Object
    Sheets("liste_du_personnel").Select
    Set m = CreateObject("Scripting.Dictionary")
    Set n = CreateObject("Scripting.Dictionary")
      For Each c In Range("e7:e" & Range("e65536").End(xlUp).Row)
      If Not m.Exists(c.Value) And c <> "" Then m.Add c.Value, c.Value
      Next c
    ComboBox1.List = m.items
      For Each t In Range("f7:f" & Range("f65536").End(xlUp).Row)
      If Not n.Exists(t.Value) And t <> "" Then n.Add t.Value, t.Value
      Next t
    ComboBox2.List = n.items
     For Each g In Range("u7:u" & Range("u65536").End(xlUp).Row)
      If Not s.Exists(g.Value) And g <> "" Then s.Add g.Value, g.Value
      Next g
    ComboBox3.List = s.items
    For Each a In Range("v7:v" & Range("v65536").End(xlUp).Row)
      If Not z.Exists(a.Value) And a <> "" Then z.Add a.Value, a.Value
      Next a
    ComboBox4.List = z.items
    With UserForm1
            .StartUpPosition = 3
            .Width = Application.Width
            .Height = Application.Height
            .Left = 0
            .Top = 0
    End With
    End Sub
    j'espere que tu pourra m'aider parceque je dois remettre ce fichier la semaine prochaine et il me reste pas mal de travail sur lui

  9. #9
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    re,essai comme cela oubli pas les balises sur ton code!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub UserForm_Initialize()
    Dim c, t, u, a As Variant, m As Object, n As Object, s As Object, g As Object
    Sheets("liste_du_personnel").Select
    Set m = CreateObject("Scripting.Dictionary")
    Set n = CreateObject("Scripting.Dictionary")
    Set s = CreateObject("Scripting.Dictionary")
    Set g = CreateObject("Scripting.Dictionary")
     
    For Each c In Range("e7:e" & Range("e65536").End(xlUp).Row)
    If Not m.Exists(c.Value) And c <> "" Then m.Add c.Value, c.Value
    Next c
    ComboBox1.List = m.items
     
    For Each t In Range("f7:f" & Range("f65536").End(xlUp).Row)
    If Not n.Exists(t.Value) And t <> "" Then n.Add t.Value, t.Value
    Next t
    ComboBox2.List = n.items
     
    For Each u In Range("u7:u" & Range("u65536").End(xlUp).Row)
    If Not s.Exists(u.Value) And u <> "" Then s.Add u.Value, u.Value
    Next u
    ComboBox3.List = s.items
     
    For Each a In Range("v7:v" & Range("v65536").End(xlUp).Row)
    If Not g.Exists(a.Value) And a <> "" Then g.Add a.Value, a.Value
    Next a
    ComboBox4.List = g.items
     
      Me.Width = Application.Width - 3
     Me.Height = Application.Height - 3
     
    End Sub

    edit:bisous mercatog bien vu la simplification.en regardant son code de plus "prés je suis quand meme inquiete avec ce qu'il cherche a faire si c'est seulement visualiser des données pas de pb.. mais travailler dessus en partant sur des comboboxs gros souci de conception au depart au pire une listbox multi colonne selective enfin on verra bien la suite...........

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Je répondrai à la place de Laétitia que je salut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Dim c As Range
    Dim m As Object
     
    With Sheets("liste_du_personnel")
        Set m = CreateObject("Scripting.Dictionary")
     
        For Each c In .Range("e7:e" & Range("e65536").End(xlUp).Row)
            If Not m.Exists(c.Value) And c <> "" Then m.Add c.Value, c.Value
        Next c
            ComboBox1.List = m.items
        m.RemoveAll
     
        For Each c In Range("f7:f" & .Range("f65536").End(xlUp).Row)
            If Not m.Exists(c.Value) And c <> "" Then m.Add c.Value, c.Value
        Next c
        ComboBox2.List = m.items
        m.RemoveAll
        For Each c In Range("u7:u" & .Range("u65536").End(xlUp).Row)
        If Not m.Exists(c.Value) And c <> "" Then m.Add c.Value, c.Value
        Next c
        ComboBox3.List = m.items
        m.RemoveAll
     
        For Each c In Range("v7:v" & .Range("v65536").End(xlUp).Row)
        If Not m.Exists(c.Value) And c <> "" Then m.Add c.Value, c.Value
        Next c
        ComboBox4.List = m.items
        m.RemoveAll
    End With
    Set m = Nothing
    With UserForm1
        .StartUpPosition = 3
        .Width = Application.Width
        .Height = Application.Height
        .Left = 0
        .Top = 0
    End With
    peut être à simplifier

    Edit: Oups, Laétitia est de passage. désolé

  11. #11
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Par défaut
    bonjour le forum
    je te remercie laetitia pour ton aide et mercatog pour la simplification, et a titre d'information je travail sur fichier de gestion du personnel ou j'ai commencer avec un usf pour renseigner les nouveaux salariés dans la feuille "fiche" puis les valider pour les insérer sur la feuille "liste_du_personnel", maintenant j'aimerai bien m'appliquer sur plusieurs autres buttons command pour pouvoir faire des filtres et extraire des données sur des nouvelles feuilles, et puis lancer l'impression des contrats de travail et autres documents.
    je serais ravi si vous puisez m'aider avec des codes, des propositions.
    je n'ai pas vraiment de lotion en vba, c'est pour ça que je compte vraiment sur votre aide,merci infiniment.

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo