Incrémenter un Texbox avec soit des dates, soit des nombres/textes

Bonjour,

Je fais fasse à un problème avec le code suivant :

'Pour le bouton Modifier
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Dim i%, L%
With Worksheets("Achat en masse")
   If MsgBox("Confirmez-vous les modifications apportées ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        On Error GoTo SORTIE
        L = Application.Match(Me.ComboBox1, .Range("LN10:LN" & .Cells(.Rows.Count, 326).End(xlUp).Row), 0) + 9

            For i = 1 To 18
                If Me.Controls("TextBox" & i).Visible = True Then
                    If IsDate(Me.Controls("TextBox" & i)) Then
                    .Cells(L, i + 282) = CDate(Me.Controls("TextBox" & i).Value)
                    Else
                    .Cells(L, i + 282) = ""
                    End If
                End If

            Next i
    Me.Label46 = CStr(Application.Index(.Range("KO:KO"), L))
    Me.Label47 = CStr(Application.Index(.Range("KP:KP"), L))
    Me.Label52 = CStr(Application.Index(.Range("IS:IS"), L))
    Me.Label54 = CStr(Application.Index(.Range("I:I"), L))
    Me.Label56 = CStr(Application.Index(.Range("KQ:KQ"), L))
    Me.Label61 = CStr(Application.Index(.Range("V:V"), L))
    Me.Label59 = CStr(Application.Index(.Range("Z:Z"), L))
    Me.Label63 = CStr(Application.Index(.Range("KR:KR"), L))
    Me.Label64 = CStr(Application.Index(.Range("AA:AA"), L))
    Me.Label66 = CStr(Application.Index(.Range("J:J"), L))
    Me.Label67 = CStr(Application.Index(.Range("K:K"), L))
    Me.Label70 = CStr(Application.Index(.Range("AD:AD"), L))
    Me.Label71 = CStr(Application.Index(.Range("AF:AF"), L))
    Me.Label72 = CStr(Application.Index(.Range("AG:AG"), L))
    Me.Label75 = CStr(Application.Index(.Range("L:L"), L))
    Me.Label77 = CStr(Application.Index(.Range("LQ:LQ"), L))
    Me.Label78 = CStr(Application.Index(.Range("LR:LR"), L))
    Me.Label90 = CStr(Application.Index(.Range("U:U"), L))
    Me.Label91 = CStr(Application.Index(.Range("AK:AK"), L))
    Me.Label93 = CStr(Application.Index(.Range("AJ:AJ"), L))

Me.Label91.Caption = Format(Round(CDbl(Application.Index(.Range("AK:AK"), L)), 2), "###,##0.00")
Me.Label93.Caption = Format(Round(CDbl(Application.Index(.Range("AJ:AJ"), L)), 2), "###,##0.00")

    End If

End With
Exit Sub
SORTIE: Exit Sub
Application.ScreenUpdating = True
End Sub

J'ai en effet 18 TextBox dans mon USF. Les TextBox 1 à 17 se remplissent en mettant des dates, tout s'incrémente parfaitement dans la feuille du classeur.

MAIS, La TexBox 18 doit être incrémentée par un une donnée de ce type " 2022-1245 " ou " 2022 - 14325 " ou " Clos "

PROBLEME :

Le code mettant les données au format Date, lorsque je rentre qqch du type " 2022-1245 " , cela ne vient pas s'incrémenter sur mon fichier.

Je précise, les cellules sont dans le fichier au format DATE (Réel). --> J'ai essayé en changeant le format (Réel) des cellules, en le passant au format Standard, rien n'y fait...


QUESTION :

Comment modifier ce code pour que uniquement la TextBox18 puisse incrémenter du texte, nombre (bref tout sauf des dates)

Merci d'avance pour votre aide !

Bonjour,

Comment modifier ce code pour que uniquement la TextBox18 puisse incrémenter du texte, nombre (bref tout sauf des dates)

Le code mettant les données au format Date, lorsque je rentre qqch du type " 2022-1245 " , cela ne vient pas s'incrémenter sur mon fichier.

Cela vient d'où le " 2022-1245, vous le rentrez comment ?

Comme d'habitude, sans le fichier...

Crdlt

Bonjour,

Le fichier fait 12Mo... galère à réduire... vive le 21è siècle...

Au bout d'une heure j'ai réussi à le réduire. Le voici en PJ.

La donnée " 2022-12467 " ou autre qui n'est pas une date, je le rentre soit manuellement, soit en faisant un copier/coller depuis un fichier word, pdf, web etc.

En cliquant sur le bouton "SUIVI DR" , le USF permettant le suivi de la progression des dossiers (par date) apparait.

Le TextBox18 correspond au n°GED qui sensé venir incrémenter la colonne DF10:DF1500.

5copie-internet.xlsm (202.91 Ko)

Merci pour l'aide

avec le code à jour :

'Pour le bouton Modifier
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Dim i%, L%
With Worksheets("BC")
   If MsgBox("Confirmez-vous les modifications apportées ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        On Error GoTo SORTIE
        L = Application.Match(Me.ComboBox1, .Range("DK10:DK" & .Cells(.Rows.Count, 115).End(xlUp).Row), 0) + 9
            For i = 1 To 18
                If Me.Controls("TextBox" & i).Visible = True Then
                    If IsDate(Me.Controls("TextBox" & i)) Then
                    .Cells(L, i + 92) = CDate(Me.Controls("TextBox" & i).Value)
                    Else
                    .Cells(L, i + 92) = ""
                    End If
                End If

            Next i
    Me.Label46 = CStr(Application.Index(.Range("FG:FG"), L))
    Me.Label47 = CStr(Application.Index(.Range("FH:FH"), L))
    Me.Label52 = CStr(Application.Index(.Range("BZ:BZ"), L))
    Me.Label54 = CStr(Application.Index(.Range("I:I"), L))
    Me.Label56 = CStr(Application.Index(.Range("FI:FI"), L))
    Me.Label61 = CStr(Application.Index(.Range("AA:AA"), L))
    Me.Label59 = CStr(Application.Index(.Range("AH:AH"), L))
    Me.Label63 = CStr(Application.Index(.Range("FJ:FJ"), L))
    Me.Label64 = CStr(Application.Index(.Range("AI:AI"), L))
    Me.Label66 = CStr(Application.Index(.Range("J:J"), L))
    Me.Label67 = CStr(Application.Index(.Range("K:K"), L))
    Me.Label69 = CStr(Application.Index(.Range("AL:AL"), L))
    Me.Label93 = CStr(Application.Index(.Range("AO:AO"), L))
    Me.Label73 = CStr(Application.Index(.Range("AN:AN"), L))
    Me.Label74 = CStr(Application.Index(.Range("L:L"), L))
    Me.Label77 = CStr(Application.Index(.Range("HA:HA"), L))
    Me.Label78 = CStr(Application.Index(.Range("HB:HB"), L))
    Me.Label85 = CStr(Application.Index(.Range("AR:AR"), L))
    Me.Label86 = CStr(Application.Index(.Range("AS:AS"), L))
    Me.Label87 = CStr(Application.Index(.Range("AT:AT"), L))
    Me.Label88 = CStr(Application.Index(.Range("AU:AU"), L))
    Me.Label90 = CStr(Application.Index(.Range("Z:Z"), L))

Me.Label85.Caption = Format(Round(CDbl(Application.Index(.Range("AR:AR"), L)), 2), "###,##0.00")
Me.Label86.Caption = Format(Round(CDbl(Application.Index(.Range("AS:AS"), L)), 2), "###,##0.00")
Me.Label87.Caption = Format(Round(CDbl(Application.Index(.Range("AT:AT"), L)), 2), "###,##0.00")
Me.Label88.Caption = Format(Round(CDbl(Application.Index(.Range("AU:AU"), L)), 2), "###,##0.00")

            End If

End With
Exit Sub
SORTIE:  MsgBox "BC non trouvé, merci de recommencer une nouvelle saisie", vbCritical: Exit Sub
Application.ScreenUpdating = True
Me.Repaint
End Sub

Bonjour Monadesign_83

Outch... le fichier contient des liaisons et me fait planter Excel
merci de modifier le fichier et de redéposer quelque chose de viable SVP

De plus il semble y avoir plusieurs USF, sur lequel avez vous un problème ?

A+

Bonjour BrunoM45,

Oui j'ai la même problèmatique... Je ne sais pas où sont ces fichus liens !!! J'ai pourtant regardé dans toutes les cellules et effacé le liens (mis automatiquement suite à ces fichus copier/coller d'autres classeurs qui ne comprend pas que je veux juste la formule et pas le lien vers le classeur d'où il vient)

Je viens d'épurer le fichier, dites moi si c'est bon cette foi...

C'est sur le USF2 (suivi DR) où se situe le problème, c'est la que je dois incrémenter dans le TextBox18 une donnée autre qu'une date

1copie-internet.xlsm (148.49 Ko)

Bonjour,

Même chose que Bruno mais j'ai réussi à l'ouvrir.

Votre premier souci est que le fichier fait référence à un fichier appelé SUIVI RC V8 BRF V2.xlsm et que ce fichier est nécessaire pour ouvrir le votre je pense

J'en conclu que vous avez récupéré un fichier fait par quelqu'un d'autre.
Si vous allez dans Fichier --> Informations, à droite vous verrez le nom de l'auteur et en dessous en cliquant sur "Modifier les liaisons", vous verrez le nom du fichier en question.

Pour Bruno, appuie sur ESC à l'ouverture du fichier cela permet d'y accéder et le code bug puisque la référence est manquante. Ensuite désactiver la Sub Open dans thisworkbook

Pour Monadesign_83,
- avez vous besoin d'un code à l'ouverture du fichier ?
- pour vos liens, ils sont ici --> Feuille BC, cellules L10 à L50 et F10 à F50.
Edit
:
Il vous faut aller voir dans la liste de validation du menu Données.

Pas besoin de remettre le fichier. Dites moi si ok et si on supprime. Je corrige sur le mien

Bonjour Dan,

En fait c'est mon fichier d'origine mais que je suis en train de dupliquer pour un autre projet pour un autre collègue...

J'ai bien le fichier SUIVI RC V8 BRF V2.xlsm, mais suite à un "bug" Excel, j'ai "copier/coller" sur un nouveau classeur.

Merci pour les liens... c'est vrai que je n'y pensais plus à ces listes...

Concernant l'ouverture du fichier, non je n'ai pas besoin de code. Ci-après le fichier sans les liens...

1copie-internet.xlsm (111.51 Ko)

Il n'y a pas que les listes. Il y a aussi le code d'ouverture du fichier qui fait planter

Là en cliquant dur le bouton Suivi DR, on arrive difficilement à ouvrir votre fichier car cette référence est toujours demandée.
La question première est de savoir si votre fichier a toujours besoin de cette référence. Si non, on la supprime ???. (voir la vue ci-après)

presse papier02

Puis votre fichier ne contient aucune données. Donc pas facile de simuler ou de voir comment vous fonctionnez

Oui, le code_suivi_rc est nécessaire, mais lorsque j'ai réduit le fichier, je n'ai pas touché à cela, d'ailleurs quand je l'ouvre il apparait chez moi (photo)

capture ecran 2

Comment le trouver et vous l'envoyer ?

Le fichier est en cours de création, donc normal qu'il soit vierge.

En fait ce n'est pas très compliqué, il sert au suivit des commandes. Je vous joins à nouveau le fichier avec en première ligne un exemple et j'ai écrit en haut de la colonne BJ comment il faut que cela se passe.

Maintenant, lors de l'utilisation des USF dans ces onglets (Achats en masse, BC) du fichier COPIE INTERNET, le code n'est pas nécessaire. Il l'est que pour d'autres exécutions sur d'autres onglets du fichier.

En fait ce n'est pas très compliqué, il sert au suivit des commandes. Je vous joins à nouveau le fichier avec en première ligne un exemple et j'ai écrit en haut de la colonne BJ comment il faut que cela se passe.

Oui j'avais compris ce point. Par contre votre fichier contient à nouveau les liaisons... c'est pénible l'ouverture

Déjà une chose que vous pourriez changer c'est le code d'ouverture de l'userform2. cela éviter de faire une boucle

Private Sub UserForm_Initialize()
Dim L As Long

Application.ScreenUpdating = False
With Worksheets("BC")
    L = .Range("DK" & Rows.Count).End(xlUp).Row
    If L = 10 Then
        Me.ComboBox1.AddItem .Range("DK" & L).Value
    Else: Me.ComboBox1.List = .Range("DK10:Dk" & L).Value
    End If
End With
Application.ScreenUpdating = True
End Sub

Pour votre souci, merci de m'expliquer comment vous fonctionnez. Dans votre dernier fichier on a une feuille supplémentaire "Achat en Masse"
Je clique sur le bouton SUIVI DR dans la feuille BC ou Achat en masse ?
Ensuite on doit faire quoi ?

Au temps pour moi, il est vrai que ce n'est pas facile de se faire comprendre par messages interposés.

Je n'ai aucune liaison qui s'interpose lors de l'ouverture du fichier, je ne comprends pas pourquoi chez vous oui

1/ Prenons uniquement l'onglet Achat en masse (je répercuterai sur BC les modif de code à faire plus tard)

2/ Il y a deux onglets, un pour le suivi de la commande (Suivi AM) et l'autre pour le suivi de la réception de la commande (Suivi DR)

3/ On ouvre "Suivi AM" , on sélectionne un OS (n°1) , des dates déjà présentes dans le fichier viennent s'afficher dans le USF et c'est normal.

Il y a 3 Texbox qui ne sont vides (OFFRE, INDEX/OT et NB PRESTATIONS)

Là, il faut respectivement mettre, par exemple, 2022-1468 dans OFFRE (qui est sensé s'incrémenter en BJ10 après validation), OT 761 dans INDEX / OT (qui est sensé s'incrémenter en BK10 après validation) et 6 dans NB PRESTATIONS (qui est sensé s'incrémenter en BL10 après validation)

Puis cliquer sur "modifier" puis sur "oui" quand le message box apparait.

--> PROBLEME, Les cases BJ10 BK10 et BL10 restent vides

8copie-internet.xlsm (183.67 Ko)

Je n'ai aucune liaison qui s'interpose lors de l'ouverture du fichier, je ne comprends pas pourquoi chez vous oui

Même souci. je vous l'ai déjà dit. Prenez votre fichier posté et allez dans fichier -> Information, vous verrez bien que les liaisons sont toujours là
Puis même chose que ce que je vous ai posté ici https://forum.excel-pratique.com/s/goto/1063015

Vous repostez à nouveau un fichier. C'est quoi la différence ?
Arrêtez de poster des fichiers, je dois chaque fois recommencer les modif. C'est pénible et de plus cela alourdit le forum inutilement

Bon je vais regarder sur votre dernier fichier (j'ai supprimé le précédent dans votre post)

Quand vous dites:

2022-1468 dans OFFRE (qui est sensé s'incrémenter en BJ10 après validation)

je dois avoir quoi dans Offre 1469 .

EDIT : dans vos explications on est bien sur l'Userform3 ?

Merci pour ces rappels et précisions qui pour moi ne sont pas forcément évidentes. Je m'excuse pour mes maladresses.

La différence : C'est que j'ai rajouté l'onglet Achat en Masse (car c'est sur celui la que j'avais commencé à travaillé. J'avais initialement mis le fichier avec BC en ligne par erreur...)

J'ai ensuite fait des recherches de lien (comme vous me l'avez suggéré plus haut) mais je ne les trouvent pas... Bref.

Oui, nous sommes bien sur l'UserForm3

J'ai dit des bêtises, je me suis emmêlé les pinceaux.

DANS OFFRES je dois avoir par exemple : 2615 , 2411-2 , 3124 etc etc etc
DANS INDEX je dois avoir par exemple : OT 756 , OT 22 , INDEX 4 , INDEX 9410 etc etc etc
DANS nb de prestations je dois avoir par exemple : 1 , 10 , 8 , 4 etc etc etc

En gros, n'importe quel information (nombre, texte, etc) sauf des dates. Actuellement tout fonctionne si et seulement si ce sont des dates.

Je vois que vous avez aussi ajouté le code proposé dans l'userfrom2

c'est sur le IF Isdate que vous avez un souci.

1. Lorsque vous mettez 1 dans la combobox1, les textbox 1 à 11 comporte des données de date. Est-ce chaque fois la même chose ?
2. L'instruction "On error goto sortie" sert à vérifier si L > 0 ?

Oui, merci pour cette amélioration du code.

Les TextBox 1 à 11 seront toujours des dates, cela ne pose donc aucun problème à ce niveau.

Il faut modifier le code de telle façon à ce que les TextBox 12 , 13 et 14 elles acceptent ce dont j'ai besoin

C'est à dire tout format sauf des dates

OFFRE : 2415 ou 2143-2 etc

INDEX / OT : OT 14 ou Index 424 etc

Nb de prestation : 4 , 6, etc

Pour l'instruction "On error" cela sert si aucun numéro de Bon de commande n'est reconnu dans la ComboList

Une fois le code modifié en conséquence, cela donnera ça : (là j'ai directement incrémenté à la main dans les cellules)

capture ecran 3

1. Pour l'instruction "On error" cela sert si aucun numéro de Bon de commande n'est reconnu dans la ComboList

Ben c'est impossible puisque la combobox est chargé selon les données existantes en colonne DD


2. Les TextBox 1 à 11 seront toujours des dates, cela ne pose donc aucun problème à ce niveau

Vous n'avez pas compris ma question. Ce que je veux savoir c'est si ces dates sont toujours présentes quand vous ouvrez l'userform3 ou si vous ajoutez ou modifiez éventuellement les dates dans ces textboxes

Votre souci que l'info que vous mettez dans les textbox12, 13 et 14 ne sont pas des dates. Dès lors c'est cette ligne qui est prise en compte --> .Cells(L, i + 50) = ""
Alors qu'il vous faudrait ceci à la place -->

.Cells(L, i + 50) = Me.Controls("TextBox" & i).Value

Le tout est de savoir le pourquoi vous avez codé l'instruction qui renvoie une valeur vide


3. Autre point identique à un post précédent pour l'ouverture de l'usf, vous pouvez utiliser ce code à la place

Private Sub UserForm_Initialize()
Dim L As Long
Application.ScreenUpdating = False

With Worksheets("Achat en masse")
    L = .Range("DD" & Rows.Count).End(xlUp).Row
    If L = 10 Then
        Me.ComboBox1.AddItem .Range("DD" & L).Value
    Else: Me.ComboBox1.List = .Range("DD10:DD" & L).Value
    End If
End With

Application.ScreenUpdating = True
End Sub

Merci beaucoup Dan, je viens de faire un premier test et tout à l'air de fonctionner.

"Ben c'est impossible puisque la combobox est chargé selon les données existantes en colonne DD"

Si, si l'on veut rentrer le numéro manuellement (au clavier) et que l'on tape un mauvais numéro

"Vous n'avez pas compris ma question. Ce que je veux savoir c'est si ces dates sont toujours présentes quand vous ouvrez l'userform3 ou si vous ajoutez ou modifiez éventuellement les dates dans ces textboxes"

Ces dates, une fois incrémentées sont toujours présentes dans le fichier. Cela permet d'avoir un visuel sur l'avancement des visas des différents protagonistes. Mais, je peux éventuellement venir y apporter une modif, par exemple si j'ai mis 15/02/2022 et qu'une semaine après je me rends compte d'une erreur, j'ouvre le USF, je selectionne le BC ou AM concerné via le Combobox, toutes les dates déjà incrémentées apparaissent, je sélectionne la mauvaise et la modifie puis valide.

Pourquoi j'avais mis une cellule vide :

A cette époque (car maintenant, après avoir mis à jour le code selon vos recommandations) lorsque j’insérais une date dans un TextBox et que je validais. La prise en compte s'effectue correctement et donc la date est bien envoyé dans sa cellule.

Si je faisais une erreur et que finalement je ne souhaitais plus mettre cette date, je l’effaçais du USF et lorsque je validais, la date ne s'elèvais pas de la cellule concernée.

Rem : Lorsque vous reprenez une réponse, utilisez l'icone Guillemet qui se trouve juste à coté de </> dans la barre de menu

1. Si, si l'on veut rentrer le numéro manuellement (au clavier) et que l'on tape un mauvais numéro

Ok juste dans ce cas. Par contre vous devriez annuler ce contrôle d'erreur plus bas car si vous avez une autre erreur plus bas dans le code, l'action sera identique. Le code sortira de la macro de la même manière.

2. après je me rends compte d'une erreur, j'ouvre le USF, je selectionne le BC ou AM concerné via le Combobox, toutes les dates déjà incrémentées apparaissent, je sélectionne la mauvaise et la modifie puis valide.

OK. Point clos donc. Ma question était dédiée à voir votre souci d'une autre manière.

3. A cette époque (car maintenant, après avoir mis à jour le code selon vos recommandations) lorsque j’insérais une date dans un TextBox et que je validais. La prise en compte s'effectue correctement et donc la date est bien envoyé dans sa cellule.

Ok je comprends. Attention toutefois avec cette instruction Isdate, car si le code voit que l'information peut être considérée comme date, isdate renvoie aussi TRUE même ce n'est pas une date

EDIT : Pour ma réponse au point 1, sans annuler le contrôle d'erreur vous pourriez faire comme ceci

    On Error Resume Next
    L = Application.Match(Me.ComboBox1, .Range("DD10:DD" & .Cells(.Rows.Count, 108).End(xlUp).Row), 0) + 9
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub

Là plus besoin de l'instruction On error goto sortie et de la mention Sortie en fin de vos codes

Rechercher des sujets similaires à "incrementer texbox soit dates nombres textes"