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 :

Amélioration d'un code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ex technicien Prévention Incendie
    Inscrit en
    Février 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ex technicien Prévention Incendie
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 156
    Par défaut Amélioration d'un code
    Bonjour à tous,

    Je viens de travailler comme un goret, les macros tournent, mais cela représente 3200 lignes de codes.
    Vous l'avez compris je ne suis pas un expert.
    Dans une Multipage, j'ai inséré 108 Textbox, divisées en 4 ilots de respectivement 60, 24, 18 et 6 textbox.
    La macro va chercher un texte sur une cellule, par exemple de F3 à F62 pour le premier ilot, et l'affiche dans la Textbox correspondante.
    Puis une autre macro, qui est appelée par la précédente, va chercher un autre texte dans une autre cellule, par exemple de H3 à H62, afin de coloriser la textbox correspondante.

    Par exemple la Textbox nommée SMP_1_01 va chercher le texte "XXX" dans la cellule F3, puis le contenu de la cellule H3 colorise la Textbox selon la valeur trouvée ; vert pour V, magenta pour M, jaune pour J et enfin rouge pour R.

    Pour la première macro j'ai le code suivant:
    (TMa2 est le nom de l'userform)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sheets("SMP").Select
     
          Range("F3").Select
        	If Selection.Text <> "" Then
        		TMa2.SMP_1_01 = ActiveCell.Text
       			 Else: TMa2.SMP_1_01.Visible = False
        	End If
    Pour le seconde macro j'ai le code suivant :

    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
    Sheets("SMP").Select
     
     Range("H3").Select
     If Selection.Value = "V" Then
     TMa2.SMP_1_01.BackColor = vbGreen
        Else
     If Selection.Value = "J" Then
     TMa2.SMP_1_01.BackColor = vbYellow
            Else
      If Selection.Value = "M" Then
     TMa2.SMP_1_01.BackColor = vbMagenta
                Else
     If Selection.Value = "R" Then
     TMa2.SMP_1_01.BackColor = vbRed
                    Else
     If Selection.Value = "/" Then
     TMa2.SMP_1_01.BackColor = vbWhite
        End If
            End If
                End If
                    End If
                            End If
    Ces 2 codes sont reproduits à 107 exemplaires en changeant à chaque fois les adresses

    Avez-vous une solution pour alléger mes macros

  2. #2
    Membre averti
    Homme Profil pro
    Apprenti
    Inscrit en
    Février 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2012
    Messages : 49
    Par défaut
    Bonjour,

    en vba il faut limiter le plus possible les "select", qui prennent du temps
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sheets("SMP").Select
     
        	If Range("F3").Text <> "" Then
        		TMa2.SMP_1_01 = Range("F3").Text
       	Else: 
                    TMa2.SMP_1_01.Visible = False
        	End If
    tu décale bizarrement ton code.

    si tu tien à garder ton code tu devrai le décaler comme ça, c'est plus lisible :
    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
    Sheets("SMP").Select
     
    Range("H3").Select
        If Selection.Value = "V" Then
            TMa2.SMP_1_01.BackColor = vbGreen
        Else
            If Selection.Value = "J" Then
                TMa2.SMP_1_01.BackColor = vbYellow
            Else
                If Selection.Value = "M" Then
                    TMa2.SMP_1_01.BackColor = vbMagenta
                Else
                    If Selection.Value = "R" Then
                        TMa2.SMP_1_01.BackColor = vbRed
                    Else
                        If Selection.Value = "/" Then
                            TMa2.SMP_1_01.BackColor = vbWhite
                        End If
                    End If
                End If
            End If
        End If
    si non je pense que ceci fait la même chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Select Case Range("H3").Value
        Case "V"
            TMa2.SMP_1_01.BackColor = vbGreen
        Case "J"
            TMa2.SMP_1_01.BackColor = vbYellow
        Case "M"
            TMa2.SMP_1_01.BackColor = vbMagenta
        Case "R"
            TMa2.SMP_1_01.BackColor = vbRed
        Case "/"
            TMa2.SMP_1_01.BackColor = vbWhite
    End Select
    Après je suis aussi débutant :p

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Qu'est-ce qui déclenche l'exécution des 2 macros ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Ex technicien Prévention Incendie
    Inscrit en
    Février 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ex technicien Prévention Incendie
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 156
    Par défaut Amélioration d'un code
    Bonjour Daniel

    C'est un bouton dans la même Multipage

    Bonjour Limswolf

    je vais modifier selon ton conseil en utilisant la seconde proposition

    Et hop c'est parti !!!

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Si n veut faire une boucle, il faut pouvoir faire le rapprochement entre "SMP_1_01" et F3
    par exemple (valeurs bidon) :
    "SMP_1_02" et F4
    "SMP_1_03" et F5
    etc.
    Il faut qu'il y ait une logique; sinon, ce n'est pas infaisable, mais c'est plus compliqué.

  6. #6
    Membre confirmé
    Homme Profil pro
    Ex technicien Prévention Incendie
    Inscrit en
    Février 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ex technicien Prévention Incendie
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 156
    Par défaut Amélioration d'un code
    Re-bonjour Daniel

    Je vois l'idée.
    Mais si je fais déjà des macros "Bof", en boucle j'ai encore plus de difficultés.
    C'est un sujet que j'ai du mal à appréhender

    Et encore plus si SMP_1_02 va chercher sur des renseignements sur 2 cellules.

    Peux tu me faire un embryon de boucle ? j'essayerai de comprendre et d'adapter

    Merci

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Daniel a raison, il te faut faire une boucle afin de remplir tes TextBox avec un minimum de code. Pour ça, il faut que tu donne à chaque TextBox en suffixe le nom de la cellule qui lui correspond, exemple :
    SMP_1_01_F3 pour la cellule F3
    SMP_1_02_F4 pour la cellule F4
    etc...
    puis tu boucle sur les contrôles et si c'est un TextBox, tu récupère la valeur dans la cellule correspondante :
    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
     
    Sub RemplirTextBox()
     
        Dim Ctrl As Control
     
        'parcour la collection des contrôles de la Form
        For Each Ctrl In Me.Controls
     
            'si c'est un TextBox récupère la valeur dans la cellule
            'correspondante aux deux derniers carractères du nom du
            'TextBox du style :
            'SMP_1_01_F3 --> cellule F3
            'SMP_1_02_F4 --> cellule F4
            'etc...
            If TypeName(Ctrl) = "TextBox" Then
     
                Ctrl.Text = Sheets("SMP").Range(Right(Ctrl.Name, 2))
     
            End If
     
        Next Ctrl
     
    End Sub
    Hervé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Optimisation et amélioration d'un code utilisant Artichow
    Par heretik25 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 05/08/2011, 21h53
  2. Amélioration d'un code VBA
    Par Jerome25 dans le forum VBA Access
    Réponses: 7
    Dernier message: 02/08/2011, 15h43
  3. Réponses: 3
    Dernier message: 29/01/2011, 20h17
  4. [XL-2007] Amélioration d'un code
    Par rch05 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/11/2010, 15h02
  5. Problème d'amélioration d'un code source
    Par w1Re1337 dans le forum Réseau
    Réponses: 2
    Dernier message: 28/01/2010, 14h49

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