Formullaire Userform pour complèter un tableau

Bonjour,

Je travail actuellement sur un fichier qui me permet de piloter des projets. Cependant, je bloque sur un point qui m'empêche de finir la création de ce fichier.

Je m'explique. Mon fichier est donc un tableau qui permet de suivres des projets. A chaque projet son attribués des sous projets.

PROJET 1 (sont ajoutés en colonne C)

  • --SOUS PROJET 1 (sont ajoutés en colonne D)
  • --SOUS PROJET 2
PROJET 2

---SOUS PROJET 1

J'ai un formulaire (USF) qui permet d'ajouter les projets. Celui là il est opérationnel et fonctionne très bien. Le formulaire complète ensuite les informations dans un tableau.

Je vous joint un fichier exemple qui explique clairement ma demande.

Merci de votre attention et de votre futur aide,

Mon problème concerne le formulaire (USF) pour les sous projet. Dans ce formulaire, j'ai créer une liste déroulante (ComboBox) afin de choisir le projet auxquel appartient le sous projet.

Ainsi, ce que je souhaite, c'est un code VBA qui permet d'ajouter les données du formulaire dans une nouvelle ligne. Cette nouvelle ligne s'ajouterai juste en dessous de la ligne du projet sélectionné dans la liste déroulante.

L'idée c'est de pouvoir insérer un Sous projet à n'importe quel moment. Car les formulaires complète de défaut la ligne suivante à chaque nouvel validation.

Bonjour,

La bonne méthode consiste à donner un index et un sous-index à tous tes projets. (rajouter 2 colonnes)

Pour le premier projet

index 1: sous index 0

Pour le second projet

index 2: sous index 0

Tous les sous projets auront le même index que le projet parent. mais un sous-index 1, 2...

Ensuite YAPUKA trier sur la colonne index puis sous-index...

Sinon tu vas rapidement enrager ta vie... parce rien ne relie actuellement tes projets et tes sous projets, juste une disposition qui n'est pas très pratique (au sens d'Excel)

A+

Bonjour,

Merci de vos conseils. J'ai très peu de connaissances en VBA. Mes formulaires j'ai réussi à les réaliser en prenant des bout de codes sur les différents sujet du forum. Du coup, pour cette partie un peu plus technique je sèche complètement et je ne savais pas comment procèder.

J'ai donc, rajouter ces deux colonnes : INDEX et SOUS INDEX au fichier joint.

Comment procèder pour la programmation du formulaire ?

Merci beaucoup,

Bonjour MaLuce, bonsjour le forum,

[Édition] : Entre temps tu as proposé un second fichier... Cette proposition est par rapport au premier fichier.

En pièce jointe ton fichier modifié avec le code ci-dessous :

Private O As Object 'déclare la variable O (Onglet)
Private LI As Long 'déclare la variable LI (LIgne)
Private TEST As Boolean 'déclare la variable TEST

Private Sub UserForm_Initialize()

'********************************************************************************************************
'propriétés de la ComboBox3 modifiées :
'ColumnCount = 2 ==> (2 colonnes  : Colonne 0 et Colonne 1)
'ColumnWidht = ;0 pt ==> (la largeur de la seconde colonne vaut 0 )
'cela signifie que l'on peut stocker deux données dans la ComboBox3 et que la seconde données est cachée
'********************************************************************************************************

Set O = Sheets("Sheet1") 'définit l'onglet O
ComboBox2.List = Array("Investigation", "En cours", "Clôturer")
'Boucle de 3 à la première cellule VIDE de la colonne C
For n = 3 To O.Cells(Application.Rows.Count, 3).End(xlUp).Row
    If O.Cells(n, 3).Value <> "" Then 'condition : si la celule n'est pas vide
        With Me.ComboBox3 'prend en compte la ComboBox3
            .AddItem O.Cells(n, 3).Value 'ajoute la valeur de la cellule dans la colonne 0 de la ComboBox3
            .Column(1, .ListCount - 1) = n 'récupère le numéro de ligne dans la colonne 1 de la ComboBox3
        End With 'fin de la prise en compte de la ComboBox3
    End If 'fin de la condition
Next n 'prochaine cellule de la boucle
End Sub

Private Sub ComboBox3_Change() 'au chagement dans la ComboBox3
With Me.ComboBox3 'prend en compte la ComboBox3
    LI = CInt(.Column(1, .ListIndex)) 'définit la ligne Li
End With 'fin de la prise en compte de la ComboBox3
LI = O.Cells(LI, 3).End(xlDown).Row 'redéfinit la ligne LI en le sous projet suivant
If LI = Application.Rows.Count Then 'condition : si LI est la dernière ligne de l'onglet
    LI = O.Cells(Application.Rows.Count, 2).End(xlUp).Row + 1 'redéfinit LI comme la ligne de la première cellule vide de la colonne B
    TEST = True 'définit la variable TEST
