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 :

Suite de "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 Suite de "Amélioration d'un code"
    Bonjour,

    Grâce à l'assistance de Theze, j'ai réussit à faire évoluer sérieusement mes codes.
    En m'appuyant sur l'un de ses codes je vais chercher la valeur de la cellule voisine (à droite) pour coloriser un textbox. Mon code fonctionne, enfin presque, car il remplit tous les textbox avec la couleur attendue, mais il bug sur la première ligne "If Sheets SMEP" lorsqu'il finit de parcourir la plage concernée. Je pense que je n'ai pas donné l'instruction
    " Stop si c'est la dernière case (Textbox)", sachant que cette dernière case peut évoluer selon les cas.
    Pouvez vous m'indiquez l'amélioration nécessaire. Je joint le code afin que ce soit plus facile à comprendre.

    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
    Sub SMPCouleurs()
     
        Dim Ctrl As Control
     
        'parcour la collection des contrôles de la Form
        For Each Ctrl In TMa2.MultiPage1.Pages("SMPNom").Controls
     
            If TypeName(Ctrl) = "TextBox" Then
     
                With Ctrl
     
        'cas de la lettre F
            If Sheets("SMP").Range(Right(.Name, Len(.Name) - InStrRev(.Name, "F") + 1)).Offset(0, 1).Value = "V" Then
                Ctrl.BackColor = vbGreen
                    End If
            If Sheets("SMP").Range(Right(.Name, Len(.Name) - InStrRev(.Name, "F") + 1)).Offset(0, 1).Value = "R" Then
                Ctrl.BackColor = vbRed
                    End If
            If Sheets("SMP").Range(Right(.Name, Len(.Name) - InStrRev(.Name, "F") + 1)).Offset(0, 1).Value = "M" Then
                Ctrl.BackColor = vbMagenta
                    End If
            If Sheets("SMP").Range(Right(.Name, Len(.Name) - InStrRev(.Name, "F") + 1)).Offset(0, 1).Value = "J" Then
                Ctrl.BackColor = vbYellow
                    End If
     
                End With
     
                     End If
            Next
     
    End Sub
    Merci de votre aide

    Thierry

  2. #2
    Membre chevronné Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 352
    Par défaut
    Bonsoir Thierry,

    Peux tu nous dire comment tu as appelé tes TextBox ?... car clairement la ligne qui te pose problème fait référence à leur nom (--> ".Name").

    Bertrand

  3. #3
    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 Suite de "aAmélioration d'un code"
    Bonjour Bertrand,
    C'est la ligne n°13 qui est surlignée.

    Effectivement mes Textbox nommées SMP_1_F3 jusqu'à SMP_1_F62 pour le premier groupe et SMP_2_J3 jusqu'à SMP_2_J36 pour le second (en réalité il y à 4 groupes), sont renseignées par les cellules correspondantes (de F3 à F62, etc.).

    J'ai une macro intermédiaire qui cache les textbox si la valeur de la cellule est ""

    Sur mon nouveau code je vais chercher la valeur à droite de l'adresse indiquée par les textbox visibles pour coloriser ces dernières. Lorsque je fait tourner le code toutes les textbox se renseignent et se colorisent correctement.
    Mais à priori le code continue à tourner après la dernière textbox est génère un bug, puisqu'il ne trouve plus d'objet correspondant. il faut également savoir que le nombre de textbox est variable.

    Donc mon soucis est de créer l'instruction pour que la macro s'arrête sur la dernière case visible
    J'espère que j'ai été assez clair

    Merci

    Thierry

  4. #4
    Membre chevronné Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 352
    Par défaut
    Bonjour ThSPB,

    La formule de la ligne 13 me parait convenir. Elle renvoie bien à G3 dans le cas d'un TextBox appelé "SMP_1_F3" par exemple.

    Il doit donc s'agir d'un problème de "sortie de boucle"... For Each Ctrl In TMa2.MultiPage1.Pages("SMPNom").Controls me paraissait adapté mais il y a peut-être autre chose à tenter (Difficile pour moi sans le fichier).

    J'ai raccourci un peu le code mais ça ne solutionne pas ton problème :

    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
    Sub SMPCouleurs()
    Dim Ctrl As Control
        For Each Ctrl In TMa2.MultiPage1.Pages("SMPNom").Controls
            If TypeOf Ctrl Is MSForms.TextBox Then
                With Ctrl
                    'cas de la lettre F
                    Select Case Sheets("SMP").Range(Right(.Name, Len(.Name) - InStrRev(.Name, "F") + 1)).Offset(0, 1).Value
                    Case "V": Ctrl.BackColor = vbGreen
                    Case "R": Ctrl.BackColor = vbRed
                    Case "M": Ctrl.BackColor = vbMagenta
                    Case "J": Ctrl.BackColor = vbYellow
                    End Select
                End With
            End If
        Next Ctrl
    End Sub
    Bertrand

  5. #5
    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 Suite de "Amélioration d'un code"
    Re-bonjour Bertrand

    Désolé pour le retard de la réponse, mais je suis actuellement en vacances et mon inspectrice "personnel" du travail a émise d'autre priorité sur mes activitées

    Toute simplification du code est la bienvenue.
    Par rapport à celui que tu m'as proposé j'ai ajouté "If Ctrl.Visible = True Then", etc.
    Le résultat est que le bug à disparu, ce qui serait plutôt bien, mais toutes les textbox de la dernière ligne ne se colorisent pas. Quelque soit le nombre de lignes

    Merci pour ton aide

    Thierry

Discussions similaires

  1. Augmenter la hauteur du div/span de la balise "code"
    Par Djakisback dans le forum Evolutions du club
    Réponses: 10
    Dernier message: 24/01/2009, 15h31
  2. [débutant] les quotes " et ' pour 3 codes différents
    Par Christophe93250 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/03/2007, 22h11

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