Alimentation / Affichage TextBox

Résolu/Fermé
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 - 7 août 2014 à 10:27
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 7 août 2014 à 14:18
Bonjour,

J'ai un petit soucis au niveau d'un USF de traitement de données, celui-ci récupère les données d'une base de données (logique) afin de les afficher et de pouvoir les modifier de façon un peu plus aggréable qu'un tableau Excel à 300 lignes, et 50 colonnes.

1. Le soucis est que dans mon tableau Excel, certaines colonnes sont conditionnés pour n'être rempli que par les choix d'un menu déroulant via la validation de données mais sur plusieurs niveau (Ex : En choisissant Zone A dans le premier menu déroulant, le second me propose Zone A-1, Zone A-2, ect... Si je choisis Zone B dans le premier, le second me propose Zone B-1, Zone B-2, ect...) J'aimerais savoir s'il est possible de faire la meme chose avec les textbox d'un USF ?

2. J'ai également de nombreuses textbox qui récupèrent des dates sur mon USF, le soucis est que je travail dans une entreprise où certaines personnes utilisent la date au format JJ/MM/AAAA et d'autre MM/JJ/AAAA afin d'éviter la saisie et donc les erreurs de format j'ai ajouté un calendrier. En revanche, ma textbox affiche la date au format MM/JJ/AAAA ce qui ne va pas plaire à tout le monde, et peut créer des confusions. J'aimerais savoir si afin de simplifier il était possible que ma textbox affiche la date sous format texte, tout en gardant une valeur date pour la réimplantation des données (j'espère être clair). En gros j'aimerais que ma textbox affiche 07-Aout.-14 (ou 07-Aug.-14 ça n'a pas d'importance) qui est le format que j'utilise sur Excel mais qu'elle continue d'écrire dans mon fichier 07/08/14 comme elle le fait actuellement.
J'avais essayé une syntaxe du type :
Echeance1.Value = Format(CDate(Echeance1.Tag), "dd-mmm.-yy")

Mais sans succés.


Pour info voici mon fichier : https://www.cjoint.com/?DHhihUymFko

En vous remerciant d'avance pour votre aide.

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
7 août 2014 à 10:34
Re-

Pour ta deuxième question :
au remplissage de l'userform :
Echeance1.Value = Format(Sheets("Base RDP").Cells(ligne, 21), "dd-mmm-yy") 

au remplissage de ta feuille depuis l'userform :
'ici Echeance1 est un textbox et donc renvoie un String
'on doit donc le convertir en Date grâce à CDate
Sheets("Base RDP").Cells(ligne, 21) = Format(CDate(Echeance1.Value), "dd/mm/yy")

On reste ainsi toujours avec des dates

Pour ta première question, elle est vraiment mal posée, je ne comprends pas. Sache toutefois qu'il est impossible d'afficher une liste style validation, dans un textbox. Il faut, dans ce cas, utiliser le contrôle ComboBox...
0
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
7 août 2014 à 11:07
Re,

Pardon c'est moi qui dit des conneries... Je me suis emballé avec mes textbox, il s'agit bien ici de combobox. Pour ce qui est du premier niveau (secteur), mon menu déroulant (ma combobox) fonctionne correctement, elle est bien alimentée en revanche pour les deux niveaux en dessous je ne sais pas comment les "liés" à la valeur de la première combobox. (Dans la validation de données, il suffit d'utilisaer la formule =INDIRECT(), mais ça serait beaucoup trop facile, si c'était aussi simple dans VBA)
Je souhaite donc que ma combobox Zone, dépende de secteur, et que sous zone dépende de zone (sachant que toutes mes plages sont nommées).
Idem je souhaite que détail dépende de sujet.


Pour les dates, effectivement ça fonctionne ! En revanche il restait le soucis lors du changement de la date via le calendrier. J'ai juste repris la meme syntaxe, et comme par magie ça fonctionne
Traitement.Controls(CaseDate).Value = Format(date2, "dd-mmm.-yy")