End If 'fin de la condition
End Sub

Private Sub CommandButton1_Click() 'bouton "Validation"
'si test est faux insère une ligne vide au niveau de LI, sinon redéfinit test à "FAUX"
If TEST = False Then Rows(LI).Insert Shift:=xlDown Else TEST = False
If TextBox5 = "" Or TextBox2 = "" Then
    MsgBox ("Vous devez remplir les champs")
    Exit Sub
End If
Cells(LI, 2) = ComboBox2
Cells(LI, 4) = TextBox5
Cells(LI, 4).Font.ColorIndex = 4
Cells(LI, 5) = TextBox2
Cells(LI, 6) = TextBox3
Cells(LI, 7) = TextBox4
Cells(LI, 8) = DTPicker1
Cells(LI, 9) = DTPicker2
Unload Me
End Sub

Le fichier :

109maluce-v01.xlsm (31.90 Ko)

I-M-P-E-C-A-B-L-E =)

C'est exactement ce dont j'avais besoin. Vraiment un très grand MERCI!!! En plus vous avez solutionner le problème des cellules vides dans la liste déroulante de la ComboBox !!

J'ai réussi à adapter la macro pour mon fichier. J'ai fait quelques essais et tout fonctionne bien. Si j'ai un problème je le signalerais

En revanche, j'appel mes formulaire avec deux boutons : est il possible de changer la coleur du texte et de fond ? (Dans les proprièté, en mode création j'ai aucune possibilité de modifier ces paramètres).

Encore merci,

J'ai réussi, merci beaucoup =)

Tout fonctionne très bien.

Sujet Résolu !

Bonjour,

Pour la route...

Bonne lecture !

