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 :

faire un Sub pour plein de TextBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant ingé
    Inscrit en
    Septembre 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Etudiant ingé

    Informations forums :
    Inscription : Septembre 2019
    Messages : 37
    Par défaut faire un Sub pour plein de TextBox
    Bonjour, bonsoir !

    Je vais sûrement poser une question stupide. et peut-être même une question qui a déjà été posée (a ce moment la je m'en excuse mais je ne l'avais pas trouvé).

    J'ai un UserForm avec entre 10-20 Textbox. tout les TextBox on le même nom (c-a-d Textebox1, Textebox2 ... etc.) et doivent exécuter un même code.

    Style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub TextBox1_Change()
     
    TextBox1.Text = Cells(1.1)
     
    End Sub
     
    Private Sub TextBox2_Change()
     
    TextBox1.Text = Cells(2.1)
     
    End Sub
    serait-il possible de faire un grand Private Sub pour tout les TextBox histoire de rendre le tout un poil plus propre?

    merci bien,

    bonne journée

    PS : Après 30 secs de réfection je me suis dit qu'un bouton pour tout retranscrire d'un coup serait bien plus simple. mais du coup je sais pas si je peux écrire un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    TextBox & X.Text = Cells(X.1)
    End Sub
    Mais la première question reste intéressante et me permettra de rendre d'autre petit code plus joli (genre une battail navale avec 100 boutons. oui le code est moche. très moche...)

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Généralement, lorsqu'un même évènement est lié à un même type de contrôle, l'on procède par module de classe.

    Maintenant, la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TextBox & X.Text = Cells(X.1)
    ne signifie absolument, absolument rien.

    Par contre,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i as Byte
    For i = 1 To 10
          Me.Controls("Textbox_" & i).Text = Worksheets("lawks").Cells(i,1).Value
    Next i
    est autrement plus significatif.

    Je ne peux que te conseiller la lecture, voire l'étude des 2 tutoriels de Silkyroad consacrés respectivement aux formulaires(Userform) et aux contrôles.
    Ils figurent, entre autres, sur son espace documentaire.

  3. #3
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 573
    Par défaut
    Bonjour,
    Code Module de Classe : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public WithEvents TXT As msforms.TextBox
    Public Inx As Integer
    Private Sub TXT_Change()
    UserForm1.TextChange Inx
    End Sub
    Code UserForm1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Ctr As New Collection
    Public Sub TextChange(I As Integer)
    MsgBox "TextBox" & I & ".Text = Cells(" & I & ".1)"
    End Sub
    Private Sub UserForm_Initialize()
    For Each c In Me.Controls
        If TypeName(c) = "TextBox" Then
            Ctr.Add New Classe1
            Set Ctr(Ctr.Count).TXT = c
            Ctr(Ctr.Count).Inx = Ctr.Count
        End If
    Next
    End Sub

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Thumb down

    Personnellement, j'utilise une variante

    Modules de classe (idem au tien) nommé ici
    Class_changt_couleur_Textbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public WithEvents TB As MSForms.TextBox
     
    Private Sub TB_Change()
     
    With TB
            If Len(.Value) > 0 Then
                    .BackColor = RGB(30,25,0)
            Else
                    .BackColor = RGB(10,10,10)
            End If
    End With
     
    End Sub
    Variante sur alimentation de la classe
    Dans le module du formulaire

    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
    Dim CTB() As New Class_changt_couleur_Textbox
     
    Private Sub UserForm_Initialize()
     
    Dim Ctl As MSForms.Control
     
    Dim k as Byte
     
    k = 0
     
    For Each Ctl In Me.Controls
        If TypeName(Ctl) = "TextBox" Then
              k = k + 1
              ReDim Preserve CTB(1 To k)
               Set CTB(k).TB = Ctl
        End If
    Next ctl

  5. #5
    Membre averti
    Homme Profil pro
    Etudiant ingé
    Inscrit en
    Septembre 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Etudiant ingé

    Informations forums :
    Inscription : Septembre 2019
    Messages : 37
    Par défaut
    Bonsoir!
    Je voulais déjà m'excuser pour cette longue absence. promis ce n'est pas volontaire je suis en stage.

    MarcelG effectivement mon code "style" n’existe pas haha. C'était juste pour me faire comprendre. Donner une image de ce que je souhaitais obtenir à la fin.

    Mais merci à vous deux pour vos conseils aviser ! Ils m'ont été très utiles. Et du coup pour vous remercier je vous envoie ici mon code (presque) finit et surtout FONCTIONNELLE !

    Bon pour des soucis de confidentialité j'ai dû supprimer tout le contenu du excel. Reste que ce qui est utile au code.

    je vous explique rapidement comment il fonctionne. L'idée de base et qu'il doit copier coller des cellules de la feuille "produit" vers la feuilles "historique des prix".
    étant donné qu'on parle d'un projet il n'a pas mal de chose qui bougent. Par exemple de nouvelles pièces: on peut en remplacer deux par une ou l'inverse.
    Bref tout ça pour dire que les cellules bouge. Et vu qu'elle bouge leurs coordonnées change aussi.
    J'ai dû donc créé un un programme qui me permettrait de mettre à jour les coordonnées des cellules à copier. Et c'est là ou votre aide mon été précieux. Le programme devait pouvoir aussi s'adapter au désire de l'utilisateur et ne pas être brider sur un nombre de cases à copier coller.

    Bref si vous voulez essayer, le premier programme sauvegarde des prix est exécutable depuis le bouton "save" en L3 sur la feuille produite, et l'autre en passent par le menu exécutable depuis le bouton "ici" dans la feuilles "historique des prix".
    Si vous avez des idées d’amélioration ou de quelconque réflexions dessus je suis tout ouïe.

    Bonne journée

    fichier code publiable.xlsm

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

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. [XL-2007] Macro pour faire des addidtions et soustractions avec textbox dans un userform/Planning
    Par Danny.adh1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/09/2015, 13h52
  3. Faire une boucle pour sommer des textbox
    Par crocket51 dans le forum VB.NET
    Réponses: 6
    Dernier message: 25/02/2013, 23h41
  4. Faire un plugin pour internet explorer
    Par snyff dans le forum Windows
    Réponses: 2
    Dernier message: 11/05/2004, 19h18
  5. faire un insert pour un champ blob
    Par tripper.dim dans le forum InterBase
    Réponses: 10
    Dernier message: 02/05/2003, 16h56

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