calendrier particulier et importation de données

angel84

XLDnaute Nouveau
bonjour,
j'ai vraiment besoin de votre aide, parce que cela fait plus de deux semaines que je cherche comment faire, et vu que je ne suis pas très calée en vba, votre aide sera la bien venu
voilà mes problèmes, j'en ai 2:
1) je voudrais créer un tableau (voir exemple en pièce jointe) qui change en fonction des information que j'indique au niveau du premier userform qui s'affiche quand je clique sur "informations projet".
ce tableau doit tenir compte des dates de début et de fin de projet, ainsi que du numéro de projet, et aussi si le projet contient des phases ou pas, et l'afficher dans une autre feuille du classeur.

2) le deuxième problème, c'est qu'une fois que le tableau est créé, et que je remplie les informations du deuxième userform, qui s'affiche en cliquant sur le bouton "noms des intervenants", il faut que j'aille chercher dans les feuilles d'heures de chacun, et de faire la somme de leurs heures par phases de projet (si il y en a) et également par semaine, et les indiquer dans les cases correspondantes dans le tableau créé précédemment...
les feuilles d'heures ne sont pas dans le même répertoire que mon fichier "projet.xls"
je ne sais pas si je me suis fait comprendre...

j'espère que je vais avoir de l'aide:confused::confused:, parce que je dois finir ça rapidement...

merci beaucoup d'avance pour votre aide

PS : en pièce jointe, y a ce que j'ai fait, et également un exemple du tableau que je voudrais crée, mais sans le copier, je voudrais le créer de zéro

Je n'arrive pas à joindre mon fichier "projet.xls", parce que même en étant zipé, il fait 120 Ko :(
 

Pièces jointes

  • Tableau final.zip
    14.8 KB · Affichages: 74
  • Tableau final.zip
    14.8 KB · Affichages: 78
  • Tableau final.zip
    14.8 KB · Affichages: 75

angel84

XLDnaute Nouveau
Re : calendrier particulier et importation de données

le code que j'ai fait pour créer le tableau est le suivant: (c'est le code pour le userform "informations projet")

Option Explicit

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TextBox2.Value) Then Exit Sub
TextBox4.Value = semaine_num(CDate(TextBox2.Value))
End Sub

Function semaine_num(£ddate)
Dim £x, £y
£x = Int((£ddate - 2) / 7) + 0.6 'Renvoie le numéro de semaine
£y = 52 + 5 / 28
£x = Int(£x - £y * Int(£x / £y)) + 1
If Month(£ddate) = 12 And £x = 1 Then £x = 53
semaine_num = £x
End Function

Private Sub Bouton_Creation_Click()

Dim dated As Date
Dim datef As Date
Dim datec As Date
Dim num_semaine As Byte
Dim jour_semaine As Byte
Dim cols As Long ' pas 1
Dim colm As Long ' pas 10
Dim Sh As Worksheet
Dim trouve As Byte
Dim mois_en_cours As Byte
If Not IsDate(TextBox2.Value) Then Exit Sub
If Not IsDate(TextBox3.Value) Then Exit Sub
If TextBox1.Value = "" Then Exit Sub
dated = CDate(TextBox2.Value)
datef = CDate(TextBox3.Value)
datec = CDate(TextBox2.Value)

With Range("A1:C1").Borders
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0 'Cette propriété n'existe pas sur Excel 2003
.Weight = xlThin
End With

With Range("A1:A3")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
.Value = "N° projet"
End With


With Range("B1:B3")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
.Value = "Parties Projet"
End With

With Range("A4:A14")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
.Value = TextBox1.Value
End With

Range("C1").Value = "Mois"
Range("C2").Value = "Type"
Range("C3").Value = "Semaines"

Range("C4").Value = ""
Range("C5").Value = ""
Range("C6").Value = ""
Range("C7").Value = ""
Range("C8").Value = ""
Range("C9").Value = ""
Range("C10").Value = ""
Range("C11").Value = ""
Range("C12").Value = ""
Range("C13").Value = ""

Range("B14:C14").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
.Value = "Total"
End With




Range("B4").Value = "A"
Range("B5").Value = "B"
Range("B6").Value = "C"
Range("B7").Value = "D"
Range("B8").Value = "E"
Range("B9").Value = "F"
Range("B10").Value = "G"
Range("B11").Value = "H"
Range("B12").Value = "I"
Range("B13").Value = "J"
End If

