Compteur automatisé dans useform

moustic54

XLDnaute Occasionnel
Bonsoir

Je voudrais mettre un compteur automatique dans un useform sous la forme : 2015-XXXX
2015 étant l'année et les xxxx étant le chiffre qui s'incrément de 1 à chaque nouvel enregistrement.

Ex : 25eme enregistrement = 2015-0025
178eme enregistrement = 2015-0178

Si l'enregistrement se fait l'année suivante (soit en 2016) le compteur devra alors affiché 2016-XXXX

Quelqu'un pourrait il me dire comment faire ?
Mes connaissances en vba sont proches du degré zéro :(
 

Yaloo

XLDnaute Barbatruc
Re : Compteur automatisé dans useform

Dans ce cas-là, on peut faire comme l'exemple des fruits que je t'ai mis au post#41
Tu peux mettre
VB:
Bt = Array("Picture1", "CommandButton22", "CommandButton24" et "CommandButton26")
For i = 0 To UBound(Bt)
  Sheets(1).Shapes(Bt(i)).Select
  Selection.Enabled = 0
Next
Mais je pense que ton image va rester, c'est elle qui lance l'UserForm "MotDePasse", dans le fichier exemple, nous ne touchions pas au bouton lançant l'UserForm "MotDePasse"

A+
 

moustic54

XLDnaute Occasionnel
Re : Compteur automatisé dans useform

Bonjour Martial, bonjour le forum

Je reviens vers vous pour deux questions :

1. Je voudrais que dans 1 TextBox (date) quelque soit le mode de renseignement (sans ou sans espace , avec points...) le texte renvoyé soit au format jj/mm/yyyy

J'ai fait des tests mais ce n'est pas cela :(

Private Sub Date_AfterUpdate()
Date.Value = Format(Date.Value, Format("dd/mm/yyyy"))
End Sub

Ou çà

Private Sub Date_AfterUpdate()
Date.Value = Format(Date.Value, "00/00/yyyy")
End Sub​


2. Est-il possible lorsque l'on a des listes en cascades (a et b) d'alimenter depuis l'USF la liste B disponible depuis la feuilDoc si la valeur n'est pas présente ?

Merci pour votre aide
 

Yaloo

XLDnaute Barbatruc
Re : Compteur automatisé dans useform

Bonjour Moustic, le forum,

1) Avec cette macro peut-être, ma ça ne prend pas en compte les points et les espaces.
Ça positionne directement les / à la bonne place.
Si la valeur rentrée dans le TextBox1 n'est pas une date, on efface et on revient dans le TextBox1.
VB:
Private Sub TextBox1_AfterUpdate()
If Not IsDate(TextBox1) Then TextBox1 = "": TextBox1.SetFocus
End Sub
Private Sub TextBox1_Change()
TextBox1.MaxLength = 10
    With TextBox1
      Select Case Len(.Text)
        Case 2, 5
          .Text = .Text & "/"
      End Select
    End With
End Sub
2 ) Il faudrait un exemple, pour voir comment tu traites les listes a et b.

A te relire

Martial

PS : pour le 1, si tu utilises les points ou les espaces, il y a d'autres possibilités, avec Replace par exemple à la sortie de ton TextBox1
 

Yaloo

XLDnaute Barbatruc
Re : Compteur automatisé dans useform

Re,

1) avec replace
VB:
Private Sub TextBox1_AfterUpdate()
  TextBox1 = Replace(TextBox1, " ", "/")
  TextBox1 = Replace(TextBox1, ".", "/")
  If Not IsDate(TextBox1) Then TextBox1 = "": TextBox1.SetFocus
End Sub
 

moustic54

XLDnaute Occasionnel
Re : Compteur automatisé dans useform

Re,

Merci Martial :)
mais n'y a-t-il aucune possibilité quant à la date de combiner à la fois absence d'espace, espace ou points ?

Quant à ma 2ème question, je joins un extrait de fichier n'étant pas certain que cela soit plus clair :(
Normalement dans un USF avec listes en cascades, on va chercher les données de ma feuille DOC

Ma question est de savoir s'il est également possible de procéder lorsque le cas se présente de façon inverse c'est-à-dire par l'ajout de données saisies dans l'USF, absentes initialement de ma feuille DOC ? :confused:
 
