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 :

Remplacer une Combobox par une textbox dans un Userfrom [XL-2013]


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
    Profession indépendande
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Profession indépendande
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Par défaut Remplacer une Combobox par une textbox dans un Userfrom
    Bonjour
    Tout d'abord, merci de votre aide d'expert, pour quelqu'un de néophyte comme moi, elle est particulièrement précieuse.

    J'ai créé avec l'aide de ce forum, un Userform permettant à partir d'une combobox de modifier les données d'un tableau, code ci-dessous.
    Ce formulaire fonctionne très bien pour ce qu'on lui demande, mais ,après adaptation à mon classeur de travail, et notamment l'adjonction de quelques formules de calcul simple, il me génère des erreur de données si je ne prête pas attention à la date de la combobox, c'est à dire si elle ne correspond pas à la date du de la cellule en première feuille.

    En réalité, le formulaire ne doit modifier et calculer qu'une série de données à la fois et correspondant à la date de la feuille 1 et surtout le copier à la bonne date de la feuille données. Le plus simple c'est de tester dans ma exemple.

    Pour ce faire la solution me semble être de remplacer la "combobox" CboDate dans l'exemple et la remplacer par une textbox (ou autre) non modifiable dans le formulaire et chargée de la date de la feuille 1 (cellule F7 nommée "LaDate" dans le classeur en exemple). Si une autre solution existe, plus facile à réaliser ou plus fiable, je suis également preneur.

    Code que je souhaite adapter:
    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
     
    Option Explicit
    Dim Ligne As Long
     
     
    Private Sub UserForm_Initialize()
    'CboDate = Date_Visite
    Dim J As Long
     
      With Sheets("Données")
        For J = 4 To .Range("A" & Rows.Count).End(xlUp).Row
          Me.CboDate.AddItem .Range("A" & J)
        Next J
      End With
     
    CboDate.Value = Format(CboDate.Value, "dd/mm/yy")
    End Sub
     
    Private Sub CboDate_Change()
    Dim Ctrl As Control
    Dim Colonne As Integer
     
      If Me.CboDate.ListIndex = -1 Then Exit Sub
      With Sheets("Données")
        Ligne = Me.CboDate.ListIndex + 4
        For Each Ctrl In Me.Controls
          Colonne = CInt("0" & Ctrl.Tag)
          If Colonne > 0 Then Ctrl = .Cells(Ligne, Colonne)
        Next Ctrl
      End With
    End Sub
    Function TrouveType(V)
    TrouveType = V
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 And InStr(TrouveType, ":") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd hh:mm"): Exit Function
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd"): Exit Function
    If IsNumeric(Replace(TrouveType, ".", ",")) = True Then TrouveType = Replace(TrouveType, ",", "."): Exit Function
    End Function
     
     
    Private Sub CmdModifier_Click()
     
        ' Modifier
        Dim Ctrl As Control
        Dim Colonne As Integer
        Dim Ligne As Long
     
         If Me.CboDate.ListIndex = -1 Then Exit Sub
         Ligne = Me.CboDate.ListIndex + 4
         With Sheets("Données")
             For Each Ctrl In Me.Controls
                 Colonne = Val(Ctrl.Tag)
                 If Colonne > 0 Then
                       .Cells(Ligne, Colonne) = TrouveType(Ctrl)
                     End If
                          Next Ctrl
                 .Cells(Ligne, Sheets("Données").UsedRange.Columns.Count) = Sheets("Feuil1").Range("C24")
         End With
       Unload Me
     
    End Sub
     
     
    Private Sub CmdAnnuler_Click()
    Unload Me
    End Sub
    Merci par avance de votre expertise
    Joël
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Homme Profil pro
    Profession indépendande
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Profession indépendande
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Par défaut
    Personne pour m'aider aujourd'hui sur ce souci.
    J'ai beau essayer en cherchant sur le forum ou sur internet, je n'y parviens pas à faire fonctionner mon formulaire avec une textbox.

    Pour contourner la problème, sachant ce n'est qua moyennement satisfaisant et comporte toujours un risque d'erreur.
    J'ai ajouté au bouton valider un message box avec:

    'Etes vous sur de la date des données à modifier'
    =>oui : validation OK
    =>non : fermeture de la messagebox et retour sur la saisie

    Joël

  3. #3
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Citation Envoyé par joel50 Voir le message
    Pour ce faire la solution me semble être de remplacer la "combobox" CboDate dans l'exemple et la remplacer par une textbox (ou autre) non modifiable dans le formulaire et chargée de la date de la feuille 1 (cellule F7 nommée "LaDate" dans le classeur en exemple). Si une autre solution existe, plus facile à réaliser ou plus fiable, je suis également preneur.
    Bonjour !

    Si tu veux quelque chose de non modifiable, tu peux placer un Label, et tu assigne sa valeur lors de l'initialisation de l'Userform. Bien que je comprenne pas à quoi sert cette combobox, si ce n'est d'information. (Je n'ouvre pas les PJ, donc je ne peux pas voir tout ce qui cloche)

    Exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    Me.Label1.caption = Worksheets("MaFeuille").Range("A1").Value
    End sub
    Si tu veux quelques chose de modifiable, mais uniquement des valeurs pré-remplies, tu peux mettre une Listbox, que tu charge à l'initialisation de ton Userform.

    Exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub UserForm_Initialize()
    Dim I as single
    For I = 1 to 20
       With Me.listbox1
          .additem
          .List(.Listcount - 1) =  Worksheets("MaFeuille").Cells(I, 1).value
       End with
    Next I
    End sub

  4. #4
    Invité
    Invité(e)
    Par défaut
    bonjour regarde le fichier joint!

    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
    Private Sub CmdValider_Click()
    Ligne = BoxDateD2.Tag
    With Sheets("Données")
     .Cells(Ligne, Sheets("Données").UsedRange.Columns.Count) = Sheets("Feuil1").Range("C24")
       .Cells(Ligne, 1) = TrouveType(BoxDateD2)
        .Cells(Ligne, 2) = TrouveType(TextBox1)
        .Cells(Ligne, 3) = TrouveType(TextBox2)
        .Cells(Ligne, 4) = TrouveType(TextBox3)
        .Cells(Ligne, 5) = TrouveType(TextBox4)
        .Cells(Ligne, 6) = TrouveType(TextBox5)
        .Cells(Ligne, 7) = TrouveType(TextBox6)
        .Cells(Ligne, 8) = TrouveType(CommentairesD2)
     
    End With
    End Sub
    Fichiers attachés Fichiers attachés

  5. #5
    Membre confirmé
    Homme Profil pro
    Profession indépendande
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Profession indépendande
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Par défaut
    Bonjour à tous
    Merci Nico chg et Rdurupt
    Le fichier exemple est dans le premier post
    Nico, effectivement aujourd'hui la combbox sert d'information, avant que je n'étoffe mon classeur principal, elle me servait à choisir la date des données à modifier, j'intervenais directement à partir de la feuille contenant le tableau de données. Depuis, j'ai ajouté d'autres feuilles, d'autres tableaux et j'interviens sur mes données à partie d'une feuille synthétisant les calculs et seulement sur une date à la fois. Ce combobox me génère des calcul erronée si la date choisie dans la combobox n'est pas le même que celle sur le feuille de départ.
    Je ne souhaite pas mettre mon fichier en public, et de plus il est trop lourd pour pouvoir le mettre complet en PJ, se serait certainement plus facile pour la compréhension.
    Robert
    Là le code m'a l'air très costaud, par contre je ne peux pas tester, j'ai un message quand je clique sur le bouton modifier:
    Erreur de compilation
    "le code contenu dans ce projet doit être mis à jour pour pouvoir etre utilisé sur les systemes 64 bits.Vérifiez et mettre à jour les instructions Declare puis marquez-les avec l'attribut PtrSafe."
    Et la...
    Je doit m'absenter un moment, et ça tombe pas mal, j'imprime plus trop. Dur dur pour mes neurones, ça chauffe...

    Cordialement
    Joël

  6. #6
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Citation Envoyé par joel50 Voir le message
    Nico, effectivement aujourd'hui la combbox sert d'information
    En ce cas, tu peux te baser sur le premier code que j'ai poster, avec un Label. C'est non modifiable par un User, et tu change sa valeur à l'initialisation de l'UF, donc tu récupère toujours la bonne date.

  7. #7
    Invité
    Invité(e)
    Par défaut
    voilà la nouvelle mouture!
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. lier une combobox et un textbox dans un datagrid
    Par guigui14760 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 06/09/2010, 13h25
  2. Réponses: 2
    Dernier message: 18/06/2009, 15h09
  3. Réponses: 0
    Dernier message: 17/06/2009, 23h26
  4. [Toutes versions] Remplacer "#N/A" par une valeur par défaut
    Par canary dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/05/2009, 11h23
  5. [RegEx] Remplacer dernière occurence d'une chaine par une autre
    Par webjoujou dans le forum Langage
    Réponses: 3
    Dernier message: 12/11/2008, 17h58

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