PROJET VBA : INTERFACE DE SAISIE (DEMANDE D'ANALYSE)
Bonjour à tous,
Je suis sur un projet (mon 2ème donc débutante) pour créer une interface de saisie afin :
1/ Enregistrer une demande,
2/ Répondre à cette demande avec des résultats
3/ Avoir un bilan de toutes ces informations
Est-ce que quelqu'un voudrait bien m'aider ?
Voila mes soucis :
UserForm1 : (1ère partie de la base de données) / Saisir une demande d'analyse
1/ 1ère TextBox (et 1ère colonne) :
Je voudrais que dans la première textbox y voir apparaitre à chaque saisie un code qui s'incrémente. Ici, j'ai des personnes qui doivent faire une saisie pour me faire une demande d'analyse. Alors la numérotation automatiquement serait DA-2016-0001. Lors de la 2nd saisie serait DA-2016-0002 etc ...
J'ai trouvé ce code qui marche sur un fichier exemple mais je n'arrive pas à le faire marcher après l'avoir adapté ... (Dans cette exemple la personne voulait comme code AB0001)
Private Sub UserForm_Initialize()
Dim num As Integer
num = Range("C65536").End(xlUp).Row
If Right(Range("C" & num), 4) < 9 Then
TextBox1 = "AB000" & Right(Range("C" & num), 4) + 1
Else
If Right(Range("C" & num), 4) < 99 Then
TextBox1 = "AB00" & Right(Range("C" & num), 4) + 1
Else
If Right(Range("C" & num), 4) < 999 Then
TextBox1 = "AB0" & Right(Range("C" & num), 4) + 1
Else
TextBox1 = "AB" & Right(Range("C" & num - 1), 4) + 1
End If
End If
End If
End Sub
2/ Lorsque je fais des nouvelles saisies, elles effacent les précédentes. J'ai jamais eu ce problème avant
3/ La ComboBox marche mais la sélection ne s'affiche pas la base de données
UserForm3 : (2ème partie de la base de données) / Saisie des résultats de l'analyse
1/ ComboBox
Je voudrais qu'avec la ComboBox1 on puisse charger un numéro de demander DA-2016-... pour que les saisies du USF3 se rajoutent sur la même ligne créée avec le USF1. (Je ne sais pas si je claire
UserForm4 : Bilan
Je voudrais reprendre toutes les informations mais seulement les afficher dans des TextBox.
Je sais que tout cela est possible mais soit je n'arrive pas à le reproduire ou soit ça ne fonctionne pas ... J'ai des pistes que je cherche à droite à gauche mais sans succès final ... Est-ce que quelqu'un peux m'aider ?
Je vous remercie et je vous souhaite une excellente journée
Mjulie.
salut
pour la première partie essayer ça :
Sub TEST()
Dim num As Integer
Dim counter As Integer
num = Range("C65536").End(xlUp).Row ' la dernire ligne
'je pense que counter est l ancien code qui se trouve sur la colonne "c" sur la dernire ligne mais sur ton fichier je ne le trunve pas
' ou est sur la colonne "a" donc : num = Range("A65536").End(xlUp).Row et counter = Worksheets(1).Range("A" & num)
' en tou cas spicifier la colonne ou s inrcire les code et adapter ce code vba comme vous voulez
'par exemlpe Worksheets(1). represente la fuille ou se trouve ce données
counter = Worksheets(1).Range("C" & num)
TextBox1 = "AB" & Format(counter + 1, "0000")
End Subrebonjour
Sub TEST2()
Dim num As Integer
Dim counter
num = Range("A65536").End(xlUp).Row ' la dernire ligne
counter = Worksheets("Feuil1").Range("A" & num)
'TextBox1 = "DA-2016-" & Format(counter + 1, "0000")
MsgBox "DA-" & Year(Date) & "-" & Format(Mid(counter, 9) + 1, "0000")
End Subcorrection :
rebonjour
[code]Sub TEST2()
Dim num As Integer
Dim counter
num = Range("A65536").End(xlUp).Row ' la dernire ligne
counter = Worksheets("Feuil1").Range("A" & num)
TextBox1 = "DA-2016-" & Format(Mid(counter, 9) + 1, "0000")
MsgBox "DA-" & Year(Date) & "-" & Format(Mid(counter, 9) + 1, "0000")
End Sub[/code]
alors nous avons
Sub TEST2()
Dim num As Integer
Dim counter
num = Worksheets("Feuil1").Range("A65536").End(xlUp).Row ' la dernire ligne
counter = Worksheets("Feuil1").Range("A" & num)
TextBox1 = "DA-2016-" & Format(Mid(counter, 9) + 1, "0000")
MsgBox "DA-" & Year(Date) & "-" & Format(Mid(counter, 9) + 1, "0000")
End Sub, elles effacent les précédentes. J'ai jamais eu ce problème avant !
/ La ComboBox marche mais la sélection ne s'affiche pas la base de données
vous avez mais aucun qualificateur, l interface va se relier la feuille active quelque soit alors penser a :
' Worksheets("Feuil1").Range("A65536").End(xlUp).Row ' la dernire lignealors si la première partie de ton problème est résolu
SVP REPOSTER LES AUTRE QUESTIONS A NOUVEAU
Bonjour,
Merci beaucoup pour ton aide.
Mais je n'arrive pas. J'insérer et j’adapte un peu et rien. Si pour toi ça marche c'est en le faisant sur mon fichier ? Car dans mon fichier ça ne marche pas. Si toi ça marche pourrait tu essayé de le mettre dans mon fichier ? Je pense qu'il y a quelque chose qui doit gêner ...
C'est bien la dernière proposition que je dois prendre ?
De plus, je dois insérer où ce code exactement :
' Worksheets("Feuil1").Range("A65536").End(xlUp).Row ' la dernire lign
pour que je n'ai plus ces problèmes :
- elles effacent les précédentes. J'ai jamais eu ce problème avant !
- / La ComboBox marche mais la sélection ne s'affiche pas la base de données
Je te remercie et je te souhaite une excellente journée.
Mjulie
Bonjour,
Il est préférable d'adopter pour tes tableaux un des formats de tableaux prédéfinis Excel.
Dans mon modèle j'ai adopté ce type de tableau qui procure de grandes facilités de programmation.
Par ailleurs le système de numérotation que tu proposes à 2 inconvénients :
- Il est très difficile d'incrémenter correctement le N° suivant.
- Il permet éventuellement la saisie de doublons
J'ai donc modifié la colonne A qui sera désormais numéroté de 1 à N+1
Toutefois un format personnalisé permet de maintenir une codification visuelle comme tu le demandes (AD-2016-0001)
mais si tu regardes la barre de formule le N° correspondant est bien 1, 2, 3...
Par suite le numéro suivant sera toujours (en petit nègre...)
= MAX(ColonneA) +1
Tu me suis ?
Dans ton USF, il n'y a aucun intérêt à afficher ce N° au moment de la saisie puisque ce N° n'est nécessaire que si tu valides l'enregistrement. De plus il pourrait être involontairement modifié, ce qui n'est pas vraiment souhaitable.
Alors je l'ai quand même affiché dans un TextBox non modifiable, (pour te faire plaisir !) mais je ne m'en sers pas...
En réalité c'est le bouton de validation qui écrit le vrai N° dans la colonne A et qui met en forme la cellule comme désiré.
Pour le Combo j'ai rajouté la ligne KIVABIEN...
Tu me diras si ça te va ensuite on passera à la question suivante...
A+
Bonjour Galopin01 !
C'est super c'est comme dans mes rêves ainsi !
Je comprends presque tout sauf l'utilité de "Private Function" :
Private Function NEWNO()
NEWNO = WorksheetFunction.Max(Range("Tableau2").Resize(, 1).Count) + 1
End Function
Si à l'occasion tu peux m'expliquer (ou me re-expliquer)
J'aime bien l'idée que le demandeur puisse voir sa numérotation. Comme une sorte de ticket
En tout cas, tel que c'est parfait pour moi et ça répond à 100% à mes attentes pour le USF1 !!!!
Si jamais tu peux jeter un œil pour le USF3 ça serait super
Encore merci pour ton aide.
Je te souhaite une excellent soirée.
Mjulie.
bonsoir,
Cette fonction est appelée 2 fois par le USF (1 fois pour afficher dans le USF ton N° de dossier + 1 fois à la sortie du USF car c'est surtout à ce moment là qu'on a besoin du N°)
Cette fonction ne comporte qu'une ligne que j'aurais bien pu insérer dans le CommandButton1_Click et dans le Initialize mais cela aurait rendu le code confus et illisible aussi je préfère créer cette fonction qui est déclarée Private car elle ne concerne que le USerForm.
La V2 concerne le USerform3
Tu remarqueras que j'ai préféré créer un Private Sub InitCombo() appelée par le Initialize plutôt que de tout mettre dans le Initialize en effet il est préférable de décomposer le type de tache qu'on exécute à ce stade.
L'initialisation des Combos est souvent une des dernières opérations qu'on effectue dans le Initialize aussi j'ai pris l'habitude le détacher... C'est aussi une manière habile de segmenter les problèmes... pour pouvoir rechercher ses erreurs rapidement !
Il n'y a pas grand chose d'autre à dire pour ce USF vu que là encore c'est juste de la saisie. Tu ne récupères aucune info dans ce Combo.
A noter que j'ai implanté un contrôle de saisie pour la date : Impossible de quitter le formulaire tant qu'on n'a pas mis une date valide !
A+
Coucou Galopin01,
Encore parfait ! Je comprends mieux en te relisant. C'est formateur ! Je te remercie c'est génial rien à dire !
Maintenant, pour que mon projet soit parfait, il me manque plus que le USF4
MERCI MERCI pour ton aide j'adore trop le code VBA !
Est-ce que tu aurais des conseils à me donner maintenant que c'est bientôt terminé ? Au cas ou
Je te remercie et je te souhaite une excellente soirée !!
Mjulie.
Bonsoir,
Pour le USF4 c'est exactement comme pour le USF3
Tu nourris ton Combo dans le Initialize en appelant le même InitCombo
Et dans le combo_Click tu récupères le ListIndex qui était dans le Bouton "Enregistrer" pour déterminer la ligne concernée.
Ensuite c'est juste un petit puzzle pour ramener la bonne colonne dans le TextBox KIVABIEN.
Je t'ai juste ébauché le truc pour te permettre de jouer avec...
Des conseils ? Mon Dieu... tout reste à faire ! Il faut coder, coder et encore coder pour être certaine que les saisies que tu enregistres sont bien formatées que les dates sont bien des dates et les nombres des nombres...
En somme tu viens juste de commencer, quoi !
Je t'ai glissé quelques indications ici et là... Je préfère que tu demandes là ou c'est un peu compliqué pour toi, par ce que rien qu'avec ça je peux t'en faire un livre...
Bon Dimanche.
A+
[Edit] C'est un peu du gaspillage de créer 3 USF pour gérer exactement la même chose. La Recherche, Saisie, Consultation, Modification et la Suppression d'une ligne se font habituellement avec le même Userform. (ça évite d'avoir à programmer 4 ou 5 fois le même USF...)
Si j'en ai le temps je te ferais une démo... Pour cela j'ai besoin de savoir ou mettre la date de demande et le type d'analyse. (Coté demande ou coté analyse ?)
Bonjour Galopin01,
Je te remercie c'est parfait ! C'est ce que je cherchais à faire !
Concernant ta question sur mes USF : Pour cela j'ai besoin de savoir ou mettre la date de demande et le type d'analyse. (Coté demande ou coté analyse ?)
C'est 2 colonnes sont à part effectivement.
- Pour la date de demande, je voulais juste mettre ce type de formule excel : =SI($K5="";"";SI(X5<>"";X5;AUJOURDHUI()))
- Pour la dernière je ne sais pas encore ... J'ai besoin de concerter une collègue demain quant à l'utilité de cette colonne ... J’hésite.
Je te remercie beaucoup ! Je vais travailler dessus et je te monterai sur la fin pour avoir ton avis si tu veux bien ?
Je te souhaite un excellente soirée et encore merci pour ton aide.
Mjulie.
Bonsoir,
Cette formule est un non sens ! Ou il y a une date ou il n'y en à pas...
Pas de souci. Tu reviens quand tu veux !
A+
Bonjour Galopin01,
Cette formule marche parfaitement dans un autre de mes fichiers.
Juste une petite question. Je voulais montrer à ma collègue le rendu de ce que j'ai déjà mais à l'ouverture du USF2 (menu) j'ai ce message d'erreur (voir imprim écrant en pièce-jointe).
Je n'avais pas ce problème chez moi mais sur mon lieu de travail oui
Tout marche bien si j'ouvre USF par USF, mais pas si je passe par le USF 2
Merci beaucoup ! Je te souhaite une excellente journée
PS : Ma collègue adore
Mjulie
Bonjour,
Le message n'a pas un grand intérêt : Il faut accepter le débogage et dire quelle est la ligne qui est surlignée.
La formule non plus n'a pas un grand intérêt quand on a une interface potable il n'y a aucun intérêt à glisser une formule qui parasite ton tableau pour... pas grand chose ! (même si elle ne produit pas d'erreur.)
Pour le Fun, je te joins le Tout en Un que j'ai concocté. Il est loin d'être terminé, mais quand même déjà fonctionnel. On pourrait encore lui ajouter de nombreuses gâteries, mais c'est juste pour te donner des idées...
Nota : Quand on rentre dans un champs date il est obligatoire de saisir une date valide.
A+
Bonsoir !
Merci beaucoup ! Ecoute j'adore ! Je n'avais jamais pensé qu'il était possible de faire ce type de boutons
Ok pour le message d'erreur, surtout que l'erreur soulignée jaune c'était "UserForm1.show" pour ouvrir les USF. Maintenant qu'il y a plus q'un seul USF, je n'aurai plus ce problème ! car j'opte pour ta proposition
Merci beaucoup !
Petite question, est-ce qu'il existe un code pour imprimer seulement une sélection de textBox et label ? Car j'en ai un mais je voudrais ne pas imprimer les boutons sur le côté (je voudrais remettre ce Bilan à mon directeur pour approbation à la fin des analyses) ...
Je te souhaite une excellente soirée ! Encore merci
Mjulie
A vrai dire je n'en sais rien : Chacun sa spécialité...
Perso ça ne me servirai à rien : YAKA faire un imprimEcran : Ensuite tu colles ton imprimEcran dans une feuille Excel vierge et YAPUKA le détourer...
YFO pas 30 secondes pour imprimer ce que tu as besoin :. Pourquoi se casser la tête à chercher un code !
YAKA définir ta zone d'impression et appuyer sur le bouton !
A+
Bonjour Galopin01,
Je n'avais pas restester de faire une nouvelle demande "NOUVEAU" ou de la modifier "MODIFIER" avec ta dernière proposition.
Je viens d'essayer et j'ai des messages d'erreurs (cf.en pièce jointe). Puis ces deux fonctions de marchent plus.
Aussi, est-ce qu'il est possible pour le "nouvelle demande", de ne pas voir apparaitre le Fram "Analyse" ? Car ce n'est pas le demandeur qui va remplir cette partie mais nous. Je voudrais pouvoir la remplir que quand je vais faire "Modifier" (je renommerai ce bouton par Analyse et modification de la DA).
Je te remercie et je te souhaite une excellente journée
Mjulie
Bonjour,
Ton fichier modifié. Les erreurs proviennent du fait que je ne savais pas trop quelle attitude adopter vis à vis des colonnes 14, 15, 24 et 25. Finalement je ne me suis pas occupé du tout des colonnes 14 et 15 (inutiles puisque la 13 fait le même boulot et les colonnes 24 et 25 sont intégrées en l'état.
Les modifications concernent uniquement le Code du USF.
Compte tenu du grand nombre de modifications, je te conseille de copier/coller tout le Code du USF sur ton fichier de travail. (pour écraser l'ancien code en totalité)
A+
Hello,
J'ai un problème qui persiste lorsque je veux faire un nouveau enregistrement.
Le problème d'exécution 13 se passe à la dernière ligne :
Private Sub WriteRecord(ByVal RecordNumber As Long)
' Ecriture de l'enregistrement
Me.cboDemande.ListIndex = -1
RecordNumber = RecordNumber + 1
With rng
With .Cells(RecordNumber, 1)
If Len(.Value) = 0 Then ' ID
.Value = Application.WorksheetFunction.Max(rng.Columns(1)) + 1
.NumberFormat = """AD-2016-""0000" ' Format
End If
End With
.Cells(RecordNumber, 2) = Me.TextBox1
.Cells(RecordNumber, 3) = Me.TextBox2
.Cells(RecordNumber, 4) = Me.TextBox3
.Cells(RecordNumber, 5) = Me.TextBox4
.Cells(RecordNumber, 6) = Me.TextBox5
.Cells(RecordNumber, 7) = Me.TextBox6
.Cells(RecordNumber, 8) = Me.TextBox7
.Cells(RecordNumber, 9) = Me.TextBox8
.Cells(RecordNumber, 10) = Me.TextBox9
.Cells(RecordNumber, 11) = Me.TextBox10
.Cells(RecordNumber, 12) = IIf(Me.TextBox11 <> "", CDate(Me.TextBox11), "")
Et lorsque je veux modifier, même problème mais :
.Cells(RecordNumber, 24) = IIf(Me.TextBox12 <> "", CDate(Me.TextBox12), "")
Est-ce que tu peux m'aider à voir ce qui pose problème ?
Je te remercie et je te souhaite une bonne soirée
Mjulie
bonsoir,
Difficile de dire... Je n'ai pas d'erreur ! ça concerne les TextBox 11 et 12 qui doivent contenir une date.
C'est d'autant plus étonnant que j'ai mis un contrôle de saisie dans ces 2 TextBox.
Ce contrôle vérifie que tu as bien saisie une date, et ce n'est pas lui qui renvoie une erreur car il se borne à te renvoyer sur le Textbox en effaçant la saisie erronée. De plus dans ces TextBox tu ne peux saisir que des chiffres et /
Je ne peux guère faire mieux pour te mâcher le boulot !
Erreur 13 signifie que VBA ne reconnaît pas ta saisie comme une date :
Qu'as tu donc saisi dans ces TextBox ? (il faut saisir une date sous la forme JJ/MM/AAAA)
A+
Bonsoir,
Excuse-moi ! Je sais pourquoi ! Car à un moment de mes tests, je n'avais pas rempli la totalité du USF. Et les textebox 11 et 12 attendaient des dates et pas "rien"...
RAS ! Désolé ! En plus les premiers j'avais tout rempli et la d'un coup ce message d'erreur ... Je ne comprenais pas.
En tout cas un grand merci pour ton aide.
Je valide carrément ton aide sur mon sujet.
Je te souhaite une excellente soirée !
Mjulie