Dernière édition:

Yaloo

XLDnaute Barbatruc
Re : Compteur automatisé dans useform

Re,
1. Je voudrais que dans 1 TextBox (date) quelque soit le mode de renseignement (sans ou sans espace , avec points...) le texte renvoyé soit au format jj/mm/yyyy

J'ai fait des tests mais ce n'est pas cela :(

Private Sub Date_AfterUpdate()
Date.Value = Format(Date.Value, Format("dd/mm/yyyy"))
End Sub

Ou çà

Private Sub Date_AfterUpdate()
Date.Value = Format(Date.Value, "00/00/yyyy")
End Sub​

1) j'avais compris que tu souhaitais rentrer les dates soit 12.03.2015 soit 12 03 2015 et les transformer en 12/03/2015.
Que veux-tu faire exactement ? Rentrer 12032015 et qu'à la sortie tu es 12/03/2015 ?

A+
 

moustic54

XLDnaute Occasionnel
Re : Compteur automatisé dans useform

Re,

Re,


1) j'avais compris que tu souhaitais rentrer les dates soit 12.03.2015 soit 12 03 2015 et les transformer en 12/03/2015.
Que veux-tu faire exactement ? Rentrer 12032015 et qu'à la sortie tu es 12/03/2015 ?

A+

En fait, je voudrais que les 3 possibilités soient envisagées bien que la dernière (Rentrer 12032015 et qu'à la sortie tu es 12/03/2015) soit la plus souvent utilisée par rapidité de saisie en utilisant le seul clavier numérique

Bonne soirée Martial
 

Yaloo

XLDnaute Barbatruc
Re : Compteur automatisé dans useform

Re,

Avec celle-là :
VB:
Private Sub TextBox4_AfterUpdate()
If TextBox4 Like "* * *" Then
  TextBox4 = Replace(TextBox4, " ", "/") 'prise en compte des espaces
 ElseIf TextBox4 Like "*.*.*" Then
  TextBox4 = Replace(TextBox4, ".", "/") 'prise en compte des points
 ElseIf Len(TextBox4) = 6 Or Len(TextBox4) = 8 Then
  TextBox4 = Left(TextBox4, 2) & "/" & Mid(TextBox4, 3, 2) & "/" & Mid(TextBox4, 5, 4)
End If
If Not IsDate(TextBox4) Then TextBox4 = "": TextBox4.SetFocus
End Sub
Pour le point N° 2, c'est difficile car tout est imbriqué, pourrais-tu nous remettre les différentes possibilités ?

A+
 

moustic54

XLDnaute Occasionnel
Re : Compteur automatisé dans useform

Re,

Avec celle-là :

Pour le point N° 2, c'est difficile car tout est imbriqué, pourrais-tu nous remettre les différentes possibilités ?

A+

Bonjour Martial, bonjour le forum

Je ne peux détailler les différentes possibilités car c'est bien là le problème : envisager les cas où si elles n'existeraient pas déjà dans mes listes en cascades :eek:
Mais je crois que je vais mettre cela de coté.

En revanche, j'ai remarqué que lorsque l'on utilise le ComboBox3 avant le ComboBox2 nous avons toute la liste détaillée, ne doit-on pas prévoir ComboBox 3 impossible avant que ComboBox 2 ait été saisi ? S tel est le cas, à quel niveau l'indiquer ?
 

Pièces jointes

  • date-useform.xlsm
    24.1 KB · Affichages: 37
  • date-useform.xlsm
    24.1 KB · Affichages: 42
  • date-useform.xlsm
    24.1 KB · Affichages: 48
Dernière édition:

Yaloo

XLDnaute Barbatruc
Re : Compteur automatisé dans useform

Bonjour Moustic, le orum,

Il faut modifier l'Initialize de ton UserForm
VB:
Private Sub UserForm_Initialize()
   With Worksheets("DOC")
        ComboBox2.List = .Range("K2:K" & .Range("K65536").End(xlUp).Row).Value
        'Ne pas mettre la ligne suivante
        'ComboBox3.List = .Range("B2:C" & .Range("B65536").End(xlUp).Row).Value
   End With
End Sub
Pour le point 2, pour simplifier, il ne faut peut-être pas le traiter directement dans le ComboBox3 comme je voulais le faire mais plutôt à l'enregistrement.
Si la valeur du ComboBox3 n'existe pas dans la colonne B de DOC, alors on l'ajoute. Ça, c'est nettement plus simple.

A+

Martial
 

moustic54

XLDnaute Occasionnel
Re : Compteur automatisé dans useform

Bonsoir Martial, le forum

Pour le point 1 : La modification doit se faire dans UserForm_Initialize et non pas par l'ajout de lignes de codes dans les commandes Combobox2_change ou ComboBox3_change ?
Je n'ai plus l’alimentation de ma TextBox 3 :(

Je vais regarder cela plus en détail car là j'ai l'impression de régresser.:(

Pour le point 2 : "...Ça, c'est nettement plus simple...."
Tu me fais bien sourire ...... la plupart des commandes sont dignes de hiéroglyphes pour moi et même ce que je croyais avoir compris (cf. point 1) ce n'est pas çà.
Donc simple sans doute mais je t'assure Martial que ce n'est pas mon cas comme tu as pu le voir.:confused:
D'ailleurs il n'y aurait pas que la valeur du Combobox3 à ajouter dans la colonne B de DOC, TextBox3 en colonne C aussi.

Bonne soirée
 

Yaloo

XLDnaute Barbatruc
Re : Compteur automatisé dans useform

Re,

Si j'ai bien tout compris ce que tu voulais, le fichier ci-dessous doit correspondre à ta demande ;)
Pour une meilleure compréhension, j'ai rajouté des commentaires qui, je l'espère, t'aideront dans ta découverte.

A+

Martial

PS : J'ai modifié ComboBox3_Change, le TextBox3 n'était pas rempli car tu indiquais Si ComboBox3 est vide alors on copie la seconde colonne dans TextBox3 (difficile puisque ComboBox3 est vide :))
 

Pièces jointes

  • date-useform.xlsm
    27.2 KB · Affichages: 46
  • date-useform.xlsm
    27.2 KB · Affichages: 52
  • date-useform.xlsm
    27.2 KB · Affichages: 48

Yaloo

XLDnaute Barbatruc
Re : Compteur automatisé dans useform

Re,

Tu peux aussi trier les données de la feuille DOC de façon à regrouper tes données des colonnes A et B (en ordre croissant).
VB:
Private Sub CommandButton1_Click()
Dim lg&
Application.ScreenUpdating = 0
  'Avec la feuille DOC
  With Sheets("DOC")
    'Si la valeur de ComboBox3 n'est pas trouvée dans la colonne B de DOC
    If IsError(Application.Match(ComboBox3, .Columns(2), 0)) Then
      'On cherche la première cellule vide de la colonne A
      lg = .Range("A65536").End(3)(2).Row
      'On copie les valeurs des contrôles dans les colonnes correspondantes
      .Cells(lg, 1) = ComboBox2
      .Cells(lg, 2) = ComboBox3
      .Cells(lg, 3) = TextBox3
      .[A1].CurrentRegion.Sort .[A1], xlAscending, , .[B1], xlAscending, , , xlYes
    End If
  End With
  'Avec la feuille TEST
  With Sheets("TEST")
'......
A+
 

moustic54

XLDnaute Occasionnel
Re : Compteur automatisé dans useform

Bonjour Martial, le forum

Ainsi il est possible d'enregistrer les données qui n'existent pas dans le Combobox 3 et dans le TextBox 3 sur le feuille Doc :D

Wow trop fort ....
Merci pour tes explications ligne par ligne. Merci aussi pour le ComboBox 3 dont tu as agrandi la 2ème colonne pour voir ainsi ce qu'il se passe.
Tu es un bon professeur pour un ignard comme moi :eek:

Mais est ce normal que le TextBox3 ne se vide pas ?

Je m'explique : lorsque l'on change le ComboBox 2 , le comboBox 3 se vide mais pas le TextBox 3
Je ne suis pas certain que cela soit clair :confused:
 
Dernière édition:

Statistiques des forums

Discussions
312 195
Messages
2 086 072
Membres
103 110
dernier inscrit
Privé