Optimisation de Code VBA

Bonsoir,

voici un loiciel de suivi pour de projets sur sites.

Le logiciel fonctionne (je suis en bêta test) mais je voudrais rendre le code plus optimisé.

Il y a encore quelques choses que je voudrais faire mais je n'y parviens pas:

je voudrais assurer un suivi dans les extraction. C'est à dire pouvoir suivre au cours du temps les 5 indicateurs. a chaque extraction ou mise à jour, incrémenter la base de données pour pouvoir ensuite faire un graphique de suivi.

Il y a une autre difciculté où je suis bloqué: je voudrais calculer la durée des projets en fonction de la date de lancement et la date de fin prévue...

Je souhaiterais mettr eun textbox qui dennerai tout de suite l'information à l'utilisateur si le projet est en cours, clôturé ou en projet en fonction des dates de lancement prévue, réelle et des dates de fin prévue, réelle.

Il y a pas mal de bug à l'ouvertre, j'ai souvent un message d'erreur qui apparait juste avant que le userform ne soit chargé, m'indiquant que le chargement des calendriers à échoué.

Enfin, quand on clique sur la supprimer pour les sites, je n'arrive pas à supprimer tous les projets qui correspondent au site.

Merci d'avance pour votre!

Cordialement,

46suivi.xlsm (121.15 Ko)

Bonjour

Pourquoi veux tu supprimer une projet ou un site, ta base de données est vide

Il faudrait une base avec quelques projets et la manière pour en ajouter,en supprimer

Pour le moment il faut que l'on devine le mode d'emploi

Pour en supprimer on en choisit un dans la Combo et suppression ?

Pour un site pareil ?

Dans quel ordre le site puis le projet ou le contraire ?

Sont ils liés d'une manière ou d'une autre ?

Extraction : Tu veux une copie de ce que tu extrais ?

Où ?

Extraction ou mise à jour : C'est la même chose ?

En attendant : pour ton problème de DTPicker

Rajoutes dans la macro UserForm_Initialize

Private Sub UserForm_Initialize()

  '.
  '.
  Me.MultiPage1.Value = 0
  Init_CboxSite
  Init_Controls

End Sub

Surement d'autres questions à venir

Bonjour,

voici le fichier avec la BD remplie.

Quand on clique sur le bouton supprimer un site, je voudrai que dans lea BD, cela supprime toute les entrée avec le site en question. PAr exemple si on veut supprimer le site 56, on clique sur supprimer dans kl'userform et on supprime toutes les entrées dans le BD en supprimant les ligne 5 et 6.

Bien deviné, on choisit un site ou un projet dans la combobox et on clique sur supprimer.

Pours les sites, cela supprime l'entrée dans l'onglet Data et dans l'onglet Projets (c'est là ou je n'y arrive pas)

Pour les projets, cela supprime les projets dans l'onglet Projets.

Extraction <> Enregistrer.

Extraction = syntétiser toutes les informations du chantier sur la feuille de l'onglet extraction (pour impression ou envoi par mail).

