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 :

cocher Textboxes selon contenu cellules [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Par défaut cocher Textboxes selon contenu cellules
    Bonjour à tous!

    Je mets en place un formulaire comportant une 50 aine de checkboxes pour une saisie d'inventaire alimentées de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Dim I As Integer, Msg As String
        For I = 2 To 9
                If Trim(Me.Controls("CheckBox" & I)) = True Then Msg = Msg & Trim(Me.Controls("Checkbox" & I).Caption) & vbLf
            Next I
            If Len(Msg) > 1 Then
                .Cells(Derlign, 8).Value = Left(Msg, Len(Msg) - 1)
                Msg = ""
            End If
    via :
    Nom : Sans titre.png
Affichages : 230
Taille : 85,4 Ko

    le rendu est le suivant (cf colonnes 8 à 13) :

    Nom : Sans titre.png
Affichages : 226
Taille : 34,0 Ko

    Je souhaite intégrer une fonction de modification de mes saisies précédentes. Pour cela mes checkboxes doivent se recocher!

    Je suis parvenu à remplir les checkboxes où un seul terme correspond au Caption de l'une de mes CheckBox...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For I = 2 To 9
            If f.Cells(ligne, 8).Value = Me.Controls("CheckBox" & I).Caption Then
                Me.Controls("CheckBox" & I).Value = True
            Else
                Me.Controls("CheckBox" & I).Value = False
            End If
    Next I
    Comment faire pour alimenter plusieurs checkboxes depuis une seule cellule comptant plusieurs Captions - exemple en H11 ou I7 dans le tableau ci dessus?

    Merci d'avance?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par IronHeavy Voir le message
    Bonjour,

    Il vous faut créer une table des "Mentions de danger" et rattacher vos captions au produit et au type de danger.

  3. #3
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Par défaut
    Bonjour Eric,

    Mon niveau ne me permet malheureusement pas d'apprécier votre conseil !

    Pourriez vous être un peu plus explicite?

    Je vous remercie

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par IronHeavy Voir le message
    Bonjour,


    A une caractéristique d'un produit correspond a un et un seul des Checkbox dans une table.

    Deux façons de faire :

    -Soit votre produit est décrit par rapport à toutes les caractéristiques. Dans ce cas chaque correspondance Checkbox correspond à une colonne et la valeur de la cellule est Oui / Non, 0 / 1, Vrai / Faux.
    Pièce jointe 486067
    Pour faire la correspondance entre la colonne et le contrôle Checkbox du Userform et garantir l'évolution de l'outil sans avoir à modifier votre code lors d'ajouts de checkbox, vous pouvez utiliser la propriété Tag du contrôle à l'initialisation du Userform, comme dans l'exemple ci-dessous dont je me sers :
    Pièce jointe 486066

    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
     
        With UserForm3
     
             For CtrK = 1 To .Controls.Count
                 For Each CelluleChamps In AireChamps 'CtrJ = LBound(MatriceConsultations, 1) To UBound(MatriceConsultations, 1)
                     If CelluleChamps = .Controls(CtrK - 1).Name Then
     
                        TagControle = CelluleChamps.Offset(0, ColRepereColonne - ColChampsTextBox) & "-" & CelluleChamps.Offset(0, ColFormat - ColChampsTextBox) & "-" & CelluleChamps.Offset(0, ColPosition - ColChampsTextBox) & "-" & CelluleChamps.Offset(0, ColObligatoire - ColChampsTextBox)
     
                        .Controls(CtrK - 1).Tag = TagControle
                        .Controls(CtrK - 1).ControlTipText = TagControle 'CelluleChamps.Offset(0, ColMatrices - ColChampsTextBox)
     
                        If CelluleChamps.Offset(0, ColObligatoire - ColChampsTextBox) = "Oui" Then
                           .Controls(CtrK - 1).BackColor = RGB(204, 204, 255)
                        End If
     
                        CelluleChamps.Interior.Color = RGB(204, 204, 255)
                     End If
                 Next CelluleChamps
             Next CtrK
     
             NbControlesNonReconnus = 0
             For Each CelluleChamps In AireChamps 'CtrJ = LBound(MatriceConsultations, 1) To UBound(MatriceConsultations, 1)
                 With CelluleChamps
                 If .Value <> "" And .Interior.Color <> RGB(204, 204, 255) Then
                       NbControlesNonReconnus = NbControlesNonReconnus + 1
                     End If
                 End With
             Next CelluleChamps
     
     
        End With
    -Soit votre produit est décrit par rapport à ses caractéristiques vraies uniquement comme dans le vidage d'écran ci-dessous. Dans ce cas, vous chargez ou mettez à jour avec une boucle sur le couple produit checkbox. A vous d'ajouter ou d'éliminer les lignes en fonction des mises à jour.
    Pièce jointe 486054

  5. #5
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Par défaut
    Merci Eric pour ces propositions

    je devrais pouvoir l'adapter pour m'imprégenr du raisonnement, cependant dans l'optique de recenser la liste des matières susceptibles d'être utilisées en entreprise et leurs subsituts, cela revient à effectuer la démarche pour 150 000 lignes !

    donc ajouter un grand nombre de colonnes dans des tableaux déjà très chargés ou dupliquer chaque ligne par autant de mentions de danger (en moyenne 3 à 5 par matière!)...

    Si cela était réalisable, j'aurais opté pour une inversion de commande "inventaire vers checkbox" qui à chaque ligne recherche les "caption" de mes 52 checkboxes (plusieurs caption regroupées dans les celules, séparées par un retour à la ligne)

    (checkbox vers inventaire ci dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      For I = 2 To 9
                If Trim(Me.Controls("CheckBox" & I)) = True Then Msg = Msg & Trim(Me.Controls("Checkbox" & I).Caption) & vbLf
            Next I
            If Len(Msg) > 1 Then
                .Cells(Derlign, 8).Value = Left(Msg, Len(Msg) - 1)
                Msg = ""
            End If
    Un autre solution aurait été de split les mentions de danger verticalement, mais reviendrait à dupliquer chaque ligne d'inventaire - retour au problème posé par votre proposition!

    Je suis persuadé qu'une cellule peut contenir les "coordonnées" de plusieurs contrôles distincts (.value .caption .nom ...) et être exploitée d'un bloc, mais comment ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par IronHeavy Voir le message
    Je suis persuadé qu'une cellule peut contenir les "coordonnées" de plusieurs contrôles distincts (.value .caption .nom ...) et être exploitée d'un bloc, mais comment ?
    Bonjour,

    En reprenant l'idée de spliter le contenu de la cellule avec un chr(10) comme séparateur et comparer la matrice obtenue avec la table de correspondance que j'ai mise en exemple et en se limitant au nom du contrôle.

  7. #7
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Par défaut
    Trouvé une piste, qui me semble correspondre !

    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
    Dim lgn As Long
     
    Private Sub CommandButton1_Click()
        Dim Ctrl As Control, Com$
        For Each Ctrl In Me.Controls
            If TypeOf Ctrl Is MSForms.CheckBox Then
                If Ctrl.Value = True Then Com = Com & ", " & Ctrl.Caption
            End If
        Next Ctrl
        Com = Replace(Com, ", ", "", 1, 1)
        ActiveSheet.Range("F" & lgn) = Com
        Unload Me
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim Com, i%, Ctrl As Control
        lgn = ActiveCell.Row
        Com = Split(", " & ActiveSheet.Range("F" & lgn), ", ")
        For i = 1 To UBound(Com)
            For Each Ctrl In Me.Controls
                If TypeOf Ctrl Is MSForms.CheckBox Then
                    If Ctrl.Caption = Com(i) Then
                        Ctrl.Value = True: Exit For
                    End If
                End If
            Next Ctrl
        Next i
    End Sub
    Il me reste encore à l'adapter ... repartir de mon code ou réécrire en fonction de cette solution...?

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

Discussions similaires

  1. Extraire données selon contenu cellules
    Par nlbmoi dans le forum Excel
    Réponses: 13
    Dernier message: 21/03/2019, 13h26
  2. [XL-2007] Recuperation de données de cellule vers textbox selon condition
    Par dodo28 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/08/2009, 15h45
  3. Entrer dans un textBox le contenu d'une cellule
    Par Philippe76 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/01/2009, 07h22
  4. taille des textbox selon leur contenu
    Par christi dans le forum ASP.NET
    Réponses: 4
    Dernier message: 08/02/2007, 16h20

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