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 :

Simplifier un code qui se répète


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut Simplifier un code qui se répète
    Bonjour à tous!

    Je débute en VBA et je cherche à simplifier un code qui remplit une combobox en fonction d'une autre:

    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
    38
    39
    40
    41
    42
    43
    44
    45
     
    'Combobox9 en fonction de la 1
    Private Sub ComboBox1_Change()
    Dim matériaux As Range
     
    Me.ComboBox9.Clear
    With Sheets("Bibliothèque")
    Set matériaux = .Columns(2).Find(Me.ComboBox1.Value)
     
    If Not matériaux Is Nothing Then
    For i = matériaux.Row To .Range("B65536").End(xlUp).Row
      If .Range("B" & i) = Me.ComboBox1.Value Or .Range("B" & i) = "" Then
        If .Range("C" & i) <> "" Then
        Me.ComboBox9.AddItem (.Range("C" & i).Value)
        End If
      Else
       Exit Sub
      End If
    Next i
    End If
    End With
     
    End Sub
     
    'Combobox10 en fonction de la 2
    Private Sub ComboBox2_Change()
    Dim matériaux As Range
     
    Me.ComboBox10.Clear
    With Sheets("Bibliothèque")
    Set matériaux = .Columns(2).Find(Me.ComboBox2.Value)
     
    If Not matériaux Is Nothing Then
    For i = matériaux.Row To .Range("B65536").End(xlUp).Row
      If .Range("B" & i) = Me.ComboBox2.Value Or .Range("B" & i) = "" Then
        If .Range("C" & i) <> "" Then
        Me.ComboBox10.AddItem (.Range("C" & i).Value)
        End If
      Else
       Exit Sub
      End If
    Next i
    End If
    End With
    End Sub
    Ce code se répète une soixantaine de fois.
    Y'a-t-il moyen de le généraliser pour une suite croissante de combobox de manière à faciliter la lecture et la saisie?

    Merci d'avance!

    Aurel ++

  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 Aurel,

    si c'est pour incrémenter le control,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("ComboBox" & x).AddItem

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Heuu

    T'entends quoi par incrémenter?

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    bonjour,

    Si tu souhaites faire appel à un ensemble de lignes de codes de façon récurrente, il ne faut effectivement surtout pas s'amuser à le dupliquer x fois, on alourdit le poids du classeur, on diminue la lisibilité et on sabote la maintenance.

    La solution, à ton niveau, serait de faire une procédure indépendante qui contient ce sous ensemble de lignes de commandes et d'y faire appel quand tu en a besoin en passant les paramètres nécessaires...

    voir ici pages 29 à 33 (pdf)

    cordialement,

    Didier

  5. #5
    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
    T'entends quoi par incrémenter?
    pour reprendre en tes termes, "une suite croissante de combobox"

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Merci pour vos réponses! =)

    Cependant j'avoue ne pas y arriver, de qu'elle façon démarrer la procédure?

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour à tou(te)s

    essayes comme ça, une idée parmi d'autres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public matériaux As Range, combo As Control
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub ComboBox1_Change()
    Set combo = Me.ComboBox9
    maj
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Combobox10 en fonction de la 2
    Private Sub ComboBox2_Change()
    Set combo = Me.ComboBox2
    maj
    End Sub
    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
    Sub maj()
    combo.Clear
     
    With Sheets("Bibliothèque")
    Set matériaux = .Columns(2).Find(combo.Value)
     
    If Not matériaux Is Nothing Then
    For i = matériaux.Row To .Range("B65536").End(xlUp).Row
      If .Range("B" & i) = combo.Value Or .Range("B" & i) = "" Then
        If .Range("C" & i) <> "" Then
        combo.AddItem (.Range("C" & i).Value)
        End If
      Else
       Exit Sub
      End If
    Next i
    End If
    End With
     
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 26
    Par défaut
    Alors, résultats:

    La 1 se remplie, la 9 reste vide
    La 2 et la 10 restent vide

    J'ai corrigé l'erreur dans le 3ème code: Set combo = Me.Combobox10


    Mais avec ce code, il va falloir écrire chaque procédure "Combobox_change()", de qu'elle manière généraliser cette action à toutes les combo (1 à 8 dans mon exemple: qui influent sur 9 à 16 (dans l'ordre))

    Merci

Discussions similaires

  1. Code qui se répète à cause d'une instruction d'impression delphi
    Par makaphrodite dans le forum Autres outils décisionnels
    Réponses: 7
    Dernier message: 22/01/2009, 11h00
  2. Code qui se répète a cause d'une instruction d'impression
    Par makaphrodite dans le forum Langage
    Réponses: 9
    Dernier message: 18/11/2008, 15h43
  3. code qui s'execute plusieurs fois
    Par khelif dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 21h56
  4. [C#]Comment executer du code qui se trouve dans une string ?
    Par freddyboy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/02/2005, 16h31
  5. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08

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