Formulaire de requetes

Bonjour le forum,

Je suis ici a nouveau pour demander de l'aide pour la partie VBA d'un excel.

Je suis occupé sur un fichier de communication inter équipe pour des projets à créer-réaliser.

Dans celui-ci j'ai déjà créé une table, des droplist et un userform (basic) mais je n'ai aucune idée de par ou commencer, ni comment faire le quart de la moitier de ma demande.

Pourriez-vous m'aider SVP (je joint le fichier commencé)

pour résumer le contenu et essayer d'être le plus clair possible:

- Date IN sera mis lorsque la demande est introduite

- Priority à selectionner parmis 3 choix (high, middle et low) --> dans un droplist

- Title qui sera utilisé pour nommer des sheets

- Description pour la description de la demande

- requested by, le commanditaire --> dans un droplist

- For PM, le PM --> dans un droplist

- Designer in charge, le designer --> dans un dorplist

- PN, numéro de projet

- Status --> dans un droplist

- Date "In progress" et "Completed" mise automatiquement lord du choix dans le droplist précédent

- Extra comments pour lister les communications

Principe de fonctionnement :

1/

Lorsqu'une demande dois être envoyée, on clique sur le bouton qui ouvre un userform à remplir avec la base :

- Date IN en automatique

- prio par defaut sera "low" mais que l'on peux modifier