For Each Sh In Worksheets
If Sh.Name = TextBox1.Value Then
trouve = 1
End If
Next Sh
If trouve = 0 Then


With Sheets(TextBox1.Value)
cols = 4
colm = 4

'départ 4 avec espace 10
.Cells(1, colm) = MonthName(Month(CDate(dated)))
.Cells(3, cols) = TextBox4.Value
num_semaine = TextBox4.Value
mois_en_cours = Month(datec)

Do
If datec > datef Then Exit Do
datec = DateAdd("d", 1, datec)
If Weekday(datec) = 2 And Month(datec) = mois_en_cours Then
cols = cols + 1
num_semaine = num_semaine + 1
.Cells(3, cols) = num_semaine
End If
If Weekday(datec) = 2 And Month(datec) > mois_en_cours Then
mois_en_cours = Month(datec)
colm = colm + 10
cols = colm
.Cells(1, colm) = MonthName(Month(datec))
num_semaine = num_semaine + 1
.Cells(3, cols) = num_semaine
End If
Loop

For cols = 120 To 4 Step -1
If .Cells(3, cols) = "" Then
.Columns(cols).Delete Shift:=xlToLeft
End If
Next cols
End With
End If
Unload Me
End Sub

Private Sub Bouton_Quitter_Click()
Unload Me
End Sub
 

ngogoisidore

XLDnaute Occasionnel
Re : calendrier particulier et importation de données

angel84,

J'ai reçu ton message personnel, mais à l'avenir, je ne souhaite pas être interpellé directement par email.

Si toutes les personnes ayant besoin d'aide se mettaient à m'envoyer des demandes directes, je passerai mon temps à répondre à des questions sur Excel ...

D'autre part, et c'est la raison principale qui explique pourquoi tu n'as pas de réponses, ton "problème" est exprimé de manière trop générale (surtout dans ton premier post) et semble long à résoudre.
Il faut que tu déblaies le terrain (aide toi, le ciel t'aidera :)).

De plus, pour ce genre de problèmes, même si tu utilises Excel 2007, je te conseille de poster sur le forum général.

Si tu veux poster un fichier plus gros que la limite autorisée sur le forum (48 ko, si mes souvenirs sont bons), tu peux charger ton fichier sur ce site : Cijoint.fr - Service gratuit de dépôt de fichiers et poster le lien vers ce fichier.

Je regarderai ce que tu as fait, mais je ne peux pas te garantir une réponse très rapide.

Bon courage.
 
Dernière édition:

angel84

XLDnaute Nouveau
Re : calendrier particulier et importation de données

Merci pour ta réponse, et désolée pour le dérangement :confused::confused:
le lien de mon fichier et le suivant: Cijoint.fr - Service gratuit de dépôt de fichiers

et le tableau que je voudrais créer, je voudrais qu'il ressemble à celui qui est en pièce jointe de mon premier poste

Merci d'avance pour votre aide
 

ngogoisidore

XLDnaute Occasionnel
Re : calendrier particulier et importation de données

Bonjour angel84,

J'ai retravaillé ton fichier Excel de création de tableaux d'heures.

Tu le trouveras en suivant le lien : Cijoint.fr - Service gratuit de dépôt de fichiers

Regarde si cela répond à ton besoin pour les heures des projets "avec phases".
Je n'ai pas pû faire le cas "sans phases" du fait que je n'avais pas d'exemple, mais je suppose que c'est plus simple et que tu pourras adapter mon fichier.

J'attire ton attention sur le fait que la mise en forme du fichier exemple que tu m'as fourni a une petite faille, mais c'est sans doute sans importance pour ton application, et à défaut d'en être sur, je n'ai rien changé sur ce point.

En effet, il n'est pas prévu qu'une semaine puisse être à cheval entre deux mois (ce qui pourtant est très courant). Je comprends que pour le comptage des heures, une semaine commencée dans un mois est entièrement considérée appartenir à ce mois ...

Il n'est pas non plus prévu qu'un projet puisse être à cheval entre deux années. Pour le coup, là, j'ai corrigé le tir (je ne sais pas si ça te sera utile).

Il reste à mettre un titre à ce tableau, pour bien faire comprendre ce qu'il contient.

Il reste également, et la encore, ça risque de ne pas être une sinécure, à importer et consolider les données horaires à partir des feuilles d'heures des employés.

Bon courage :) !
 
