report valeur ds onglet du nom X + titre colonne

happymarmotte

XLDnaute Occasionnel
Re Bonsoir le forum

J`ai un pb VBA. Avec mes collegues on doit reporter des donnes recap ds nos timesheet et cette allocation se fait par projet.

Donc j`ai un file recap de chacun (en ligne le salarie) en colonne le projet, et je dois allouer par macro les donnees ds les timesheets.

J`ai fait un exemple ou j`ai mis les projets (en reel il y en a 8 mais eux meme decoupes en sous parties … bref 24 colonnes)

J`ai autant d`onglets que de salaries… sauf si il y a un nouveau salarie bien sur

Comment puis je envoyer les donnees de Mr A (A a un onglet qui porte son nom) et surtout en meme temps reprendre le nom du projet corespondant (ligne 1)

J`ai fait un exemple de ce que je cherche a faire.
Si un salarie n`a pas sa timesheet, il faudrait un message de type (je ne peux pas allouer le temps du salarie X car il n`a pas de timesheet)

Merci pour votre aide. J`ai une macro qui fait l`inverse (recuperer) mais pas allouer :confused:

happymarmotte
 

Pièces jointes

  • reportinfo.zip
    2.5 KB · Affichages: 37

myDearFriend!

XLDnaute Barbatruc
Re : report valeur ds onglet du nom X + titre colonne

Bonsoir happymarmotte,

Ci-joint ton fichier adapté pour tenter de répondre à la demande.
J'ai utilisé le code suivant :
Code:
[SIZE=2][COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Option Explicit[/COLOR]

[COLOR=NAVY]Sub[/COLOR] Traitement()
[COLOR=GREEN]'   myDearFriend! - 11/12/2006[/COLOR]
[COLOR=NAVY]Dim[/COLOR] F [COLOR=NAVY]As[/COLOR] Worksheet
[COLOR=NAVY]Dim[/COLOR] TabTemp [COLOR=NAVY]As Variant
Dim[/COLOR] Sal [COLOR=NAVY]As String
Dim[/COLOR] L [COLOR=NAVY]As Long[/COLOR], LL [COLOR=NAVY]As Long[/COLOR], C [COLOR=NAVY]As Integer[/COLOR], Cmax [COLOR=NAVY]As Integer[/COLOR]
    [COLOR=GREEN]'Charge les données dans un tableau variant temporaire[/COLOR]
    [COLOR=NAVY]With[/COLOR] Sheets("info")
        L = .Range("A65536").[COLOR=NAVY]End[/COLOR](xlUp).Row
        Cmax = .Range("A65536").[COLOR=NAVY]End[/COLOR](xlToRight).Column
        TabTemp = .Range(.Cells(1, 1), .Cells(L, Cmax)).Value
    [COLOR=NAVY]End With[/COLOR]
    [COLOR=GREEN]'Pour chaque salarié[/COLOR]
    [COLOR=NAVY]For[/COLOR] L = 2 [COLOR=NAVY]To UBound[/COLOR](TabTemp, 1)
        [COLOR=GREEN]'Trouver l'onglet[/COLOR]
        Sal = TabTemp(L, 1)
        [COLOR=NAVY]On Error Resume Next
        Set[/COLOR] F = Sheets(Sal)
        [COLOR=NAVY]On Error GoTo[/COLOR] 0
        [COLOR=NAVY]If Not[/COLOR] F [COLOR=NAVY]Is Nothing Then
            With[/COLOR] F
                [COLOR=GREEN]'Effacer les anciennes valeurs[/COLOR]
                .Range("C20:D65536").Delete
                [COLOR=GREEN]'MAJ des données[/COLOR]
                [COLOR=NAVY]For[/COLOR] C = 2 [COLOR=NAVY]To[/COLOR] Cmax
                    [COLOR=NAVY]If[/COLOR] TabTemp(L, C) > 0 [COLOR=NAVY]Then[/COLOR]
                        LL = .Range("C65536").[COLOR=NAVY]End[/COLOR](xlUp).Row + 1
                        .Cells(LL, 3).Value = TabTemp(1, C)
                        .Cells(LL, 4).Value = TabTemp(L, C)
                        [COLOR=GREEN]'Conserver l'affichage arrondi (en gardant la vraie valeur)[/COLOR]
                        .Cells(LL, 4).NumberFormat = "#,##0"
                    [COLOR=NAVY]End If
                Next[/COLOR] C
            [COLOR=NAVY]End With
        Else[/COLOR]
            MsgBox "je ne peux pas allouer le temps du salarie " & Sal & " car il n`a pas de timesheet"
        [COLOR=NAVY]End If
        Set[/COLOR] F = [COLOR=NAVY]Nothing
    Next[/COLOR] L
[COLOR=NAVY]End Sub[/COLOR]
[/SIZE]
Cordialement,
 

Pièces jointes

  • PourHappymarmotte.zip
    11.8 KB · Affichages: 45
  • PourHappymarmotte.zip
    11.8 KB · Affichages: 43
  • PourHappymarmotte.zip
    11.8 KB · Affichages: 43
Dernière édition:

happymarmotte

XLDnaute Occasionnel
Re : report valeur ds onglet du nom X + titre colonne

Oh my dear,

bonsoir a toi et merci :D

c`est super! c`est exactement cela. Par contre ton code est court, efficace mais je comprends pas tout

Sal = TabTemp(L, 1)
par exemple la tu cree une base temporaire mais ensuite comment la macro comprends qu`ici faut chercher le nom du salarie?
Set F = Sheets(Sal)
le "set F...." veut dire quoi en soit? tu definis que les feuilles sont le nom du salarie (dont les noms sont ds la zone L) et t`as pas besoin de dire "sheet different de "Info"?


et ".Cells(LL, 3).Value = TabTemp(1, C)" tu peux m`en dire un peu plus car je vois que c`est a ce niveau que les choses se passent pour le report mais je vois pas le truc la

Merci en tout cas pour ce file. Impressionnant!

Happymarmotte
 

myDearFriend!

XLDnaute Barbatruc
Re : report valeur ds onglet du nom X + titre colonne

Re,
happymarmotte à dit:
Sal = TabTemp(L, 1)
par exemple la tu cree une base temporaire mais ensuite comment la macro comprends qu`ici faut chercher le nom du salarie?
TabTemp() est un tableau variant à 2 dimensions, il représente les données dans ta feuille "info". Je l'utilise uniquement par souci de rapidité de traitement, je dirais que c'est une image de ta feuille. En pratique par exemple : TabTemp(4, 5) correspond à la donnée placée en Cells(4, 5) de ta feuille "info" (autrement dit: Ligne 4 et Colonne 5, c'est à dire la valeur "60").
Les noms des salariés sont placés en colonne A de ta feuille, je parcours donc les valeurs TabTemp(L, 1), c'est à dire toutes les lignes de la colonne 1 du tableau dans une boucle.

happymarmotte à dit:
Set F = Sheets(Sal)
le "set F...." veut dire quoi en soit? tu definis que les feuilles sont le nom du salarie (dont les noms sont ds la zone L) et t`as pas besoin de dire "sheet different de "Info"?
Set permet d'affecter une référence d'objet à une variable. J'affecte donc la feuille correspond à chaque salarié dans une variable nommée F. Ensuite je teste si la variable contient quelquechose ou non, pour savoir si la feuille existe ou non (le gestionnaire d'erreur est très important ici, sinon plantage d'Excel si tu tentes d'affecter à la variable une feuille qui n'existe pas).

happymarmotte à dit:
et ".Cells(LL, 3).Value = TabTemp(1, C)" tu peux m`en dire un peu plus car je vois que c`est a ce niveau que les choses se passent pour le report mais je vois pas le truc la
LL = .Range("C65536").End(xlUp).Row + 1 te permet d'obtenir le numéro de ligne de la première cellule vide en bas du tableau colonne C.
.Cells(LL, 3).Value pointe donc sur la première cellule vide en bas du tableau colonne 3 de la feuille "salarié X".

TabTemp() représentant les données de ta feuille "info", TabTemp(1,C) donnera donc la valeur située en Ligne 1 / colonne C, c'est à dire le nom de chaque projet obtenu dans une boucle For C = 1 to...

En espérant t'avoir un peu aidé à comprendre cette procédure... (je sais que ce n'est pas forcément simple à comprendre, mais il faut dire aussi que ce n'est pas forcément facile à expliquer ;) ).

Cordialement,
 
Dernière édition:

CBernardT

XLDnaute Barbatruc
Re : report valeur ds onglet du nom X + titre colonne

Bonsoir happymarmotte et cher myDearFriend,

Un peu à la bourre mais tant pis !

Avec une version un peu différente mais qui abouti au même résultat, je pense.

Cordialement

Bernard
 

Pièces jointes

  • reportinfoV1.zip
    16.2 KB · Affichages: 46

happymarmotte

XLDnaute Occasionnel
Re : report valeur ds onglet du nom X + titre colonne

Bonsoir MdF, CBERNARDT et le forum

d`abord merci pour ces explications. Ca m`aide a comprendre. C`est vrai que ca saute pas aux yeux !
Merci CbernardT, ton code me parle plus, je suis plutot habitue a cela. :D

merci a tous les 2, ca m`a fait avancer a grand pas!

juste 1 question, la derniere.
Si je veux ajouter le fait que si OK ds la colonne A, alors tu recopies la donnees comme le fait la macro, je fais comment?
si pas de OK, next line. si c`est trop lourd comme changement, laissez tomber.

merci et desole pour cette requete supplementaire

Bonne soiree a tous et encore merci.
happymarmotte
 

myDearFriend!

XLDnaute Barbatruc
Re : report valeur ds onglet du nom X + titre colonne

Bonjour Happymarmotte, CBernardT, le Forum,
Happymarmotte à dit:
Si je veux ajouter le fait que si OK ds la colonne A, alors tu recopies la donnees comme le fait la macro, je fais comment?
si pas de OK, next line.
Je pense que c'est réalisable à moindre coût (je parle en terme de modification de code bien entendu :p ), mais je n'ai pas trop compris comment tu comptais qualifier de "OK" les lignes à prendre en compte car en colonne A tu as déjà les noms des salariés :eek: ...

As-tu l'intention d'insérer une colonne supplémentaire avant les noms ?

Cordialement,
 

happymarmotte

XLDnaute Occasionnel
Re : report valeur ds onglet du nom X + titre colonne

Bonsoir MdF, le forum et CBernardT,

euh oui pour ta reponse. je pensais inserer 1 colonne car je me rend compte que j`ai pas les donnees en meme temps donc je me suis dis qu`il serait mieux d`avoir un OK en ajoutant 1 colonne et comme ca de mettre a jour au fur et a mesure que j`ai les donnees et donc les OK

Merci pour ton aide

happymarmotte
 

myDearFriend!

XLDnaute Barbatruc
Re : report valeur ds onglet du nom X + titre colonne

Bonsoir happymarmotte, l'ami CBernardT,

Bon, là, je pense que je vais jouer les fainéants... je ne comprends pas la démarche, si tu n'as pas de données pour une des lignes, cette ligne n'est tout simplement pas traitée avec la macro que je présentais plus haut. A quoi sert de mettre OK ou non ?

Par exemple, en reprenant le classeur que j'ai posté le 11/12/2006 00h18, si tu effaces les données en L6 et M6, le salarié "e" ne reçoit aucune donnée dans l'onglet correspondant. Où est le problème et pourquoi vouloir mettre "Ok" pour les autres ?

Cordialement,
 

XCo

XLDnaute Occasionnel
Re : report valeur ds onglet du nom X + titre colonne

Bonjour MdF

c`est pas que j`ai pas donnees mais c`est que je veux pas les envoyer... oui je prefere faire au fur et a mesure (10 par 10) car il y a tjs un cas particulier qu`il faut ajuster "un peu a la main"

Et puis si j`ai des donnees et que j`ai deja reporte les donnees, ben je prevois de mettre en couleur (vert) ce qui a deja ete envoye comme cela je suis bien les choses et je renvoie pas inutilement (imagine je fais un ajustement et je renvoie des donnees par dessus.

donc t`es pas faineant, c`est moi. Je suis pas clair parfois :D

Merci

Hapymarmotte
 

XCo

XLDnaute Occasionnel
Re : report valeur ds onglet du nom X + titre colonne

2 pseudo, saute pas partout!

Avec XCo je retrouvais plus mes questions (recherche avec XCo donne rien alors qu`avec happymarmotte, ca donne les fils ou j`ai pose des questions)

Voila donc pas la peine de m`ENGUEUL*** :mad:

Je peux quand meme garder XCo (j`espere).

A+

Happymarmotte
 

myDearFriend!

XLDnaute Barbatruc
Re : report valeur ds onglet du nom X + titre colonne

Bonsoir happymarmotte-XCo, CBernardT,

Arf, il faut vraiment que j'ai une réputation de vieux grincheux pour que tu dises ça... c'est sans doute vrai d'ailleurs ! (Cela dit, il faut quand même reconnaître que, tant les services rendus que les engueulades occasionnelles, ce sont toujours des interventions effectuées avec passion et bénévolement ;))

T'inquiète happymarmotte-XCo, je ne suis pas le webmaster ici, alors que tu aies 1, 2 ou 5 pseudos m'importe peu... pourvu que DavidXLD et toi-même s'y retrouvent (ce qui n'a pas vraiment l'air d'être systématiquement le cas lol !)

Donc, sans chercher à approfondir d'avantage ton problème, je te propose la modification du code comme ci-dessous (une nouvelle colonne est donc insérée dans ton onglet "info" ---> voir fichier joint). En rouge les modifications apportées :

Code:
[SIZE=2][COLOR=NAVY]Sub[/COLOR] Traitement()
[COLOR=GREEN]'  myDearFriend! - 13/12/2006[/COLOR]
[COLOR=NAVY]Dim[/COLOR] F [COLOR=NAVY]As[/COLOR] Worksheet
[COLOR=NAVY]Dim[/COLOR] TabTemp [COLOR=NAVY]As Variant
Dim[/COLOR] Sal [COLOR=NAVY]As String
Dim[/COLOR] L [COLOR=NAVY]As Long[/COLOR], LL [COLOR=NAVY]As Long[/COLOR], C [COLOR=NAVY]As Integer[/COLOR], Cmax [COLOR=NAVY]As Integer[/COLOR]
    [COLOR=GREEN]'Charge les données dans un tableau variant temporaire[/COLOR]
    [COLOR=NAVY]With[/COLOR] Sheets("info")
        L = .Range("A65536").[COLOR=NAVY]End[/COLOR](xlUp).Row
        Cmax = .Range("A65536").[COLOR=NAVY]End[/COLOR](xlToRight).Column
        TabTemp = .Range(.Cells(1, 1), .Cells(L, Cmax)).Value
    [COLOR=NAVY]End With[/COLOR]
    [COLOR=GREEN]'Pour chaque salarié[/COLOR]
    [COLOR=NAVY]For[/COLOR] L = 2 [COLOR=NAVY]To UBound[/COLOR](TabTemp, 1)
        [COLOR=Red]If TabTemp(L, 1) <> "" [/COLOR][COLOR=Red]Then[/COLOR]            [COLOR=GREEN]'Trouver l'onglet[/COLOR]
            Sal = TabTemp(L,[COLOR=Red]2[/COLOR])
            [COLOR=NAVY]On Error Resume Next
            Set[/COLOR] F = Sheets(Sal)
            [COLOR=NAVY]On Error GoTo[/COLOR] 0
            [COLOR=NAVY]If Not[/COLOR] F [COLOR=NAVY]Is Nothing Then
                With[/COLOR] F
                    [COLOR=GREEN]'Effacer les anciennes valeurs[/COLOR]
                    .Range("C20:D65536").Delete
                    [COLOR=GREEN]'MAJ des données[/COLOR]
                    [COLOR=NAVY]For[/COLOR] C = [COLOR=Red]3 [/COLOR][COLOR=NAVY]To[/COLOR] Cmax
                        [COLOR=NAVY]If[/COLOR] TabTemp(L, C) > 0 [COLOR=NAVY]Then[/COLOR]
                            LL = .Range("C65536").[COLOR=NAVY]End[/COLOR](xlUp).Row + 1
                            .Cells(LL, 3).Value = TabTemp(1, C)
                            .Cells(LL, 4).Value = TabTemp(L, C)
                            [COLOR=GREEN]'Conserver l'affichage arrondi (en gardant la vraie valeur)[/COLOR]
                            .Cells(LL, 4).NumberFormat = "#,##0"
                        [COLOR=NAVY]End If
                    Next[/COLOR] C
                [COLOR=NAVY]End With
            Else[/COLOR]
                MsgBox "je ne peux pas allouer le temps du salarie " & Sal & " car il n`a pas de timesheet"
            [COLOR=NAVY]End If
            Set[/COLOR] F = [COLOR=NAVY]Nothing
        [COLOR=Red]End If[/COLOR]
    Next[/COLOR] L
[COLOR=NAVY]End Sub[/COLOR][/SIZE]
Cordialement,
 

Pièces jointes

  • PourHappymarmotte.zip
    12.1 KB · Affichages: 33
  • PourHappymarmotte.zip
    12.1 KB · Affichages: 34
  • PourHappymarmotte.zip
    12.1 KB · Affichages: 32

happymarmotte

XLDnaute Occasionnel
Re : report valeur ds onglet du nom X + titre colonne

Salut MdF,

t`es vraiment un ami toi! ;) LoL.


je regarde le file... 2 eme lecon de VBA je sents.

J`espere que CBernardT est pas en train d`y bosser aussi.

Merci, je te tiens au courant... vendredi. Peu pas avant.

merci


Happymarmotte
 

Discussions similaires

Statistiques des forums

Discussions
312 249
Messages
2 086 604
Membres
103 260
dernier inscrit
NHOURRA