Merci !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
7 août 2014 à 11:10
Petite précision au cas ou quelqu'un suivrait ce sujet, le fichier se trouve dans la discussion : https://forums.commentcamarche.net/forum/affich-30617491-appeler-un-textbox-a-l-aide-d-une-variable#p30621706

Je regarde pour les combo en cascade...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
7 août 2014 à 11:20
(Dans la validation de données, il suffit d'utilisaer la formule =INDIRECT(), mais ça serait beaucoup trop facile, si c'était aussi simple dans VBA)
Et bien détrompe toi, c'est encore plus simple...
Par exemple, pour que le Secteur choisi dans la ComboBox Secteur engendre la liste de la combobox Zone :
Private Sub Secteur_Change()
If Secteur.Value = "" Then Exit Sub
Zone.Clear
SsZone.Clear
Zone.List = Application.Transpose(Range(Secteur.Value).Value)
End Sub


Ceci est rendu facile car tu as su utiliser à bon escient le gestionnaire de noms d'Excel...
0
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
7 août 2014 à 11:54
Effectivement ça fonctionne très bien pour la zone et c'est très simple (pour une fois). Merci :)

Et en plus, ça fonctionne aussi pour la sous-zone, avec exactement la meme syntaxe (j'avais peur de devoir faire un montage du genre Application.Transpose(Application.Transpose.....)
Mais meme pas, on va au plus simple pour une fois. C'est parfait.

Un grand merci à toi, et à toute l'aide que tu m'as apportés.

Pour le moment tous mes problèmes ont été solutionnés, mais à n'en pas douter, j'aurais encore besoin de l'aide de CCM prochainement !

Bonne journée, et encore merci.

PS : J'ai essayé de changer le nom du sujet pour mettre Alimentation Combobox / Affichage TextBox pour faciliter les recherches mais j'ai eu un message "Impossible de modifier". Si c'est en ton pouvoir je pense que ça pourra aider...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
7 août 2014 à 12:05
En bonus, une petite fonction qui vérifie si le nom du range (que tu place dans ta combo) est bien un nom définit du classeur. Ca t'évitera d'avoir des soucis au cas ou un nom n'est pas définit :
Function NomDefini(Nom As String) As Boolean
Dim Noms As Name
NomDefini = False
For Each Noms In ThisWorkbook.Names
    If Noms.Name = Nom Then NomDefini = True: Exit Function
Next Noms
End Function


Fonction que tu appelles depuis ton code Combo_Change :

Private Sub Secteur_Change()
If Secteur.Value = "" Then Exit Sub
Zone.Clear
SsZone.Clear
If NomDefini(Secteur.Value) Then Zone.List = Application.Transpose(Range(Secteur.Value).Value)
End Sub
0
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
7 août 2014 à 13:22
Quelle anticipation...

J'étais tranquillement entrain de transposer tout dans mon fichier original, et au moment des test j'ai eu un message d'erreur sur une zone qui n'avait pas de sous-zone... --> Aspect que j'avais totalement oublié.

Je reviens ici pour re-re-redemander de l'aide, et là... Bim la réponse, avant meme que la question soit pose, c'est beau.

Merci beaucoup...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
7 août 2014 à 13:31
En fait, ce sujet est suffisamment intéressant pour figurer dans une astuce CCM. Astuce que je suis en train de rédiger.
Par conséquent, j'essaie d'anticiper les problèmes que peuvent avoir les internautes; D'où l'anticipation fortuite de ton problème...

Deuxième souci qui pourrait se poser est dans la définition du nom elle même. Il faut faire attention à bien conserver l'orthographe. Un espace en début ou fin de mot ne se voit pas toujours...

L'avantage du test est que tu peux gérer le cas en erreur.
Par exemple indiquer dans Zone : "Erreur" le cas échéant.
Comme ceci :

Private Sub Secteur_Change()
If Secteur.Value = "" Then Exit Sub
Zone.Clear
SsZone.Clear
If NomDefini(Secteur.Value) Then
Zone.List = Application.Transpose(Range(Secteur.Value).Value)
Else
Zone.AddItem "Erreur fatale"
End If
End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
7 août 2014 à 14:18
Et voilà : Une fiche pratique...
0