Nota : Lors de la première utilisation il est possible que le classeur plante. (C'est lié à la protection anti macro)

Ferme le et réouvre le...

Ensuite tu pourras ouvrir le fichier sans problème.

A+

147maluce-vg.xlsm (41.12 Ko)

Ouuuah ! Alors là... Je suis imprésionné ! Je ne peux pas dire le contraire, la solution d'avoir qu'un seul USF est géniale. Le mode modification également. Sans oublier les listes déroulantes qui s'incrémentes au fure et à mesure...

J'ai bien compris vos remarques concernant la construction des tableaux.

Malheureusement, mon fichier de base est plus compliqué. Par conséquent je n'ais guère le choix à propos des lignes vides et de quelques colonnes inutiles...

Je me suis plongé dans votre code. C'est déjà d'un trop bon niveau pour moi, même si j'arrive non pas sans mal à me situer.

J'aimerai vraiment adapter cette proposition à mon fichier de base. Mais cela nécessiterais de faire des modifications dans la construction du code je pense ;

  • L'USF (projet - sous projet) doit pour la création se lancer par un bouton
  • La modification peut rester avec cette proposition : c'est TOP !!! (cliquer sur le projet ou sous projet)
  • Un sous projet s'inscrit en colonne D
  • Un projet s'inscrit en colonne E
(Malheureusement pas le choix pour ceci. Cela facilite la lecture des utilisateurs et permet de faire affichier/masquer les sous projet par un bouton)
  • L'USF commence de remplir le tableau à la ligne 12
  • Mon USF pour le vrais fichier est un peux plus complexe et permet de complèter d'autres champs.
(Cela ne pose pas problème, je vois comment l'ajouter)

Mon fichier est bien trop lourd, mais je joint des impréssions écrans pour que mes propos soit illustrés. Pour le formulaire, la partie basse est encore en création).

Bonjour,

Oui j'ai bien vu que tu lorgnais vers les modules de classe...

Malheureusement tu ne pourras guère tirer profit de mon travail, mais si ça peut te donner quelques idées, c'est déjà pas mal...

N'hésite pas à revenir.

Cordialement.

A+

Bonsoir,

Je vais essayer de me creuser la tête pour l'adapter à mon fichier. Surtout pour ne plus qu'avoir un seule USF !!

Est-il possible de incrémenter les projet dans une colonne et les sous projet dans une autre ?

Eventuellement en passant par deux TextBox :

  • Un qui s'affiche quand on sélectionne un projet
  • Un autre quand on sélectionne sous projet

Merci, et bravo pour le travail !

Bonjour,

ça ne pose aucun problème.

Dans le Initialize le :

TbProjet = Cells(iMEM, 3)

va devenir

TbProjet = iif Cells(iMEM, 2) > 0,Cells(iMEM, 4,Cells(iMEM, 3)

et dans le OkBtn_Click le :

Cells(iMEM, 3) = TbProjet

va remonter de quelques lignes dans :

If OBtnP Then

et dans le Else tu auras :

Cells(iMEM, 4) = TbProjet

Ceci dit si je peux me risquer à un commentaire ça ne facilite rien du tout.

Du point de vue de la lisibilité, la mise en surbrillance des projets structure bien suffisamment, (tu peux même mettre en surbrillance toute la ligne...)

et pour plier/déplier les sujets (L'enfer est pavé de bonnes intentions...)

Moi je ne ferais vraiment pas ça les innombrables boutons sont vraiment trop couteux en Ko (tu n'es pas en PHP : Il pèse déjà combien de Ko ton vrai fichier ? !

Au pire pour garder l'idée (plier/déplier) moi je ferais comme dans le fichier joint avec une police Wingdings 2 et les caractère Q-£ par exemple.

Sinon tu ne vas pas tarder à revenir dans le forum avec un titre du genre "Mon fichier est trop gros, trop lent...)

Mébon...

A+

16plidepli.xlsm (14.28 Ko)

Mon fichier fait 1,40MB.

Je ne peux que vous donner raison...

Votre solition de plier/déplier c'est exactement ce que je voulais réaliser au départ. Mais je n'y étais pas parvenus. Avec cette solution cele ne me gène pas d'avoir les PROJET et SOUS PROJET dans la même colonne. Dans mon cas je n'avais pas le choix que j'utilisais la colonne vide pour masquer les lignes avec une macro...

Tout ceci renforce un peu plus mon sentiment par rapport à Excel : vivement une formation me permettant de me rapprocher de votre niveau !

Du coup, en partant de ça, j'ai essayer d'adapter tout ça à mon fichier. En modifiant la struturation de mon fichier. Mais c'est un échec. Ca dépasse mes faibles compétences en VBA...

Bonjour,

1,40 Ko c'est pas rien ! enfin ça dépend si la bouteille est encore vide ou pratiquement pleine...

Il faut préciser pour quel nombre de lignes (in fine) et pour quel nombre de colonnes (gantt compris)

Le mieux est que tu m'envoies un exemplaire de l'original en essayant de dénaturer le moins possible.

Remarque : Tu n'es pas obligé de m'envoyer tous les projets. 2 ou 3 bien représentatifs de toutes les situations possible suffiront.

A cette fin je te met mon adresse e-mail privée en MP.

Il serait sans doute préférable que tu mettes le fichier chez un hégergeur (p.e. cjoint) et que tu me donnes le lien pour le télécharger parce que ce n'est pas sur qu'Outlook digère trop bien un fichier joint de ce genre...

De plus il faudrait m'envoyer un exemplaire de ton travail d'adaptation, (macro comprises) Mais déjà tu peux dire adieu aux colonnes E et U, vu que tout le système est basé sur le tri des index, il y a nécessité absolue que tout le tableau (gantt compris) soit en un seul bloc.

Bon je ne te promet rien : Comme tu sais les retraités sont des gens bien occupés et je ne fais pas exception... Mais au moins on parlera de la même chose...

Cordialement

A+

Le mail est envoyé. J'explique tout dans celui-ci.

Un grand merci =)

PS : Je pense à ce détail à l'instant : Le GANTT est pour le moment sur un cycle d'une année (à peu près il me semble). Si demain je souhaite avoir un cycle de deux ans cela posera problème ?

Si oui, ce n'est pas un problème, j'ajouterais une feuilles avec un GANTT plus détaillé !!

Bonsoir,

Bien reçu,

Nous continuerons néanmoins la conversation sur ce fil autant que possible, c'est plus facile pour suivre l'ensemble.

Déjà pour t'éviter de perdre du temps, il ne peut pas y avoir 2 macros Worksheet_SelectionChange, c'est donc la première chose à modifier il faut arriver à regrouper les 2.

Je n'ai pas eu le temps d'y réfléchir pour l'instant : J'y verrai un peu plus clair après le gastro. Je réfléchi mieux avec le ventre plein !

Comme il y a nécessité d'une continuité entre le tableau et le gantt, provisoirement je suggère de marquer n'importe quoi en X10 "Bidon" ou "galopin" conviendront parfaitement... ensuite tu peux masquer la colonne ou mettre une couleur de police blanche si tu préfères.

Les colonnes masquées qui contiennent des formules ne sont pas génantes. par contre il y nécessité de différencier les en-têtes des colonnes Q et T. Comme elles sont cachées ce n'est pas bien compliqué :

NbrJQ et NbrJT conviendront parfaitement.

Même remarque pour les colonnes R-V et S-W : Là il faudra jouer plus fin : Je t'expliquerai plus tard. Pour l'instant ça peut attendre...

Pour la suite ce sera tout à l'heure.

Tu n'as pas répondu sur le contenu réel du fichier ça tournera toujours plus ou moins autour de 150 lignes, ?Est-ce la situation actuelle, ou cela peut-il évoluer dans le temps ?

A+

Re-Bonsoir,

Pas de problème, continuons la discussion sur le forum

Pour la colonne X : Galopin fera très bien l'affaire je vous l'accorde !!

J'avais tellement la tête dans le fichier que je n'avais même pas remarqué à propos des deux macros Worksheet_SelectionChange.

Pour ce problème, je vais vous simplifier la tâche : on peut supprimer la mienne. Si c'est possible, la colonne V prendra la même valeur que la colonne R par l'intermédiaire de la ComboBox : DateD. En revanche, il faudra laisser la possibilité à l'utilisateur de modifier la date en colonne V.

Oui, j'avais volontairement brider le tableau à 150 lignes. Pour me laisser un peu plus de marge, nous pouvons le gonfler à 200 lignes. (C'est déjà énorme, mais sait-on jamais

Ne vous privez surtout pas ! Bon restaurant

PS : j'avais fait l'effort de renommer tous les éléments de l'UserForm 1 comme vous l'avez fait dans le fichier que vous m'avez envoyé.

Cependant, j'ai remarqué que certain éléments n'ont pas été enregistrés :

  • Date de départ
  • Processus
  • bouton sous projet

bonjour,

Le nombre de ligne n'est pas très important, c'est juste indicatif.

Dans l'immédiat EN PRIORITE ce qu'il faut faire c'est insérer une colonne pour tes pseudo boutons (Plier Déplier)

Après essai il m'a semblé que la meilleure colonne était la colonne C et il faut déplacer la colonne statut (en E peut-être)

Merci de confirmer rapidement car ça conditionne tout l'adressage de la programmation.

Il y a également un hypothèse qu'il faut fixer tout de suite c'est le sort des colonnes A et B Sachant qu'elles n'ont pas vocation à être connu des utilisateurs il me semble qu'elles peuvent être masquées.

Qu'en penses-tu ?

Le déplacement de la colonne Statut n'est pas anodin et le masquage de A-B ne sont pas non plus un caprice :

Rappelle-toi que l'affichage du USF est actuellement commandé par un clic sur une des 4 premières colonnes.

Ce n'est pas souhaitable compte tenu de l'usage qu'on compte faire de la colonne B et la colonne "Statut" est là un peu comme un cheveu sur la soupe. Son décalage vers la droite est logique : On met à gauche les info les plus importantes.

De plus cela offrira un avantage indéniable : l'affichage du USF sera déclenché par le clic sur la seule colonne D

Regarde sur mon brouillon, tu verras que du point de vue ergonomique c'est imparable...

La plupart des macros sont inhibées sauf le switch Plier/Déplier)

On peut même envisager un Plier/Déplier global (par sélection en C10 !)

J'ai supprimé le DTPicker5 et la macro correspondante. Le moment venu je t'en donnerai un "aux petits oignons"

J'ai un peu bricolé ton Gantt : voir aussi les formules en colonne Z ligne 6 à 11 (les lignes 3 et 4 sont supprimées)

C'est important car en programmation mes formules sont plus digestes...

J'ai aussi renommé la feuille "Suivi" ça donne plus de lisibilité aux formules. En période de construction c'est important : Après, (pour l'exploitation) tu pourras bien l'appeler comme tu voudras c'est sans importance...

Si tu es Ok pour tout je m'attaque au plat de résistance. (le débogage...)

A+

Salut Galopin,

Je viens de lire ton post. Je regarde les différents points avec le fichier que tu m'as envoyé dans ma boite mail et je réponds juste après.

En attendant, sache que la publication du fichier sur l'hébergeur ne pose aucun problème. Si ce travail peut aider d'autres personnes, tant mieux !

Il est préférable en effet de masquer les colonne A et B.

La position de la colonne "statut" me conviens parfaitement. Nous avons l'habitude de travailler avec ce genre d'information le plus à gauche possible, mais la colonne E me paraît très bien.

Pour le plier/déplier global en C10 : Oui, ce serait TOP !!

J'ai remarqué la modification des formules et j'ai étudié le détail en faisant CTRL+F3. Cela doit soulagé le fichier, même si les formules sont plus complexes pour moi.

La formules pour le nombre de jour, en colonne U a également changée non ?

C'est maintenant que je remarque qu'il manque la date dans le GANTT.

Si en dessous du jour (L,M,M,J,V,S,D) on peut encore y placer la date (1,2,3,4,5,6,7) je serais ravi !

Merci,

Bonjourn

Si en dessous du jour (L,M,M,J,V,S,D) on peut encore y placer la date (1,2,3,4,5,6,7)...

Hum... C'est difficile mais ça m'arrange ça facilite les formules du gantt :

On est obligé d'augmenter considérablement la largeur des colonnes (19) ou de mettre la police taille 7

Qu'est-ce que tu décides ?

Fichier joint

Rechercher des sujets similaires à "formullaire userform completer tableau"