Enregistrer = Mettre à jour les information d'un chantier ou d'un site déjà existant dans la BD ou alors ajouter un site ou un chantier dans la BD (et dans l'onglet dat pour les site).

En fait, l'userform permet de consulter/mettre à jour ou modifier/supprimer les sites et chantiers 5S.

Merci pour ton aide

42suivi.xlsm (116.53 Ko)

Bonjour

Lorsque l'on clique sur "Enregistrer", cela crée une nouvelle ligne dans la base de donnée : Normal ou pas ?

Quand on supprime un site :

On efface le site dans la page "DATA"

On efface tous les chantiers dans la page "Projets" qui ont le site en colonne A

Quand on supprime un chantier

On efface le chantier (ayant le bon site) dans la page "Projets"

Le couple Site/Chantier est unique ?

Lis bien ce que je marque et corriges/réponds

Bonjour

Voici mes réponses en italique

Lorsque l'on clique sur "Enregistrer", cela crée une nouvelle ligne dans la base de donnée : Normal ou pas ?

Oui c'est normal.

Du point de vue du logiciel, on crée une nouvelle entrée dans la BD si la ComboboxProject (nom du projet) n'est pas NULL

Quand on supprime un site :

On efface le site dans la page "DATA"

Oui

On efface les 5 permières colonne de la ligne correspondante

On efface tous les chantiers dans la page "Projets" qui ont le site en colonne A

Oui

Quand on supprime un chantier

On efface le chantier (ayant le bon site) dans la page "Projets"

Oui

Le couple Site/Chantier est unique ?

Oui

Lis bien ce que je marque et corriges/réponds

Merci!

Bonjour

Je viens de me rendre compte que j'avais mal posé la 1ère question

Je voulais dire si avec le même site et le même projet, à chaque appuie sur le bouton "Enregistre" on crée une nouvelle ligne ?

J'ai considéré que non

J'ai repris pas mal de trucs, j'ai testé rapidement, il doit rester des bugs ( sinon je vais m'étonner)

Détailles bien la manière pour arriver au défaut

Bonjour,

oui c'est bien ça. Merci pour ton code il fonctionne très bien.

Je voudrai incrémenter les comboxo coach, leader à chaque fois qu'on clique sur un site avec les valeur déjà existant dans la base de données des projets de l'onglet "Projets"

J'ai essayé cela (avec une loop)

Me.CboxEncadrant.Clear
  With WsProjet
       Set Cel = .Columns("A").Find(what:=Me.CboxSite, LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
    Firstmatch = Cel.Row
    If .Range("S" & Cel.Row) <> "" Then Me.CboxEncadrant.AddItem .Range("S" & Cel.Row)
    Do
     For I = 0 To CboxEncadrant.ListCount - 1
     Cel = .Columns("A").FindNext(Cel)
     If CboxEncadrant.List(I) <> .Range("S" & Cel.Row) And .Range("S" & Cel.Row) <> "" _
     Then Me.CboxEncadrant.AddItem .Range("S" & Cel.Row)
      Next I
    Loop While Not Cel Is Nothing And Cel.Row <> Firstmatch
    End If
  End With

     'Remplissage de la combobox : Coach

Me.CboxCoach.Clear
  With WsProjet
       Set Cel = .Columns("A").Find(what:=Me.CboxSite, LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
    Firstmatch = Cel.Row
    If .Range("T" & Cel.Row) <> "" Then Me.CboxCoach.AddItem .Range("T" & Cel.Row)
    Do
     For I = 0 To CboxCoach.ListCount - 1
     Cel = .Columns("A").FindNext(Cel)
     If CboxCoach.List(I) <> .Range("T" & Cel.Row) And .Range("T" & Cel.Row) <> "" _
     Then Me.CboxCoach.AddItem .Range("T" & Cel.Row)
      Next I
    Loop While Not Cel Is Nothing And Cel.Row <> Firstmatch
    End If
  End With

       'Remplissage de la combobox : Leader

Me.CboxLeader.Clear
  With WsProjet
       Set Cel = .Columns("A").Find(what:=Me.CboxSite, LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
    Firstmatch = Cel.Row
    If .Range("U" & Cel.Row) <> "" Then Me.CboxLeader.AddItem .Range("U" & Cel.Row)

    Do
    Cel = .Columns("A").FindNext(Cel)
     For I = 0 To CboxLeader.ListCount - 1

     If Val(CboxLeader.List(I)) <> .Range("U" & Cel.Row).Value And .Range("U" & Cel.Row) <> "" _
     Then Me.CboxLeader.AddItem .Range("U" & Cel.Row)

      Next I
    Loop While Not Cel Is Nothing And Cel.Row <> Firstmatch
    End If
  End With

Mais ça ne marche pas, j'ai plusieurs fois le même nom alors que je voudrai qu'il n'y soit qu'une seule fois (cf le ficheier joint)

Bonsoir

Tu me traduis ta question par

On choisit ça ..... on fait ça .... et je veux ça .... etc

Quand je choisis un couple site/projet si ces noms sont renseignés ils sont inscrits dans les combobox

Bonsoir,

c'est bien ça!

Quand je choisi un couple site/projet, je voudrais que les combobox encadrant/coach et leader se remplissent avec les noms des autres couples de site/projet déjà existant.

Bonsoir

Il ne peut y avoir qu'un seul couple site/projet

Tu n'aurais besoin que de textbox

Il y a quelque chose qui m'échappe ?

Bonjour,

il n'y a qu'un seul couple site/projet

oui

Quand je clique sur la combobox encadrant, je voudrais afficher tous les encadrants des autres projets sur le même site.

(L'erreur vient de mon côté...)

Cordialement

Bonjour

A tester

Merci!

Maintenant je voudrait indiquer l'état du projet

Quand je modifie les dates de début et de fin prévues ou réelles, je voudrais que cela modifie le Textbox "EtatTExt".

Par exemple

si

date de début prévue = cochée

et

les autres dates = décochée

alors

EtatText=En projet

Autres exemples:

si

date de début réelle= cochée

et

les autres dates = décochée

alors

EtatText=En cours

si

date de début réelle= cochée

date de début prévue = cochée

et

les autres dates = décochée

alors

EtatText=En cours

Coment pourrais-je faire?

Merci pour ton aide

Bonjour

A tester

Rechercher des sujets similaires à "optimisation code vba"