Dernière édition:

angel84

XLDnaute Nouveau
Re : calendrier particulier et importation de données

Bonjour ngogoisidore,
ça marche impeccable, j'ai réutilisé ton code pour faire le tableau sans phases...
Maintenant j'essaye d'importer les heures des feuilles d'heures des employés...
et c'est pas de la tarte
Est ce que je peux importer des données d'un fichier sans qu'il ne soit ouvert?
merci beaucoup en tout cas pour ton aide
 

ngogoisidore

XLDnaute Occasionnel
Re : calendrier particulier et importation de données

Bonjour angel84,

Je suppose que les feuilles d'heures sont des fichiers Excel ?

Dans ce cas, je crois que le plus simple est d'utiliser la méthode consolidate à partir de VBA :

Code:
ActiveWorkBook.Worksheets("MaSheet").Range("MonRange").Consolidate Sources:=Array( _ 
  "'MonChemin1\[MonClasseurDheures1.xls]MaFeuille1'!RangeASommer1", _
  "'MonChemin1\[MonClasseurDheures2.xls]MaFeuille2'!RangeASommer2", _
  ...
  "'MonCheminN\[MonClasseurDheuresN.xls]MaFeuilleN'!RangeASommerN"), _
  Function:=xlSum, TopRow:=False, LeftColumn:=False, CreateLinks:=False

Cette méthode va faire la somme de toutes les valeurs se trouvant dans les plages RangeASommer1 à RangeASommerN de tes feuilles d'heures 'MonChemin1\[MonClasseurDheures1.xls]MaFeuille1' à 'MonCheminN\[MonClasseurDheuresN.xls]MaFeuilleN' et va mettre le résultat dans le plage MonRange de ta feuille MaSheet (les dimensions des plages MonRange et RangeASommer1 à RangeASommerN doivent être identiques).

Exemple :

Code:
ActiveWorkbook.Worksheets("Sheet1").Range("A1:B2").Consolidate Sources:=Array( _
  "'C:\FeuillesDheures\[FeuilleDheures_MT Fevrier 2009.xls]Sheet1'!C2:D3", _
  "'C:\FeuillesDheures\[FeuilleDheures_LF Fevrier 2009.xls]Sheet1'!C2:D3"), _
  Function:=xlSum, TopRow:=False, LeftColumn:=False, CreateLinks:=False

Edit :

J'ai refait quelques essais, et il semble que l'on doive entrer le RangeASommer sous le format RiCj:RkCl, sinon la méthode ne fonctionne pas (du moins, d'après mes essais).

RiCj:RkCl est la plage dont le coin supérieur gauche est la cellule située à l'intersection de la ligne i et de la colonne j et le coin inférieur droit est la cellule située à l'intersection de la ligne k et de la colonne l.


Mon exemple devient :


Code:
ActiveWorkbook.Worksheets("Sheet1").Range("A1:B2").Consolidate Sources:=Array( _
  "'C:\FeuillesDheures\[FeuilleDheures_MT Fevrier 2009.xls]Sheet1'!R2C3:R3C4", _
  "'C:\FeuillesDheures\[FeuilleDheures_LF Fevrier 2009.xls]Sheet1'!R2C3:R3C4"), _
  Function:=xlSum, TopRow:=False, LeftColumn:=False, CreateLinks:=False

@+
 
Dernière édition:

angel84

XLDnaute Nouveau
Re : calendrier particulier et importation de données

Bonjour ngogoisidore,
merci pour ton aide
je suis entrain d'essayer ce que tu m'as dit
oui les feuilles d'heures sont des fichiers excel "Nom_jan. à déc. 2009.xls", et ils sont situés dans le répertoire "Z:\SYSTEME DE MANAGEMENT\PR2 RH\feuilles_d'heures\Nom". Est ce que le fait que mon fichier "feuille_projet.xls" ne soit pas dans le même dossier, complique les choses? mon fichier se trouve "Z:\projets\1_Suivi projets bis"
bonne journée
 

ngogoisidore

XLDnaute Occasionnel
Re : calendrier particulier et importation de données

Bonjour angel84,

Non, le fait que les fichiers à consolider ne soient pas dans le même répertoire que le fichier dans lequel tu consolides n'est pas pas un problème.

Si tous tes classeurs de feuilles d'heures sont dans un même répertoire, je te conseille de nommer une constante :

Code:
Const sChemRacine as String = "Z:\SYSTEME DE MANAGEMENT\PR2 RH\feuilles_d'heures"

et de construire les chaines contenues dans le tableau (Array) Source de la méthode Consolidate à partir des noms des participants au projet. Pour se faire, il faut que tu utilises l'opérateur de concaténation &.

Code:
ie : Chaine1 = "toto"
     Chaine2 = "titi"
     Chaine3 = Chaine1 [B][COLOR="Blue"]&[/COLOR][/B] " " [B][COLOR="Blue"]&[/COLOR][/B] Chaine2

     Chaine3 contient alors "toto titi"

Bon courage encore :).