- Title (avec peut-être une vérification que ce n'est pas trop long pour un sheet)

- Description

- Requested By en auto avec le "environ (username)" par exemple

Lorsque l'on clique sur OK dans le urserform tout se retrouve dans le fichier excel "overview" et un nouvel onglet est créé avec comme nom le "title" (on peux éventuellement immaginer pour ne pas avoir 2 fois la même chose insérer une colonne "Request nr" dans le tableau et prendre cela comme nom de sheet avec incrémentation automatique)

La colonne "title" contiendra aussi un lien vers le sheet en rapport dans lequel on viendra placer les commentaires, copies d'écran et autres infos

2/

Quand le projet est pris en charge, le designer double clique ou selectionne son nom dans "Designer in charge" et selectionne le PM

le status change en "in progress" et la date est mise dans "date in progress"

3/

Lorsque le designer en charge à fini il sélectionne le status "completed" et la date completed s'inscrit

Un grand merci d'avance pour votre aide

Bonjour,

Voici un lien pour effectuer un Userform basique qui te conviendra pour la création de ton UserForm sous VBA : BLOG CELLULE EXCEL

Effectue cette démarche et on t'aidera, je pense, pour le reste....

Bonjour et1000lio,

merci pour le lien, j'avais déjà commencé qun userform mais je vais regarder pour le développer plus.

Je reviens plus tard avec quelque chose de plu avancé.

Bonjour le forum,

me revoici avec un formulaire qui ressemble plus à quelque chose de fini (je modifierai les couleurs par la suite)

Petite modification dans ma demande initiale : tout passe par le formulaire.

En cas d'extra commentaire l'utilisateur entrera la date, son nom et le commentaire dans le formulaire, sela créera une nouvelle ligne dans la dernière colonne de l'overview.

par exemple :

01-03-24 * User.01 * commentaire final

23-02-24 * User.03 * commentaire 01 réponse

12-02-24 * User.01 * commentaire 01

Merci d'avance

Bonjour Heavy_B

Voici le code pour alimenter quelques listes déroulantes (COMBOBOX) dans le formulaire. Merci de compléter les autres listes déroulantes sur cette base

Private Sub UserForm_Initialize()
Dim i As Integer

For i = 3 To Sheets("PN request overview").Range("C65536").End(xlUp).Row
ComboBox1 = Sheets("PN request overview").Range("C" & i)
If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("PN request overview").Range("C" & i)
Next i
Me.ComboBox2 = ""

For i = 3 To Sheets("PN request overview").Range("G65536").End(xlUp).Row
ComboBox4 = Sheets("PN request overview").Range("G" & i)
If ComboBox4.ListIndex = -1 Then ComboBox4.AddItem Sheets("PN request overview").Range("G" & i)
Next i
Me.ComboBox2 = ""

For i = 2 To Sheets("Drop list").Range("E65536").End(xlUp).Row
ComboBox2 = Sheets("Drop list").Range("E" & i)
If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem Sheets("Drop list").Range("E" & i)
Next i
Me.ComboBox2 = ""

For i = 2 To Sheets("Drop list").Range("G65536").End(xlUp).Row
ComboBox3 = Sheets("Drop list").Range("G" & i)
If ComboBox3.ListIndex = -1 Then ComboBox3.AddItem Sheets("Drop list").Range("G" & i)
Next i
Me.ComboBox3 = ""

For i = 2 To Sheets("Drop list").Range("A65536").End(xlUp).Row
ComboBox7 = Sheets("Drop list").Range("A" & i)
If ComboBox7.ListIndex = -1 Then ComboBox7.AddItem Sheets("Drop list").Range("A" & i)
Next i
Me.ComboBox7 = ""
End Sub

Ci-joint le fichier avec l'userform partiellement programmé car j'ai des données dans l'userform et le fichier que je ne comprends pas.... stype Search by PN

Bonjour et1000lio et déjà un grand merci pour le travail fait.

En m'inspirant de ce que tu avais déjà fait j'ai complété pour les combobox11, 10 et 6 ainsi que pour le combobox5 (search by PN) --> PN pour Project Number qui se compose de 6 chiffres, un point, 3 chiffres (d'ou la mise en forme "texte" afin de garder la séquence).

J'ai essayé le fichier et cela m'as l'air prometteur mais

- je vois que la nouvelle ligne se place à la dernière ligne du tableau, est-il possible de l'insérer à la première ligne afin d'avoir tojours les demandes les plus récentes visible directement?

- je vais voir si le bouton de suppression est nécessaire

- je vois que l'addition d'un commentaire extra écrase l'ancien, pense tu qu'il est possible d'ajouter à la suite?

Désolé de ces questions, si j'ai déjà une base ou un exemple je me débrouille pour avancer mais je ici je suis dans l'inconnu...

- je vois que la nouvelle ligne se place à la dernière ligne du tableau, est-il possible de l'insérer à la première ligne afin d'avoir tojours les demandes les plus récentes visible directement?

OK programmé et tri en fonction de la date la plus récente en colonne A

je vois que l'addition d'un commentaire extra écrase l'ancien, pense tu qu'il est possible d'ajouter à la suite?

Je t'ai ajouté un label juxtaposé à tes données Extra Comment qui reprend tout l'historique des données commentaires. Tu renseignes et tu cliques sur modifier. J'ai quelque peu agrandi ton Userform.

Merci pour la modification,

Génial pour les données extra, je viens de regarder le code et je vois un "textbox10", mais je ne le trouve pas dans le userform, tu sais m'en dire plus stp?

Et j'ai regardé pour mettre le nouvel extra-comment en haut au lieu d'a la suite, mais je ne vois pas comment faire en m'inspirant de ce que tu as fait, pourrais-tu me guider stp.

J'ai aussi ajouté la date du jour en auto dans "date IN", pourrais-tu me guider pour que les dates "in progress" et "completed" se mettent lorsque le status change car je ne vois pas comment ffaire stp

Encore merci pour ton aide

Bonjour Heavy_B

je viens de regarder le code et je vois un "textbox10", mais je ne le trouve pas dans le userform, tu sais m'en dire plus stp?

La Textbox10 est caché sous le label "COMMENTAIRES".

Et j'ai regardé pour mettre le nouvel extra-comment en haut au lieu d'a la suite, mais je ne vois pas comment faire en m'inspirant de ce que tu as fait, pourrais-tu me guider stp.

Je ne comprend pas ?

J'ai aussi ajouté la date du jour en auto dans "date IN", pourrais-tu me guider pour que les dates "in progress" et "completed" se mettent lorsque le status change car je ne vois pas comment ffaire stp

Tu peux programmer

Private Sub ComboBox3_Change()

mais je préfère que les dates s'insère dès lors que l'on quitte la Combobox3 de la manières suivante

Private Sub ComboBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Me.TextBox6.Value = Date
Me.TextBox7.Value = Date
End Sub

Bonjour et1000lio,

merci pour la "mise à jour"

1/ j'ai adapté les quelques lignes de code fournie pour les adapter à l'utilisation (et j'ai pris le "change" afin que ce sois plus visuel... :

Private Sub ComboBox3_Change()
If ComboBox3.Value = "In progress" Then
Me.TextBox6.Value = Date
End If
If ComboBox3.Value = "Completed" Then
Me.TextBox7.Value = Date
End If

End Sub

2/ Pourrais-tu me dire à quoi sert ceci dans le code : (si je comprend bien c'est pour forcer le "." dans la suite de chiffre mais je ne suis pas certain...)

Private Sub Textbox5_Change()
Dim Valeur As Byte
TextBox5.MaxLength = 10
Valeur = Len(TextBox5)
If Valeur = 6 Then TextBox5 = TextBox5 & "."
End Sub

3/ En ce qui concerne les comments extra, je voudrais que le plus récent "extra coments" se trouve sur la première ligne dans le textbox10, comme fait pour la demande la plus récente dans le fichier

OK c'est très bien... je n'avais pas compris que le fonctionnement alimentait l'une ou l'autre textbox en fonction du choix de la liste déroulante. :)

je n'y connais pas grand chose mais j'essaye de me débrouiller...

Private Sub Textbox5_Change()
Dim Valeur As Byte
TextBox5.MaxLength = 10
Valeur = Len(TextBox5)
If Valeur = 6 Then TextBox5 = TextBox5 & "."
End Sub

Ce code permet de saisir les 6 premiers chiffre puis la macro ajoute un point et tu continue la saisie des trois dernier chiffre.

Un peu comme si tu avais une saisie forcée pour taper les numéros de téléphone avec des espaces intermédiaires exemple de saisie forcée de numéro de téléphone avec des espaces

Private Sub TB8_Change()
Dim Valeur As Byte
TB8.MaxLength = 14
Valeur = Len(TB8)
If Valeur = 2 Or Valeur = 5 Or Valeur = 8 Or Valeur = 11 Then TB8 = TB8 & " "
End Sub

3/ En ce qui concerne les comments extra, je voudrais que le plus récent "extra coments" se trouve sur la première ligne dans le textbox10, comme fait pour la demande la plus récente dans le fichier

Tu inverses le code tout simplement

Private Sub TextBox8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim DModif As String ' Déplacez cette ligne ici
Dim NDonnees As String
If TextBox10 <> "" Then
    DModif = Me.TextBox10 & Chr(13)
End If
NDonnees = Me.TextBox9.Value & " - " & Me.ComboBox11.Value & " - " & Me.TextBox8.Value
Me.COMMENTAIRES = NDonnees & Chr(13) & DModif
Me.TextBox10 = NDonnees & Chr(13) & DModif
End Sub

je vais essayer cela...

j'essaye aussi qu'un sheet soit créé lorsque l'on insert une nouvelle ligne et qu'un lien soit créé vers ce nouveau sheet

Pour l'insertion j'ai essayé de mettre

Sheet.Add.Name = Range("C3").Value

ou

Sheet.Add.Name = Me.TextBox2.Value

à la fin de la sub du bouton insérer (entre le msgbox donnée insérée et le unload me) mais apparemment il me dis que la variable n'est pas définie... quelle variable?

J'ai créer un onglet nommé "MODELE" qui est caché afin que les ulisateurs ne modifient pas l'ergonomie de cet onglet. Le bouton INSERT duplique l'onglet "MODELE" et lui donne le NOM de la Textbox2. Ci-joint le fichier.

Génial,

ne reste plus qu'as ce que la cellule C3 de la nouvelle ligne aie un lien avec le nouveau sheet,

j'ai essayé d'ajouter le code suivant après avoir caché le modèle (avant la mise à 0 du userform) mais je pense que je loupe un truc :

ActiveCell.Hyperlinks.Add anchor:=Selection, Address:="", SubAddress:=TextBox2.Value & "!A1", TextToDisplay:=TextBox2.Value

Bonjour,

Remplace le code du CommandButton3 par le code ci-après

Private Sub CommandButton3_Click()
    Dim Ligne As Integer
    Dim I As Integer
    Dim ctrls As Variant
    Dim wsModele As Worksheet
    Dim wsOverview As Worksheet

    ' Renseigner l'onglet "PN request overview"
    If MsgBox("Etes-vous certain de vouloir INSERER ces données ?", vbYesNo, "Demande de confirmation") = vbYes Then 'condition : si oui au message
        ' Permet de se positionner sur la dernière ligne de tableau NON VIDE
        Ligne = Sheets("PN request overview").Range("a65536").End(xlUp).Row + 1

        ctrls = Array(Me.TextBox1, _
                        Me.ComboBox2, _
                        Me.TextBox2, _
                        Me.TextBox3, _
                        Me.ComboBox10, _
                        Me.ComboBox6, _
                        Me.ComboBox7, _
                        Me.TextBox5, _
                        Me.ComboBox3, _
                        Me.TextBox6, _
                        Me.TextBox7, _
                        Me.TextBox10)

        For I = 1 To 12
             ws.Cells(Ligne, I) = ctrls(I - 1).Value
             ws.Cells(Ligne, 8).NumberFormat = "@"
        Next I
    End If

    ' Créer un lien hypertexte sur la Cells(Ligne, 3) avec la valeur de la Textbox2
    Set wsOverview = ThisWorkbook.Sheets("PN request overview")
    wsOverview.Hyperlinks.Add Anchor:=wsOverview.Cells(Ligne, 3), Address:="", SubAddress:=TextBox2.Value & "!A1", TextToDisplay:=TextBox2.Value

    ' Créer un nouvel onglet sur la base du modèle
    Set wsModele = ThisWorkbook.Sheets("MODELE")
    wsModele.Visible = True
    wsModele.Copy , Worksheets(Worksheets.Count)
    Sheets("MODELE (2)").Move , Worksheets(1)
    Set ws = Worksheets("MODELE (2)")
    ws.Name = TextBox2.Value ' Remplacez "TextBox2" par le nom de votre TextBox
    wsModele.Visible = xlSheetVeryHidden

    ' Trie les données par date la plus récente dans la colonne A
    Sheets("PN request overview").Range("A3:L" & Ligne).Sort Key1:=Sheets("PN request overview").Range("A3"), Order1:=xlDescending, Header:=xlNo

    Sheets("PN request overview").Activate
    Unload Me ' Vide et ferme l'Userform ( formulaire)
    UserForm1.Show
End Sub

Magnifique,

Un super grand merci pour ton aide !!

Dernière petite chose avant que je modifie le layout du fichier et y incorpore les données du fichier temporaire pour le mettre en service, est-il possible de faire les recherche via un mot inclus dans la case plutot que de devoir avoir le text depuis le début?

par exemple dans le titre Rue Machinchose Trucmuch, si je tape Machin par exemple il trouve la ligne?

Dès lors que tu recherches soit via

Search by
Search by designer in charge
Search by PN

tu peux accéder la première cellule (Colonne A) de la ligne que tu as recherchée via l'Useform. Donc petit code à insérer dans le programme de la Combobox1

With ws
.Cells(Ligne, 1).Select
End With

Code de la Combobox1 avec code intégré

Private Sub ComboBox1_Change()
Dim Ligne As Long
Dim I As Integer
Dim ctrls As Variant

   If Me.ComboBox1.ListIndex = -1 Then Exit Sub
  Ligne = Me.ComboBox1.ListIndex + 3

  ctrls = Array(Me.TextBox1, _
                Me.ComboBox2, _
                Me.TextBox2, _
                Me.TextBox3, _
                Me.ComboBox10, _
                Me.ComboBox6, _
                Me.ComboBox7, _
                Me.TextBox5, _
                Me.ComboBox3, _
                Me.TextBox6, _
                Me.TextBox7, _
                Me.TextBox10)

For I = 1 To 12
    ctrls(I - 1).Value = ws.Cells(Ligne, I)
Next I

Me.COMMENTAIRES = Me.TextBox10.Value

With ws
.Cells(Ligne, 1).Select
End With

 End Sub

Je t'avais fais un raccourci pour ouvrir l'Userform via CTRL + SCHIFT + F mais avec le code suivant tu peux ouvrir le formulaire en Double-cliquant sur une cellule de la colonne A. Donc suivant le code précédent tu peux accéder à la ligne, donc tu peux fermer le formulaire, et traiter manuellement des modifications sur la ligne. Si tu veux réouvrir le formulaire tu peut Double-cliquer sur la cellule en colonne A.

Code à mettre dans la feuille Sheet1(PN request overview) située dans le VBA

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim A As Variant
    Dim DerLigne As Long
    Cancel = True

    ' Trouver la dernière ligne non vide de la colonne A
    DerLigne = Cells(Rows.Count, "A").End(xlUp).Row

    If Not Application.Intersect(Target, Range("A3:A" & DerLigne)) Is Nothing Then
        A = ActiveCell.Offset(0, 2)
        UserForm1.ComboBox1.Value = A
        UserForm1.Show vbModeless
    End If
End Sub
Rechercher des sujets similaires à "formulaire requetes"