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 :

Incrémenter textbox via combobox [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 38
    Points
    38
    Par défaut Incrémenter textbox via combobox
    Bonjour à tous,

    Je me permets de vous demander de l'aide, je suis nocive en programmation VBA.

    J'ai une combobox qui est alimenté par un code qui recupere les noms des feuilles, j'ai une textbox qui doit comporter certain caractere des noms des feuilles et un numéro.
    mes feuilles sont sous le format (AAAA 00000(AA 2013)
    je souhaiterais que mon textbox se remplisse seul sous le format (00000-000)
    00000 tiré du nom de la feuille
    000 tiré de la feuille en question de la colonne A a la suite du précédent

    voici mes codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_initialize()
     
    Dim i As Byte
    For i = 4 To Sheets.Count
    Num_compte.AddItem Sheets(i).Name
    Next i
     
    End Sub
    Dans un premier temps je n'arrive pas a récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Num_compte_Change()
    Num_Devis.Value = Num_compte
    Num_Devis = Format(Num_Devis, "00000-000")
    Num_Devis.MaxLength = 9
     
    End Sub
     
    End Sub
    Merci pour vos réponse

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 203
    Points : 175
    Points
    175
    Par défaut
    Salut
    Pour écrire dans une TextBox tu dois utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label.Caption = NomFeuille
    Avec Label étant le nom de ta TextBox et NomFeuille la variable créée pour réceptionner le nom de ta feuille (Num_Devis?).
    Tu peux construire cette variable par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomFeuille = ActiveSheet.Name & "-" & Range("A1")

  3. #3
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    je suis nocive en programmation VBA.
    J'espère que non, quand même

    Je n'ai pas bien compris le format de tes noms de feuille (2013 12345, par exemple ?)

    Peux-tu donner un exemple de ce que tu as en colonne A ? Est-ce que c'est, pour continuer mon exemple :

    122345-678
    ou 12345678 ?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 38
    Points
    38
    Par défaut
    Désolé je me suis mal exprimé!

    ce classeur me permet de créer un suivi de devis et contrat suivant des compte distinct, chaque compte correspond a une feuille nommée sous le format (ATL1 000001(AA 2013)
    ATL1 = région
    000001 = N° de compte
    AA= initial technicien gérant compte
    2013= année du compte

    donc ma combobox me permettrais de selectionner ma feuille ainsi que incrémenter le N° de compte(ex: 000001) dans ma textbox (Num_Devis)

    Ensuite la textbox (Num_Devis) doit etre sous le format (N° de compte - N° du Devis) ex: 00001-002 pour le 2ème devis sachant que ces N° de devis s'incremente à la suite de la colonne A (ca je sais faire), mais dans cette colonne A il y aura des N° de contrat et de bon d'intervention d'un format différent.

    Je me dit novice vu la capacité de VBA!

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Un petit classeur exemple - sans données confidentielles serait le bienvenu. Merci.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 940
    Points : 28 938
    Points
    28 938
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pourquoi ne pas profiter des cellules d'excel pour formater le nom à ta guise et ensuite tout simplement donner au contrôle TextBox la valeur de la cellule formatée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1 = sh.Range("C2")
    sh est une variable objet (WorkSheet)
    Sur cette page VBA / Fonction - Incrémentation de n° , il y un classeur exemple où sur la feuille [Exemple avec VBA], tu trouveras une illustration de ce que j'écris plus haut.
    Comme je n'ai pas créé d'exemple avec UserForm dans ce classeur, je te propose d'en créer un avec 3 TextBox et 3 Label numérotés de 1 à 3.
    Ensuite tu colles le code ci-dessous.

    UserForm contenant trois TextBox(1-3) et trois Label(1-3)
    Code de la UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize()
     Dim funct As WorksheetFunction
     Set funct = Application.WorksheetFunction
     Dim n As Byte
     For n = 1 To 3
      With Me
      .Controls("Label" & n) = funct.Index(Range("dbcount"), n, 1)
      .Controls("TextBox" & n) = funct.Index(Range("dbCount"), n, 6)
      End With
     Next
    End Sub
    La colonne 1 de la table nommée dbCount contient les Textes Facture, Note d'envoi et Note de crédit et la colonne 2 les n° de ceux-ci formatés.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 38
    Points
    38
    Par défaut


    ...heu, je vais passer le petit classeur en question.
    Quand je disais que j'étais novice....

    sinon je vais essayer ce code, histoire de me comprendre.

    Voici le petit classeur, mon probleme se situe dans l'userform devis
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Essaie comme ceci. Toutefois, le n° de devis n'est pas reporté dans la feuille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Num_compte_Change()
    Dim Ligne As Long, NumDev As String
    Num_Devis.Value = Mid(Num_compte.Value, InStr(1, Num_compte.Value, " ") + 1, 5) & "-"
    NumDev = Format(CInt(Application.Max(Sheets(Num_compte.Value).[A:A])) + 1, "000")
    Num_Devis.Value = Num_Devis.Value & NumDev
    Num_Devis = Format(Num_Devis, "00000-000")
    Num_Devis.MaxLength = 9
    End Sub
    Je pense que la ligne 6 ne sert à rien; vérifie.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 38
    Points
    38
    Par défaut
    Merci, Effectivement la ligne 6 et 7 ne servent a rien.
    par contre le +1 de la ligne 4 n'est effective que pour le 1er devis, si je veux rajouter un devis dans le meme compte, le devis a le meme numero

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Oui, c'est ce que je te disais, que le numéro de devis n'est pas reporté dans la colonne A. Pour obtenir celui du textbox, je recherche le plus grand numéro de cette colonne. Tant que 001 n'aura pas été reporté dans cette colonne, le numéro n'évoluera pas. On peut :
    1. reporter ce numéro en colonne A
    2. le mettre dans une variable
    Dis-moi ce que tu souhaites.

    PS peux-tu me dire ce que je vais trouver en colonne A une fois qu'elle sera remplie (un exemple)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 38
    Points
    38
    Par défaut
    Dans la colonne A, si trouvera :

    Les numeros des devis format(00000-000)
    Des numeros de bon d'interv (BON 000001)
    Des numeros de contrat (A2013-01-001)

    quand tu parles de reporter le numero, c'est le numero (001) ou le numero complet (00000-001) car en validant mon userform, chaque données rentrées dans mon userform sont transférées sur ma feuille de compte.
    pour ce qui est de la variable je ne vois pas ce que tu veux dire. dsl

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Ouf, ça vient.
    Dans un module (Module1 par exemple, mets au début :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Devi() As Integer, F() As String
    Dans le module "ThisWorkbook", mets :

    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 workbook_open()
        Dim Sh As Worksheet, Ctr As Integer, C As Range, Res As Integer
        Ctr = 0
        ReDim Devi(0)
        ReDim F(0)
        For Each Sh In Worksheets
            If Left(Sh.Name, 3) = "ATL" Then
                If Application.CountA(Sh.[A16:A10000]) > 0 Then
                    Res = 0
                    For Each C In Sh.Range(Sh.[A16], Sh.Cells(Sh.Rows.Count, 1).End(xlUp))
                        If IsNumeric(Left(C.Value, 5)) Then
                            If CInt(Mid(C.Value, 7, 3)) > Res Then
                                Res = CInt(Mid(C.Value, 7, 3))
                            End If
                        End If
                    Next C
                    ReDim Preserve F(Ctr)
                    ReDim Preserve Devi(Ctr)
                    Devi(Ctr) = Res + 1
                    F(Ctr) = Sh.Name
                    Ctr = Ctr + 1
                Else
                    ReDim Preserve F(Ctr)
                    ReDim Preserve Devi(Ctr)
                    Devi(Ctr) = 0
                    F(Ctr) = Sh.Name
                    Ctr = Ctr + 1
                End If
            End If
        Next Sh
    End Sub
    et dans le module de l'userform, mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Num_compte_Change()
    Dim NumDev As Integer, Feuille As String, Var
    Num_Devis.Value = Mid(Num_compte.Value, InStr(1, Num_compte.Value, " ") + 1, 5) & "-"
    Var = F
    If IsNumeric(Application.Match(Num_compte.Value, F, 0)) Then
        NumDev = Devi(Application.Match(Num_compte.Value, F, 0) - 1)
        Num_Devis.Value = Num_Devis.Value & Format(NumDev, "000")
        Devi(Application.Match(Num_compte.Value, F, 0) - 1) = NumDev + 1
    Else
        NumDev = 0
        Num_Devis.Value = Num_Devis.Value & Format(NumDev, "000")
        Devi(0) = 1
    End If
    End Sub
    à la place de la macro existante. Dis-moi ce qui ne va pas. Si ça fonctionne comme tu veux, je te donnerais les explications.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 38
    Points
    38
    Par défaut
    merci pour ta réponse!

    par contre ca fonctionne pas chez moi

    Erreur d’exécution '5':
    argument ou appel de procédure incorrect

    dans Private Sub Num_compte_Change()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNumeric(Application.Match(Num_compte.Value, F, 0)) Then
    EDIT:Ca fonctionne, j'ai fermé mon fichier excel puis puis réouvert.

    par contre par moment le numéro de devis fait (+2) risque d'avoir des trous dans les N° de devis.
    j'ai remarqué quand choisisant un compte (ex: 00001) puis en prennant un autre et en revennant sur le 1er celui rajoute +1 es ce normal (pas facile a expliqué)

  14. #14
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    j'ai remarqué quand choisisant un compte (ex: 00001) puis en prennant un autre et en revennant sur le 1er celui rajoute +1 es ce normal (pas facile a expliqué)
    Oui, (dans ma logique), le numéro s'incrémente à chaque fois que tu choisis une feuille dans le combobox. Est-ce que tu as repéré quand le numéro de devis est incrémenté deux fois au lieu d'une ?

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Est-ce que tu as repéré quand le numéro de devis est incrémenté deux fois au lieu d'une ?
    Non, je n'est pas remarqué, je ferme mon userform après avoir valider ce qui permet de ne pas rajouter 2 fois le meme devis.

    Citation Envoyé par Daniel.C Voir le message
    Si ça fonctionne comme tu veux, je te donnerais les explications.
    Merci beaucoup pour ces codes, je suis pas contre d'avoir quelques explications si ca ne te dérange pas!

    je risque d'avoir d'autre question pour continuer mon projet, j'ouvre un autre sujet ou continue dans celui là?

  16. #16
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Le mieux est d'ouvrir un nouveau fil (ne poste surtout pas le classeur avec ton premier post. C'est contre la charte du forum). J'essayerai d'y répondre si je suis disponible, ayant déjà assimilé le fonctionnement d'une partie du classeur. Je commente le code et je le poste sur ce fil dès que possible.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 38
    Points
    38
    Par défaut
    ok pas de soucis, je te remercie beaucoup.

    Merci aussi a philippe et did103,
    pour le code de philippe, j'ai essayé de comprendre mais c'est encore trop compliqué pour moi.

  18. #18
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    En mettant des commentaires dans la macro "Workbook_Open", j'ai sans doute mis le doigt sur la double incrémentation. Essaie avec ce code :

    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
    'à l'ouverture du classeur
    'l'idée, c'est de mettre les noms de feuille dans une variable tableau (F)
    'et les derniers numéros de devis dans une autre variable tableau (Devi)
    Private Sub workbook_open()
        Dim Sh As Worksheet, Ctr As Integer, C As Range, Res As Integer
        'Ctr sert d'index pour les deux variables tableau
        Ctr = 0
        'initialisation des tableaux
        ReDim Devi(0)
        ReDim F(0)
        'boucle sur les feuilles
        For Each Sh In Worksheets
            'on ne s'occupe que des feuilles commençant par "ATL"
            If Left(Sh.Name, 3) = "ATL" Then
                'Si la plage A16:A10000 de la colonne A n'est pas vide
                If Application.CountA(Sh.[A16:A10000]) > 0 Then
                    'Res est la variable qui va contenir le n° de devis
                    Res = 0
                    'boucle sur chaque cellule de la plage de cellules non vides de la colonne A
                    For Each C In Sh.Range(Sh.[A16], Sh.Cells(Sh.Rows.Count, 1).End(xlUp))
                        'si les 5 caractères de gauche de la cellule sont numériques
                        'alors, c'est un numéro de devis
                        If IsNumeric(Left(C.Value, 5)) Then
                            'récupération du nombre à incrémenter
                            's'il est supérieur à Res
                            If CInt(Mid(C.Value, 7, 3)) > Res Then
                                'on remplace Res par cette valeur
                                Res = CInt(Mid(C.Value, 7, 3))
                            End If
                        End If
                    Next C
                    'on redimensionne les variables tableau
                    ReDim Preserve F(Ctr)
                    ReDim Preserve Devi(Ctr)
                    'et on les renseigne
                    '***********************************
                    'c'est sans doute ce "+1" quui provoque une double incrémentation
                    'Devi(Ctr) = Res + 1
                    'remplacé par :
                    Devi(Ctr) = Res
                    '***********************************
                    F(Ctr) = Sh.Name
                    'on incrémente l'index
                    Ctr = Ctr + 1
                Else
                    's'il n'y a rien en colonne A
                    ReDim Preserve F(Ctr)
                    ReDim Preserve Devi(Ctr)
                    Devi(Ctr) = 0
                    F(Ctr) = Sh.Name
                    Ctr = Ctr + 1
                End If
            End If
        Next Sh
    End Sub

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 89
    Points : 38
    Points
    38
    Par défaut
    merci Daniel pour tes explications, maintenant j'ai mal de tête!

    j'ai laissé comme c'était car sinon il n'incrémentais pas.
    Je n'aurais jamais été aussi loin, encore merci

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

Discussions similaires

  1. [XL-2007] Afficher le résultat d'une recherche via combobox dans textbox ( débutant VBA )
    Par lbr64 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/07/2014, 15h25
  2. [XL-2003] additem dans listbox via textbox et combobox
    Par alex santus dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2010, 08h45
  3. [XL-2007] Remplissage de TextBoxs via ComboBox
    Par crismans dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/07/2009, 10h46
  4. chaines textbox vers combobox
    Par rober dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/10/2006, 08h41
  5. [C#] Visual 2005 : Sortie d'un textBox via la touche Entrée
    Par Gold.strike dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/08/2006, 17h03

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