@+
 
Dernière édition:

angel84

XLDnaute Nouveau
Re : calendrier particulier et importation de données

Bonjour ngogoisidore, bonjour le forum,
J'ai essayé quelques trucs, mais je n'obtiens pas vraiment ce que je veux...
parce que par exemple dans le cas d'un projet avec phases, quand je check les noms des participants, j'ai un tableau avec phases qui s'affiche dans ma feuille projet, et j'indique les phases auxquelles participent chaque personne. mais à partir de là je n'arrive pas à importer correctement les heures...parce que je dois indiquer les taux horaires, et en fonction des taux horaires que je multiplie par la somme des heures pour avoir un montant en euros...c'est ce montant que je dois indiquer dans le tableau...
je ne comprend pas vraiment bien comment je dois utiliser la méthode "consolidate", et puis pour importer les montant de factures également...
ça devient vraiment trop compliqué, et je ne m'en sors plus...

PS: j'ai mis en pièce jointe, un exemple d'une feuille d'heures...et un exemple de planning projet

Merci d'avance pour ta réponse
bonne journée
 

Pièces jointes

  • nom_jan. à déc. 2009.zip
    22.7 KB · Affichages: 62
  • planning projet.zip
    9.2 KB · Affichages: 56

ngogoisidore

XLDnaute Occasionnel
Re : calendrier particulier et importation de données

Chère angel84,

Pour l'instant, je ne vois aucun développement par rapport à la feuille de bilan d'heures que je t'avais postée ...

Il y a sans doute des choses que tu as pu faire, même si tu bloques sur certains points.

D'autre part, comment se fait il que ta société te demande un travail d'un niveau de développeur vba, si tu n'en as pas l'expertise ?

Ce forum a vocation d'entraide, ce n'est pas un service de developpement vba gratuit ... Pour info, à deux reprises déjà, j'ai complètement remanié ton code et cela m'a pris plusieurs heures.

Si je résous à nouveau ton problème, comment vas tu maintenir le code par la suite, si tu veux rajouter une fonctionnalité ou corriger une erreur ? Tu vas poster sur le forum ? Cela pose quand même un problème de principe. Si ta société a besoin d'un développeur, il y a en a qui sont au chômage de nos jours ...

En ce qui concerne ta question précise sur le calcul de la facture à partir des feuilles d'heures, j'ai jeté un coup d'oeil et je constate que les feuilles d'heures contiennent le détail des heures par jour, mais les taux horaires sont associés à un nombre d'heures par mois (tant d'heures dans le mois payées à 100% + tant d'heures dans le mois payée à 125% ...). Donc, il est difficile de dresser le tableau des rémunérations par jour (ou même par semaine, comme c'est le cas dans la feuille de bilan d'heures des précédents posts), puisque l'info n'apparait pas directement dans la feuille d'heures.

On pourrait envisager de considérer que les heures au-delà de 7.8h par jours ou travaillées le samedi sont payées 125%, en tant qu'heures sup. et que les heures du dimanche sont payées à 150%. Mais, je n'en suis pas convaincu.

Sinon, il faut changer un peu ta feuille de bilan d'heures et rajouter une ligne rémunération mensuelle, que tu peux difficilement remplir avec la fonction consolidate, à moins de changer un peu le format des feuilles d'heures ...

