VBA Créer base de données par userform

Neofalken

XLDnaute Junior
Bonjour le forum,

Je viens vers vous car j'ai besoin d'un petit déblocage...
Je coince sur qq points et je n'arrive pas à m'en sortir.

J'aimerais créer une base de données qu'on remplirait à l'aide d'un userform.
J'ai créé mon userform, il me remplit les cellules que je veux, tout va bien.
Là où je coince c'est que j'aimerais qu'il vérifie le résultat d'une concatenation afin qu'elle ne dépasse pas un certain nombre de caractère. Et là j'arrive pas à m'en sortir. car meme si on dépasse le nombre indiqué, il me met ma msgbox d'erreur mais il me valide quand meme les champs et me les saisit dans mes cellules...
J'aimerais que lorsqu'on dépasse le nombre, il ne fasse rien et que celui qui saisit puisse modifier son libellé.
Mon deuxième point où je coince est que j'aimerais que certains champs "résultats" apparaissent dans des champs grisés dans mon userform afin que l'opérateur puisse voir à quoi va ressembler la concatenation des champs en live, pas seulement après avoir clique sur le bouton de validation...
Je joints mon fichier pour qui voudrait bien m'aider.
Merci d'avance
 

Pièces jointes

  • essai.xlsm
    30.2 KB · Affichages: 47
  • essai.xlsm
    30.2 KB · Affichages: 53
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : VBA Créer base de données par userform

Hello

ton problème vient du fait que tu copies colles avant de faire le test..
modifie le code comme suit:
Code:
Private Sub copier()

'on vérifie la longueur du texte AVANT de copier
If Len(designation) > 40 Then
    MsgBox "Trop de caratère dans Désignation(limite:40)", vbRetryCancel
    Exit Sub
End If

Range("A16:J16").Copy

Cell_Row = Range("A" & Rows.Count).End(xlUp).Row + 1
Cells(Cell_Row, 1).Select
ActiveSheet.Paste
    
Cells(Cell_Row, 1).Select
Selection.Value = UserForm1.ComboBox1
ActiveCell.HorizontalAlignment = xlLeft
    
Cells(Cell_Row, 2).Select
Selection.Value = UserForm1.ComboBox2
ActiveCell.HorizontalAlignment = xlCenter
    
Cells(Cell_Row, 3).Select
Selection.Value = UserForm1.projet
ActiveCell.HorizontalAlignment = xlCenter
    
Cells(Cell_Row, 5).Select
Selection.Value = UserForm1.designation
ActiveCell.HorizontalAlignment = xlLeft
    

End Sub
Code:
Private Sub CommandButton_Valider_Click()
TextBox5 = Len(designation) 'mise à jour du textbox5 avec le nombre de caractères
copier
End Sub

Code:
Private Sub TextBox4_Change()
TextBox4 = Range("f23") & " " & Range("E23")
End Sub
 

vgendron

XLDnaute Barbatruc
Re : VBA Créer base de données par userform

Re

Pour ton second problème.. quelques questions:

la case Résultat (celle en dessous de N° projet) se remplit comment?
j'imagine comme la formule de ta colonne D.. "SI(B22="E";CONCATENER("F036E.";C22);CONCATENER("F036N.34";C22))"

sauf que en colonne B, tu ne proposes que 1 ou 2.. jamais E...?

la case Résultat (celle en dessous de la Désignation Article).. se remplit comment??
c'est le résultat précédent MOINS le premier caractère?

et pour la désignation finale. meme question..
 

vgendron

XLDnaute Barbatruc
Re : VBA Créer base de données par userform

je me suis permis d'épurer ton code et le rendre un peu plus compréhensible
1) en mettant des noms aux combobox et Textbox avec la syntaxe suivante: CBnomCombo et TBnomTextbox
2) supprimé les lignes de codes inutiles (tous les sélect)
3) mis des commentaires pour savoir ce qu'on fait

en faisant ca, je me pose la question: est il necessaire de recopier les formules? puisque les infos sont mises à jour automatiquement dans les boites grises?
 

Pièces jointes

  • essai2.xlsm
    32.5 KB · Affichages: 56
  • essai2.xlsm
    32.5 KB · Affichages: 50

Neofalken

XLDnaute Junior
Re: Re : VBA Créer base de données par userform

Merci beaucoup pour ton aide vgendron.
Je me susi servi de ta refonte pour finaliser mon programme.

En effet je cherchais à recopier les formules car je ne savais pas convertir en VBA...

Par contre j'ai une autre question peu^t être basique, mais je ne trouve aucune réponse.

Je cherche à chercher la première ligne vide, y insérer une nouvelle ligne et insérer mes données sur cette nouvelle ligne. Mais attention
je connais la ligne de programme qui cherche la dernière ligne non-vide et écrire dans la suivante. Non ce que je veux c'est la première ligne vide au milieu des lignes non-vides.
Exemple : là, si je lance le programme il me trouvera la ligne 3. Il fera un insertion de ligne et copiera mes données.
1 XX
2 XX
3
4 xx
5 xx
 

vgendron

XLDnaute Barbatruc
Re : VBA Créer base de données par userform

Re

pour la dernière ligne non vide. je suppose que tu pars du bas, et tu remontes: ta ligne de code doit ressembler à
Code:
Range("A &.rows.count).end(xlup).select
sur ton exemple de 5 lignes: tu arrives sur A5

pour la première vide, il faut partir d'en haut et descendre. et faire un offset de 1 ligne
Code:
Range("A1").End(xlDown).Offset(1, 0).Select
sur ton exemple de 5 lignes: tu arrives sur A3
 

Discussions similaires

Réponses
5
Affichages
272
Réponses
7
Affichages
482
Réponses
8
Affichages
474
Réponses
27
Affichages
1 K

Statistiques des forums

Discussions
315 102
Messages
2 116 221
Membres
112 690
dernier inscrit
noureddinee