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 :

remplir une textbox


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut remplir une textbox
    Bonjour, j'ai commencé une macro mais je n'arrive pas à la finir.
    1/ Elle sélectionne une plage de cellule d'une feuille "saisie"
    2/ elle copie cette plage de cellule
    3/ elle fait disparaître l'USF
    3/elle sélectionne une autre feuille
    4/ elle créé un usf avec une zone de texte
    5/ C'est là que je n'y arrive pas. Il faudrait qu'elle colle la plage de cellule copiée dans la zone de texte de l'USF. Cette plage de cellule contient du texte. Il faudrait donc qu'il colle seulement le texte. Si c'est possible j'aimerais que ce "collage" exclue les cellules vides de la plage et qu'il colle le texte de chaque cellule sous cette forme :
    - texte 1
    - texte 2
    - ......

    Qqun peut me compléter mon code svp? merci d'avance.

    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
    Private Sub CommandButton1_Click()
     
    Application.ScreenUpdating = False
     
        nom = ComboBox4.Value
     
        Feuil1.Select
        Range("7:7").Find(nom, , xlValues, xlWhole, , , False).Select
        ActiveCell.Select
        Colonne = ActiveCell.Column
        ligne = ActiveCell.Row
     
        Set commentaire = Sheets("saisie").Range(Cells(ligne + 3, Colonne + 2), Cells(ligne + 1949, Colonne + 2))
        commentaire.Copy
        Unload Me
        Sheets(ComboBox4.Value).Select
     
     
        UserForm14.Show
    End Sub

  2. #2
    Membre très actif Avatar de lionel86500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    Bonjour

    La sélection faite avec la premier userform peu être déposée dans une cellule d'une feuille X ou Y
    et récupérer dans le second userform dans le traitement initialize

    Re bonjour

    voici un exemple de passage de valeur d'un userform à un autre
    Fichiers attachés Fichiers attachés

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    Je n'arrive pas à coller la sélection même dans une cellule d'une autre feuille. Comment dois je faire svp?

    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
    Private Sub CommandButton1_Click()
     
    Application.ScreenUpdating = False
     
        nom = ComboBox4.Value
     
        Feuil1.Select
        Range("7:7").Find(nom, , xlValues, xlWhole, , , False).Select
        ActiveCell.Select
        colonne = ActiveCell.Column
        ligne = ActiveCell.Row
     
        Set commentaire = Sheets("saisie").Range(Cells(ligne + 3, colonne + 2), Cells(ligne + 1949, colonne + 2))
        Application.CutCopyMode = False
        commentaire.Copy
     
        Feuil56.Select
        Range("a1").Select
        commentaire.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Unload Me
        Sheets(ComboBox4.Value).Select
        UserForm14.Show
    End Sub

  4. #4
    Membre très actif Avatar de lionel86500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    Dans mon exemple

    dans la phase INITIALIZE de l'userform2 il est possible de récupérer la saisie du textbox1 de l'useform1.

    ce que tu dois faire dans la phase INITIALIZE de ton userform14 est la même chose.

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    Merci Lionel pour ta réponse. Je suis débutant en vba donc je vais essayer de m'expliquer plus clairement. Je te prie de m'excuser.

    Tu dois voir dans mon code que je copie une sélection et que je l'appelle "commentaire" ?
    et tu dois voir que j'appelle après l'usf14 ?

    j'ai raison jusque là?

    Ensuite j'ai mis dans initialize de l'usf 14

    TextBox1.Value = commentaire

    cela n'a pas marché. J'imagine que j'ai raté qqchose.....

  6. #6
    Membre très actif Avatar de lionel86500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    Il faut que tu déclare la variable commentaire comme type public

    Regarde cet exemple
    déclaration type public
    Fichiers attachés Fichiers attachés

  7. #7
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    Au début mon code commence par private sub et toi par sub .... Cela ne change pas qqchose?

  8. #8
    Membre très actif Avatar de lionel86500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    Non

    Une private sub ne se voit pas dans excel quand on veut exécuter une macro (ALT+F8)

  9. #9
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    J'ai donc deux codes ? un affecté à commandebutton1 et l'autre à l'userform initialize? Les deux codes suivants ne plantent pas mais quand l'userform apparaît il est dramatiquement vide...


    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
    Option Explicit
    Public commentaire
     
     
    Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
     
        nom = ComboBox4.Value
     
        Feuil1.Select
        Range("7:7").Find(nom, , xlValues, xlWhole, , , False).Select
        ActiveCell.Select
        colonne = ActiveCell.Column
        ligne = ActiveCell.Row
     
        Set commentaire = Sheets("saisie").Range(Cells(ligne + 3, colonne + 2), Cells(ligne + 1949, colonne + 2))
        Unload Me
        Sheets(ComboBox4.Value).Select
        UserForm14.Show
     
    End Sub


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Initialize()
     
    TextBox1.Value = commentaire
    End Sub
    Voilà un fichier exemple enfin juste avec qques commentaires à envoyer dans un userform.
    commentaire.xlsx

    Merci

  10. #10
    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,

    Il n'est pas possible de coller une plage de cellules dans un TextBox, c'est incompatible. Par contre, tu peux récupérer la valeur de chaque cellule avec une boucle, remplir une variable String et l'afficher ensuite dans ton TextBox (attention, ta plage dans ton classeur exemple est en B9:B14 et pas A9:A14). Sur Initialize 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
    18
    19
     
    Private Sub UserForm_Initialize()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Texte As String
     
        Set Plage = Range("A9:A14")
     
        For Each Cel In Plage
     
            If Cel.Value <> "" Then Texte = Texte & Cel.Value & vbCrLf
     
        Next Cel
     
        TextBox1.MultiLine = True
        TextBox1.Text = Texte
     
    End Sub
    Hervé.

  11. #11
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    Bonjour Hervé et merci pour ton aide. J'ai donc deux codes à placer?
    un dans le premier userform où tu peux voir que la plage de cellule sélectionnée s'appelle commentaire

    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
     
    Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
     
        nom = ComboBox4.Value
     
        Feuil1.Select
        Range("7:7").Find(nom, , xlValues, xlWhole, , , False).Select
        ActiveCell.Select
        colonne = ActiveCell.Column
        ligne = ActiveCell.Row
     
        Set commentaire = Sheets("saisie").Range(Cells(ligne + 3, colonne + 2), Cells(ligne + 1949, colonne + 2))
        Sheets(ComboBox4.Value).Select
        Unload Me
     
        UserForm14.Show
     
    End Sub
    et un autre code dans l'initialize de l'autre userform où je modifie ton code en écrivant set plage = commentaire ?


    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
    Private Sub UserForm_Initialize()
     
        Dim plage As Range
        Dim Cel As Range
        Dim Texte As String
     
        Set plage = commentaire
     
        For Each Cel In plage
     
            If Cel.Value <> "" Then Texte = Texte & Cel.Value & vbCrLf
     
        Next Cel
     
        TextBox1.MultiLine = True
        TextBox1.Text = Texte
     
    End Sub

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    5/ C'est là que je n'y arrive pas. Il faudrait qu'elle colle la plage de cellule copiée dans la zone de texte de l'USF. Cette plage de cellule contient du texte. Il faudrait donc qu'il colle seulement le texte. Si c'est possible j'aimerais que ce "collage" exclue les cellules vides de la plage et qu'il colle le texte de chaque cellule sous cette forme :
    - texte 1
    - texte 2
    - ......
    Bonjour,

    Essayez la démarche suivante qui utilise DataObject

    1) Créez un UserForm1 avec une TextBox1
    2) Copiez le code suivant dans la fenêtre de code du 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Sub UserForm_Initialize()
    With TextBox1
      .MultiLine = True
      .WordWrap = True
    End With
    Call ColleTextInTextBox
    End Sub
     
    Private Sub ColleTextInTextBox()
    Dim A$
    Dim i&
    Dim Chars
    '---
    On Error Resume Next
    With New DataObject
      .GetFromClipboard
      A$ = .GetText(1)
    End With
    If Err <> 0 Then Exit Sub
    '--- Tabulation, Saut de ligne, Retour chariot à remplacer ---
    Chars = Array(vbCrLf, vbTab, vbLf)
    For i& = LBound(Chars) To UBound(Chars)
      A$ = Replace(A$, Chars(i&), "µ")
    Next i&
    Do
      A$ = Replace(A$, "µµ", "µ")
    Loop Until InStr(1, A$, "µµ") = 0
    A$ = Replace(A$, "µ", vbCrLf)
    '---
    TextBox1 = A$
    End Sub
    3) Copiez le code suivant dans un module Standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub LanceUSF()
    Range("A9:A14").Copy  'adapter avec la plage à copier
    UserForm1.Show
    End Sub
    4) Tapez des données dans la plage à copier (dans l'exemple A9:A14)

    Lancez la macro LanceUSF.

  13. #13
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    MERCI à tous pour votre aide mais cela est trop difficile pour moi.
    Merci mille fois. J'abandonne mon idée.
    A bientôt

  14. #14
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Salut JFK,

    N'abandonne pas ! Il y a toujours une solution

    Pour en revenir à ton problème :

    1/ Elle sélectionne une plage de cellule d'une feuille "saisie"
    2/ elle copie cette plage de cellule
    5/ C'est là que je n'y arrive pas. Il faudrait qu'elle colle la plage de cellule copiée dans la zone de texte de l'USF. Cette plage de cellule contient du texte. Il faudrait donc qu'il colle seulement le texte. Si c'est possible j'aimerais que ce "collage" exclue les cellules vides de la plage et qu'il colle le texte de chaque cellule sous cette forme :
    - texte 1
    - texte 2
    - ......
    Ce que tu as fait avec ta variable "commentaire" est un bon début. Pour que ça réponde vraiment à ton besoin, ne passe pas par une range, mais simplement par une variable de type String pour le commentaire.
    Je ferais ça :

    Tout en haut de ton UserForm, avant la première Sub :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Commentaire As String
    Ensuite dans ton code à la place du set commentaire = ... et commentaire.copy, tu scannes chaque cellule de ta range et si les cellules ne sont pas vide alors tu fais ta liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Cell As Range
    Commentaire = "" 'facultatif, mais au cas où tu relances la macro, ça va d'abord vider la variable
    For Each Cell In Sheets("saisie").Range(Cells(ligne + 3, Colonne + 2), Cells(ligne + 1949, Colonne + 2)) 'On pourrait limiter avec le specialcells, mais on va faire "brutal"
        If Cell.Text <> "" Then Commentaire = Commentaire & "- " & Cell.Text & vbNewLine 
    Next Cell
    À ce stade, ta variable commentaire est exactement la liste
    - Texte 1
    - Texte 2
    - ...
    que tu veux ! Il ne reste plus qu'à la transférer au 2ème UserForm

    3/ elle fait disparaître l'USF
    Ce point est assez critique pour toi car tu décharges l'userform avec Unload Me, tu perds donc toutes les variables qui y sont y compris commentaire (!!), ainsi que le contenus des contrôles (TextBox, ComboBox...)
    Le mieux serait de simplement le cacher avec
    3/elle sélectionne une autre feuille
    Facile, je pense que ton code fonctionne bien pour ça !

    4/ elle créé un usf avec une zone de texte
    Dans ton autre UserForm (supposons que le premier UserForm s'appelle UserForm1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    TextBox1 = UserForm1.Commentaire
    End Sub

    Après, tu peux te passer d'afficher une feuille, puis une autre, puis encore une autre tout le temps en les appelant juste au niveau des range... Mais je ne veux pas t'embrouiller avec ça, je veux d'abord qu'on résolve ton problème !

    Dis-moi si tu ne comprends pas ce que j'ai écrit !

    PS : ActiveCell.Select est un beau pléonasme

    PPS : N'oublie pas de t'assurer que ta TextBox1 du UserForm2 (ou 14 ou je ne sais pas comment tu l'appelles) permette bien l'affichage sur plusieurs lignes avec, comme proposé plus haut, les paramètres MultiLine et WordWrap
    Soit par défaut dans l'éditeur d'userform, soit dans l'initialize :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TextBox1.MultiLine = True
    TextBox1.WordWrap = False 'Si tu mets true, le texte trop long sera renvoyé à la ligne, sinon il continuera tout droit... tu choisis :)

  15. #15
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    Tout d'abord merci Quentin pour ton explication super détaillée. J'ai essayé de suivre tes indications et j'ai donc deux codes. Ah oui, mon premier userform est l'userform2 et le deuxième est l'userform14
    J'ai donc :

    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
    Public commentaire As String
     
        Private Sub CommandButton1_Click()
     
    Application.ScreenUpdating = False
     
        nom = ComboBox4.Value
     
        Feuil1.Select
        Range("7:7").Find(nom, , xlValues, xlWhole, , , False).Select
        ActiveCell.Select
        Colonne = ActiveCell.Column
        ligne = ActiveCell.Row
     
        Dim Cell As Range
    commentaire = "" 'facultatif, mais au cas où tu relances la macro, ça va d'abord vider la variable
    For Each Cell In Sheets("saisie").Range(Cells(ligne + 3, Colonne + 2), Cells(ligne + 1949, Colonne + 2)) 'On pourrait limiter avec le specialcells, mais on va faire "brutal"
        If Cell.Text <> "" Then commentaire = commentaire & "- " & Cell.Text & vbNewLine
    Next Cell
     
    Me.Hide
     
        Sheets(ComboBox4.Value).Select
        UserForm14.Show
    End Sub
    et je mets ceci dans l'userform14

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
    TextBox1.MultiLine = True
    TextBox1.WordWrap = False 'Si tu mets true, le texte trop long sera renvoyé à la ligne, sinon il continuera tout droit... tu choisis :)
    TextBox1 = UserForm2.commentaire
    End Sub
    Quand je lance la macro, il me surligne "commentaire" juste au dessus dans TextBox1 = UserForm2.commentaire et écrit dans une boite " Membre de méthode ou de données introuvable"

    Voilà Encore merci pour ton post hyper détaillé

  16. #16
    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,

    On va simplifier. Tu mets cette proc dans le formulaire "UserForm2". Le code recherche la valeur dans la plage et si trouvée, retourne un Range (il est impératif de contrôler ceci avec "If Not Cel Is Nothing Then" sinon, risque de plantage si pas trouvée) ensuite, construit le commentaire, charge le formulaire "UserForm14" en mémoire (à ce stade, il n'est pas visible) rempli le TextBox en l'ayant paramétré au préalable puis affiche le formulaire. Tu n'as besoin que de cette proc, il te faut supprimer "UserForm_Initialize" du formulaire "UserForm14" :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Private Sub CommandButton1_Click()
     
        Dim Commentaire As String
        Dim Cel As Range
     
        nom = ComboBox4.Value
     
        Set Cel = Feuil1.Range("7:7").Find(nom, , xlValues, xlWhole, , , False)
     
        'il faut contrôler si un Range est bien retournée !
        If Not Cel Is Nothing Then
     
            Colonne = Cel.Column
            ligne = Cel.Row '<-- ici, c'est forcément 7 !
     
            Commentaire = "" 'facultatif, mais au cas où tu relances la macro, ça va d'abord vider la variable
     
            With Sheets("saisie")
     
                For Each Cel In .Range(.Cells(ligne + 3, Colonne + 2), .Cells(ligne + 1949, Colonne + 2)) 'On pourrait limiter avec le specialcells, mais on va faire "brutal"
     
                    If Cel.Text <> "" Then Commentaire = Commentaire & "- " & Cel.Text & vbNewLine
     
                Next Cel
     
            End With
     
            Sheets(ComboBox4.Value).Select
     
            'charge le formulaire en mémoire
            Load UserForm14
     
            With UserForm14
     
                'paramètre le TextBox
                .TextBox1.MultiLine = True
                .TextBox1.WordWrap = False
                .TextBox1.Text = Commentaire 'affectation de texte
     
                'affichage visuel du formulaire
                .Show
     
            End With
     
        Else
     
            MsgBox "La valeur '" & nom & "' n'a pas été trouvée !"
     
        End If
     
    End Sub
    Hervé.

  17. #17
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    Bonjour à tous.

    J'allume l'ordi ce matin en repensant à la gentillesse de Quentin hier soir qui m'a aidé à ne pas lâcher le truc, puis je tombe sur le commentaire de Theze. Je le rentre dans mon tableau et cela fonctionne parfaitement.
    Un grand merci à vous. Je l'ai déjà dit en privé à une personne mais grâce à votre aide je suis certain que des centaines de projets voient le jour alors qu'ils seraient restés dans les carton. Cela doit être lassant parfois pour vous de répéter des choses inlassablement.... mais cela rend des services énormes......

    Merci à toutes les personnes qui sont intervenues sur ce message.

  18. #18
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    Je reviens sur mon commentaire

    Non non pas du tout
    Je voulais juste ajouter que la dernière macro me donne tous les commentaires qu'il y a dans la colonne. Or je souhaite juste avoir ceux de la colonne mais sur la plage filtrée.
    En fait dans le code fourni au début, je ne sais pas si cela se voit ou si ça marchait sans faire exprès la macro ne sélectionnait pas toute la colonne mais seulement la partie de la colonne filtrée.
    Je ne sais pas si j'ai été clair. Si non, je peux fournir davantage d'explications.

    Bonne journée

  19. #19
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    Voici le code l'userform2 (le premier en fait) en entier. J'ai essayé d'annoter les premiers filtres. Et avant donc il ne sélectionnait que la plage de cellule filtré et prenait uniquement ses valeurs. Là j'ai l'impression qu'il prend toute la colonne. Me trompe-je ?


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    Private Sub ComboBox1_Change()
    lieu = ComboBox1.Value
     
     Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=3, Criteria1:=lieu  'il me filtre le tableau par rapport à la colonne 3
    End Sub
     
    Private Sub ComboBox2_Change()
    couleurs = ComboBox2.Value
     
     Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=5, Criteria1:=couleurs 'il filtre à nouveau par la colonne 5
    End Sub
     
    Private Sub ComboBox3_Change()
    competences = ComboBox3.Value
     
    Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=6, Criteria1:=competences  'il filtre à nouveau par la colonne 6
    End Sub
     
     
    Private Sub CommandButton1_Click()
     
        Dim Commentaire As String
        Dim Cel As Range
     
         nom = ComboBox4.Value  'là il ne filtre pas mais se sert de cette donnée pour la chercher dans le tableau
     
        Set Cel = Feuil1.Range("7:7").Find(nom, , xlValues, xlWhole, , , False)
     
        'il faut contrôler si un Range est bien retournée !
        If Not Cel Is Nothing Then
     
            colonne = Cel.Column
            ligne = Cel.Row '<-- ici, c'est forcément 7 !
     
            Commentaire = "" 'facultatif, mais au cas où tu relances la macro, ça va d'abord vider la variable
     
            With Sheets("saisie")
     
                For Each Cel In .Range(.Cells(ligne + 3, colonne + 2), .Cells(ligne + 1949, colonne + 2)) 'On pourrait limiter avec le specialcells, mais on va faire "brutal"
     
                    If Cel.Text <> "" Then Commentaire = Commentaire & "- " & Cel.Text & vbNewLine
     
                Next Cel
     
            End With
     
            Sheets(ComboBox4.Value).Select
     
            'charge le formulaire en mémoire
            Load UserForm14
     
            With UserForm14
                'paramètre pour le label
                .Label1.Caption = "Voici les commentaires obtenus par " & ComboBox4.Value & " dans la période " & ComboBox1.Value & " avec le niveau " & ComboBox2.Value & " pour la compétence " & ComboBox3.Value
     
     
                'paramètre le TextBox
                .TextBox1.MultiLine = True
                .TextBox1.WordWrap = True
                .TextBox1.Text = Commentaire 'affectation de texte
     
                'affichage visuel du formulaire
                .Show
     
            End With
     
        Else
     
            MsgBox "La valeur '" & nom & "' n'a pas été trouvée !"
     
        End If
     
    End Sub

  20. #20
    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
    Bonsoir,

    Si j'ai bien compris, tu fais un filtrage progressif avec des ComboBox et tu veux ensuite récupérer que les cellules visibles et non vides sur la proc évènementielle "CommandButton1_Click()" ? Je te re-poste le code complet concernant cette proc en ayant ajouté le test "If Cel.EntireRow.Hidden = False Then" :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Private Sub CommandButton1_Click()
     
        Dim Commentaire As String
        Dim Cel As Range
     
         nom = ComboBox4.Value  'là il ne filtre pas mais se sert de cette donnée pour la chercher dans le tableau
     
        Set Cel = Feuil1.Range("7:7").Find(nom, , xlValues, xlWhole, , , False)
     
        'il faut contrôler si un Range est bien retournée !
        If Not Cel Is Nothing Then
     
            colonne = Cel.Column
            ligne = Cel.Row '<-- ici, c'est forcément 7 !
     
            Commentaire = "" 'facultatif, mais au cas où tu relances la macro, ça va d'abord vider la variable
     
            With Sheets("saisie")
     
                For Each Cel In .Range(.Cells(ligne + 3, colonne + 2), .Cells(ligne + 1949, colonne + 2))
     
                    'si visible (suite au filtrage)
                    If Cel.EntireRow.Hidden = False Then
     
                        If Cel.Text <> "" Then Commentaire = Commentaire & "- " & Cel.Text & vbNewLine
     
                    End If
     
                Next Cel
     
            End With
     
            Sheets(ComboBox4.Value).Select
     
            'charge le formulaire en mémoire
            Load UserForm14
     
            With UserForm14
                'paramètre pour le label
                .Label1.Caption = "Voici les commentaires obtenus par " & ComboBox4.Value & " dans la période " & ComboBox1.Value & " avec le niveau " & ComboBox2.Value & " pour la compétence " & ComboBox3.Value
     
     
                'paramètre le TextBox
                .TextBox1.MultiLine = True
                .TextBox1.WordWrap = True
                .TextBox1.Text = Commentaire 'affectation de texte
     
                'affichage visuel du formulaire
                .Show
     
            End With
     
        Else
     
            MsgBox "La valeur '" & nom & "' n'a pas été trouvée !"
     
        End If
     
    End Sub
    Hervé.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2010] Remplir une textbox à partir d'une listbox multicritères
    Par david89 dans le forum IHM
    Réponses: 11
    Dernier message: 21/09/2011, 01h06
  2. [C#] Remplir une textbox depuis une base de donnée
    Par Nicos6414 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 11/04/2011, 12h03
  3. Remplir une textbox ou label
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/10/2010, 20h27
  4. remplir une textbox en ajax
    Par ronki dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/02/2008, 11h57
  5. [VBA-A]Remplir une textbox avec des données de tables.
    Par cuicui08 dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/03/2006, 10h28

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