Pour résumer, j'écrirais qu'obtenir le type de résultats bilan que tu attends est normalement le rôle des tableaux croisés dynamiques ou des consolidations/sous-totaux (je t'invite vivement à consulter la documentation Excel), mais que le format de tes données d'entrée en rend l'utilisation difficile, voire impossible, et donc oblige à programmer en vba.

Il faut que tu fasses l'analyse de toutes les informations dont tu as besoin dans ton bilan, que tu détermines où elles se trouvent dans les données d'entrée et que tu crées les variables, les boucles et les sommes nécessaires pour obtenir le résultat désiré. Je ne connais pas de méthode miracle et rapide à implémenter.

Peut-être qu'une remise en forme des feuilles d'heures faciliterait le traitement automatique pour créer le bilan, mais il faut doser l'effort de travail manuel par rapport à l'effort de développement pour automatiser la création du bilan.

Garde courage !
 
Dernière édition:

angel84

XLDnaute Nouveau
Re : calendrier particulier et importation de données

Merci pour ta réponse ngogoisidore,
je suis d'accord avec toi, que ma boite devrait prendre un informaticien pour le développement de son application. De plus, je suis apprentie, je fais un master management en "ingénierie d'affaires", donc normalement c'est pas du tout mon boulot, mais je dois utiliser cette application pour faire le suivi de projet, et l'entreprise n'a pas les moyens pour investir dans un logiciel de gestion de projet...et vu que personne ne sait le faire, ben c'est moi qui doit faire le boulot...
pour ce qui est de modifier le code, y a pas de problème, je comprend le code et j'arrive à le modifier pour en faire quelque choses qui correspond plus à ce que je veux, c'est ce que j'ai fait avec les premiers code que tu m'avais aidé à faire.

voilà ce que j'ai fait, j'essaye de changer des trucs, parce que y a rien qui marche...et c'est vraiment pas glorieux

Private Sub Import_Planning_Projet()
Const Planning_Projet_Source As String = "Z:\projets\1_Suivi projets"
Const Feuille_Projet_Cible As String = "Z:\projets\1_Suivi projets bis"

Dim Ws As Worksheet
Dim a, i As Integer
For Each Ws In Planning_Projet_Source.budget
a = Application.CountA(Ws.Range("TB_NumProjet").Value)
For i = 1 To a
Feuille_Projet_Cible.Range("Matériels") = Application.Sum(Ws.Range("facture").Value)
Next i
Next
End Sub



Private Sub Import_Feuilles_Heures()

Const Fichiers_Heures_Source As String = "Z:\SYSTEME DE MANAGEMENT\PR2 RH\feuilles_d'heures"
Const Feuille_Projet_Cible As String = "Z:\projets\1_Suivi projets bis"

Dim Sh As Worksheet
Set Sh = Worksheets(Mois.Value)

If CheckBox.Value = True Then

ActiveFeuille_Projet_Cible.Worksheets("TB_NumProjet.Value").Range("M.O.").Consolidate Sources:=Array(_
"'[Z:\SYSTEME DE MANAGEMENT\PR2 RH\feuilles_d'heures\Nom\nom_jan. à déc. 2009.xls"]*"taux horaires".Value'"),_
Function:=xlSum, TopRow:=False, LeftColumn:=False, CreateLinks:=False
End If
End Sub

Je n'ai pas la logique de programmation, je comprend un code bien fait et clair, et je peux le modifier si jamais, mais j'apprends petit à petit de le faire de moi même, et cela prend du temps :(

Sinon pour ce qui est des heures sup, moi je pensais que je pourrai mettre une condition, c à d que si le nombre d'heures par personne dépasse les 39 heures par semaine, majoré les heures supérieurs, mais je ne sais pas si c'est faisable...

Je cherche à mieux coder, j'espère que je vais m'en sortir...

Je comprend aussi ta position par rapport au principe et l'éthique du forum, mais j'ai le postérieur entre deux chaises, et je ne sais pas comment je pourrai faire autrement...
Merci en tout cas pour ton aide, c'était très gentil de ta part

Bonne journée
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 234
Messages
2 086 468
Membres
103 226
dernier inscrit
smail12