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

  1. #1
    Membre du Club
    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
    Points : 57
    Points
    57
    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 du Club
    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
    Points : 57
    Points
    57
    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 éclairé 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
    Points : 758
    Points
    758
    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
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

  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 du Club
    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
    Points : 57
    Points
    57
    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 éclairé 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
    Points : 758
    Points
    758
    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.
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

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

  8. #8
    Membre du Club
    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
    Points : 57
    Points
    57
    Par défaut
    Re
    Merci
    Maintenant j'ai cette erreur
    Erreur de compilation
    Des constantes, chaînes de longueur fixe, tableaux, types définis par l'utilisateur et instructions Declare ne sont pas autorisés comme membres Public de modules d'objets
    Joël

  9. #9
    Invité
    Invité(e)
    Par défaut
    désolé!
    Fichiers attachés Fichiers attachés

  10. #10
    Membre du Club
    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
    Points : 57
    Points
    57
    Par défaut
    Non, c'est moi qui suit désolé
    Et maintenant quand je clique sur la flèche de date, j'ai
    erreur de compilation
    Incompatibilité de type

    Ca bloque à:
    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
    Public Function Chargement(Optional Mydate As String = "", Optional Pose As String = "0;0") As String
    Dim t
    t = Split(Pose, ";")
    Me.Top = t(0)
    Me.Left = t(1)
    If Pose = "0;0" Then
        Me.StartUpPosition = 2
    Else
     hWnd = FindWindow(vbNullString, Me.Caption)
     Style = GetWindowLong(hWnd, -16) And Not &HC00000
     SetWindowLong hWnd, -16, Style
     DrawMenuBar hWnd
     Me.Height = Me.Height - 17
    End If
    If Mydate <> "" Then Me.Tag = Mydate Else Me.Tag = Date
    Me.Mois = Format(Me.Tag, "MMMM YYYY")
    MajControle
    Me.Show vbModal
    On Error Resume Next
    Chargement = Me.Tag
    Unload Me
    End Function

  11. #11
    Invité
    Invité(e)
    Par défaut
    on va y arriver et on ce rendra compte que c'est pas ça qui faut!
    Fichiers attachés Fichiers attachés

  12. #12
    Membre du Club
    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
    Points : 57
    Points
    57
    Par défaut
    C'est la maintenant
    Effectivement je pense également que ça ne répondra pas à ma question du souci actuel mais ça me semble pas mal pour l’évolution de mon tableur à terme. Mais j'ai encore du boulot pour y arriver



    C'est certainement plus proche de mon besoins exprimer dans:
    http://www.developpez.net/forums/d14...combobox-date/
    Mais pas non plus pour l'instant, dans une prochaine versions peut être, mais d'autres partie à construire et à fiabiliser avant et je ne suis qu'un amateur, donc ça prendra du temps.





    Maintenant ça bloque la

    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
    Public Function Chargement(Optional Mydate As String = "", Optional Pose As String = "0;0") As String
    Dim t
    t = Split(Pose, ";")
    Me.Top = t(0)
    Me.Left = t(1)
    If Pose = "0;0" Then
        Me.StartUpPosition = 2
    Else
     hWnd = FindWindow(vbNullString, Me.Caption)
     Style = GetWindowLong(hWnd, -16) And Not &HC00000
     SetWindowLong hWnd, -16, Style
     DrawMenuBar hWnd
     Me.Height = Me.Height - 17
    End If
    If Mydate <> "" Then Me.Tag = Mydate Else Me.Tag = Date
    Me.Mois = Format(Me.Tag, "MMMM YYYY")
    MajControle
    Me.Show vbModal
    On Error Resume Next
    Chargement = Me.Tag
    Unload Me
    End Function

  13. #13
    Invité
    Invité(e)
    Par défaut
    encore
    Fichiers attachés Fichiers attachés

  14. #14
    Membre du Club
    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
    Points : 57
    Points
    57
    Par défaut
    Oui, mais la c'est la bonne.
    Extra comme truc. Et oui, on y est arrivés, et comme tu disais tout à l'heure, ce n'est pas ce qu'il faut, mais je pense l'intégrer dans une prochaine version, si j'arrive à la maitriser, mais ça me semble jouable.
    Merci tout de même.
    Si ce n'est pas trop abuser, pourrais tu regarder mon autre post resté en souffrance:
    http://www.developpez.net/forums/d14...combobox-date/
    J’aurai aimer arriver à rentrer le code pour le fonctionnement du userform ajout avec date.
    J' y adapterai peut être le calendrier plus tard, ainsi que sur un autre, mais pour aujourd'hui je reste simple.
    Je souhaite d’abord fiabiliser mes données après je travaillerai les améliorations.
    Encore merci pour tes coup de main de maitre.
    Joël

+ 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