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 :

Copier/Coller TextBox à l'aide de module de classe [XL-2010]


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
    Ingénieur validation
    Inscrit en
    Mars 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 23
    Par défaut Copier/Coller TextBox à l'aide de module de classe
    Bonjour à tous,
    Après de nombreux essais je n'arrive pas a obtenir un copier coller propre à l'aide d'un module de classe, la valeur renvoyée est toujours 0
    Je m'explique :
    J'ai 1 text box sur une page 1 d'un multipage, 1 sur la 2, etc jusqu'à 10.
    Je souhaiterais lorsque l'on clique sur un bouton sur la page 2, la valeur de la textbox 1 soit copiée dans la 2, puis sur le bouton de la 3, la valeur Textbox 2 soit copiée dans la 3 etc

    J'ai fais le code suivant :

    MODULE DE CLASSE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public WithEvents RfD As MSForms.TextBox
    Public WithEvents Copy As MSForms.CommandButton
    Private Sub Copy_Click()
    RfD.Value = Copy
    End sub


    USERFORM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim j As Integer
            For j = 2 To 10
                Set cls(j).Copy = Me.Controls("Copier" & j)
                Set cls(j).RfD = Me.Controls("ReferenceD" &  j)
                cls(j).RfD.Value = Me.Controls("ReferenceD" & j - 1).Value
            Next

    Comme je l'ai dis précédemment, j'ai toujours la valeur 0 qui est renvoyée, peut importe ce que je met dans la textbox de la page précédente..

    Merci d'avance pour votre aide

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Module de classe nommé Cls
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
     
    Public WithEvents Btn As MSForms.CommandButton
     
    Private Sub Btn_Click()
    Dim j As Byte
     
    j = Replace(Btn.Name, "CommandButton", "")
    UserForm1.Controls("TextBox" & j).Value = UserForm1.Controls("TextBox" & j - 1).Value
    End Sub
    Module de l'userform
    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
    Option Explicit
     
    Dim TbBtn(1 To 10) As Object
    Private Sub UserForm_Initialize()
    Dim Ctrl As Control
    Dim j As Byte
     
    For Each Ctrl In Me.Controls
        If TypeName(Ctrl) = "CommandButton" Then
            j = j + 1
            If j > 1 Then
                Set TbBtn(j) = New Cls
                Set TbBtn(j).Btn = Ctrl
            End If
        End If
    Next Ctrl
    End Sub
    Adapte les noms.
    La classe instancie uniquement les boutons

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mars 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 23
    Par défaut
    Bonjour Mercatog,
    Merci tout d'abord pour ta réponse rapide.
    Je suis totalement novice dans les modules de classe et leur fonctionnement, je t'avoue qu'en adaptant les noms, le code ne fais pas planter le userform, mais ne copie rien du tout...
    Sur ma page 1, j'ai en textbox : ReferenceA1, ReferenceB1, ReferenceC1, ReferenceD1
    Sur ma page 2, j'ai en textbox : ReferenceA2, ReferenceB2, ReferenceC2, ReferenceD2 et un commandbutton, nommé Copier2
    Sur ma page 3, j'ai en textbox : ReferenceA3, ReferenceB3, ReferenceC3, ReferenceD3 et un commandbutton, nommé Copier3

    etc jusqu'à 10...


    En adaptant les noms j'ai le code suivant :
    Dans mon module de classe nommé classe1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Public WithEvents Btn As MSForms.CommandButton
     
    Private Sub Btn_Click()
    Dim j As Byte
     
    j = Replace(Btn.Name, "Copier", "")
    UserForm1.Controls("ReferenceA" & j).Value = UserForm1.Controls("ReferenceA" & j - 1).Value
    UserForm1.Controls("ReferenceB" & j).Value = UserForm1.Controls("ReferenceB" & j - 1).Value
    UserForm1.Controls("ReferenceC" & j).Value = UserForm1.Controls("ReferenceC" & j - 1).Value
    UserForm1.Controls("ReferenceD" & j).Value = UserForm1.Controls("ReferenceD" & j - 1).Value
    End Sub
    et sur mon userform :
    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
     
    Option Explicit
     
    Dim TbBtn(1 To 10) As Object
    Private Sub UserForm_Initialize()
    Dim Ctrl As Control
    Dim j As Byte
     
    For Each Ctrl In Me.Controls
        If TypeName(Ctrl) = "Copier" & j Then
            j = j + 1
            If j > 1 Then
                Set TbBtn(j) = New classe1
                Set TbBtn(j).Btn = Ctrl
            End If
        End If
    Next Ctrl
    End Sub
    Comme je l'ai dis, le code ne bug pas, mais il ne se passe rien lorsque je clique sur les différents buttons... Je ne comprend pas...
    Merci d'avance

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    La ligne 10 de ton code d'userform à ne pas adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TypeName(Ctrl) = "CommandButton" Then  'Ici n'adapte rien
    Ou d'une autre manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TypeOf Ctrl Is msforms.CommandButton Then

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mars 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 23
    Par défaut
    Là, pour le coup, j'ai une erreur d'exécution '9'
    L'indice n'appatient pas à la sélection ...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Tous les contrôles disposent d'une propriété Tag que tu peux utiliser!

    Si c'est possible dis lui la source du contrôle!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim j As Integer
            For j = 2 To 10
                Set cls(j).Copy = Me.Controls("Copier" & j)
                Set cls(j).RfD = Me.Controls("ReferenceD" &  j)
                cls(j).RfD.Value = Me.Controls("ReferenceD" & j - 1).Value
    cls(j).RfD.Tag="textbox1"
            Next
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public WithEvents RfD As MSForms.TextBox
    Public WithEvents Copy As MSForms.CommandButton
    Private Sub Copy_Click()
    RfD.Value = UserForm1.Controls(RfD.Tag).Value
     
    End sub

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mars 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 23
    Par défaut
    Merci pour vos réponses,
    J'ai essayé avec le code de dysorthographie, il se trouve que j'obtiens une Erreur d'exécution '-2147024809 ( 80070057 )

    La ligne surlignée est celle dans le module de classe.... J'avoue ne vraiment pas comprendre

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Mars 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 23
    Par défaut
    J'ai trouvé une solution qui semble fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim j As Integer
    For j = 2 To 10
        ReDim Preserve cls(j)
        Set cls(j).Copy = Me.Controls("Copier" & j)
        Set cls(j).RfD2 = Me.Controls("RefDoublure" & j)
        Set cls(j).RfD = Me.Controls("RefDoublure" & j - 1)
        cls(j).RfD2.Value = cls(j).RfD.Value
     
    Next
    et pour le module de classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Copy_Click()
    RfD2.Value = RfD.Value
    End Sub
    Merci à vous !

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

Discussions similaires

  1. [WD-2010] Copier/coller textbox access vers word
    Par AidezMoiSvp dans le forum VBA Word
    Réponses: 1
    Dernier message: 25/08/2013, 00h32
  2. Inserer une image dans un textbox via Copier -> Coller ?
    Par XpFive dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 04/06/2008, 23h24
  3. [VBA-E] Aide copier-coller vers Word
    Par a.dequidt dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/09/2007, 15h45
  4. Copier/coller dans un textBox (formulaire)
    Par alliance dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2006, 00h06
  5. TextBox copier/coller/couper [Java]
    Par am.adnane dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 14/07/2006, 02h38

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