Se connecter avec
S'enregistrer | Connectez-vous

Besoin d'aide de prog vba excel pour faires des totals avec selection

Dernière réponse : dans Programmation

Bonjour,

j'ai une feuille "heures imputees" dans laquelle j'ai un tableau croisé dynamique avec 6 colonnes,

mois technicien client affaire chapitre heures

je voudrais 2 totales des heures par affaire

un total pour XXXX et YYYY => BE ( partie électrique)
un total pour le reste des techniciens => SOFT ( programmation d'automate)

je dois pouvoir récupérer le totale des heures pour c'est 2 groupe en fonction des chapitres ( A02 L05 ..)

exemple final

affaire Chapitre BE SOFT

XX.XX.XXXX A02 54 123

voici mon code actuel :

  1. Option Explicit
  2.  
  3. Dim N°AFFAIRE As String
  4.  
  5. Dim CHAPITRE As String
  6.  
  7. Dim HEURES As Integer
  8.  
  9.  
  10.  
  11. Sub Remplir_Bilan()
  12.  
  13. ' Définition des variables générales
  14. Dim A As Integer
  15.  
  16. HEURES = 0
  17. CHAPITRE = Worksheets("Heures Imputees").Range("E").Value
  18. 'Rechercher les heures Imputées sur N°AFFAIRE & CHAPITRE
  19. Worksheets("Heures Imputees").Activate
  20. For A = 2 To 2600
  21.  
  22. Worksheets("Heures Imputees").Activate
  23. If (Worksheets("Heures Imputees").Range("d" & A).Value = N°AFFAIRE) And CHAPITRE = "A02" Then
  24. HEURES = Worksheets("Heures Imputees").Cells(A, 7).Value + HEURES
  25. End If
  26. Next A
  27.  
  28.  
  29.  
  30. End Sub

merci de bien vouloire m'aider je debute en vba et j'ai beau chercher partout sur le net je n'y arrive pas, et c'est urgent
Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

;) 

Bon, tu m'as foutu la chienlit dans mon si zoli code. Je repars du mien.

  1. Dim cellule As Range
  2. Dim n°affaire As String
  3. Dim chapitre As String
  4. Dim heures As Integer
  5. Dim cellule_bilan As Range
  6. Dim technicien As String
  7. Dim x As Integer ' // Décalage de colonne
  8.  
  9. For Each cellule In Worksheets("Heures Imputees").Range("D2:D2600")
  10.  
  11. n°affaire = cellule.Offset(, 0).Value
  12. chapitre = cellule.Offset(, 1).Value
  13. heures = cellule.Offset(, 2).Value
  14. technicien = cellule.Offset(, -2).Value
  15.  
  16. Select Case technicien
  17. Case "BOB", "GARY": x = 2
  18. Case "FROMAGE": x = 4
  19. Case Else: x = 3
  20. End Select
  21.  
  22. For Each cellule_bilan In Worksheets("Bilan").Range("A2:A65536")
  23. If cellule_bilan.Offset(, 0).Value = n°affaire And _
  24. cellule_bilan.Offset(, 1).Value = chapitre _
  25. Then
  26. cellule_bilan.Offset(, x).Value = cellule_bilan.Offset(, x).Value _
  27. + heures
  28. Exit For
  29. End If
  30. If cellule_bilan.Value = "" _
  31. Then
  32. cellule_bilan.Offset(, 0).Value = n°affaire
  33. cellule_bilan.Offset(, 1).Value = chapitre
  34. cellule_bilan.Offset(, x).Value = cellule_bilan.Offset(, x).Value _
  35. + heures
  36. Exit For
  37. End If
  38. Next
  39. Next


J'use d'un Select Case. C'est moins chiant que des If .. ElseIf en cascade.

T'as tout compris ? :) 
Expert Programmation

Salut,

Nous ne traitons pas les problèmes urgents. Nous aidons volontiers les débutants.
Comment ça tu as cherché partout sur le net ? Sache que tu as déjà trouvé :sol: 

Mais maintenant, il va falloir nous aider à t'aider. C'est quoi la question ?Moi, je comprends que c'est en fonction des chapitres ET des affaires !

  1. Sub Remplir_Bilan()
  2.  
  3. ' // Les variables se déclarent localement
  4. Dim N°AFFAIRE As String
  5. Dim CHAPITRE As String
  6. Dim HEURES As Integer
  7. Dim A As Integer
  8.  
  9. HEURES = 0
  10. CHAPITRE = Worksheets("Heures Imputees").Range("E").Value ' // <-- Manque pas un bout, là, dans l'adresse ?
  11.  
  12. ' // Worksheets("Heures Imputees").Activate <-- Ne sert qu'à ralentir le programme
  13. For A = 2 To 2600
  14. ' // Worksheets("Heures Imputees").Activate <-- Ne sert qu'à ralentir encore plus le programme
  15.  
  16. If Worksheets("Heures Imputees").Range("d" & A).Value = N°AFFAIRE And CHAPITRE = "A02" Then
  17. HEURES = Worksheets("Heures Imputees").Cells(A, 7).Value + HEURES
  18. End If
  19.  
  20.  
  21. ' // Next A <-- En 2010, c'est l'indentation qui permet de ne pas confondre les Next.
  22. Next
  23.  
  24. End Sub


M'ouhais. Y'a trop de référence Worksheets/Range.
Au lieu de boucler de 2 à 2600, on va parcourir les cellules de D2 à D2600


  1. Sub Remplir_Bilan()
  2.  
  3. Dim cellule As Range
  4. Dim n°affaire As String
  5. Dim chapitre As String
  6. Dim heures As Integer
  7.  
  8. For Each cellule In Range("D2:D2600")
  9.  
  10. n°affaire = cellule.Value ' // On est en colonne D
  11. chapitre = cellule.Offset(, 1).Value ' // On est ici en colonne D+1 = E
  12. heures = cellule.Offset(, 2).Value ' // On est ici en colonne D+2 = F
  13.  
  14. ...
  15.  
  16. Next
  17.  
  18. End Sub


Alors, où met-on le bilan ?
Ben dans la feuille bilan, dans les colonnes A, B, C et D. On commence à 1. C'est moi qui décide :o 

  1. Dim cellule As Range
  2. Dim n°affaire As String
  3. Dim chapitre As String
  4. Dim heures As Integer
  5.  
  6. For Each cellule In Worksheets("Heures Imputees").Range("D2:D2600")
  7.  
  8. n°affaire = cellule.Value ' // On est en colonne D
  9. chapitre = cellule.Offset(, 1).Value ' // On est ici en colonne D+1 = E
  10. heures = cellule.Offset(, 2).Value ' // On est ici en colonne D+2 = F
  11.  
  12. ' Où ça ?
  13.  
  14. Dim cellule_bilan As Range
  15.  
  16. For Each cellule_bilan In Worksheets("Bilan").Range("A1:A:65536")
  17. If cellule_bilan.Value = n°affaire And cellule_bilan.Offset(, 1).Value = chapitre Then
  18. ' // On a trouvé
  19. cellule_bilan.Offset(, 2).Value = heures
  20. ' // Penser à sortir
  21. Exit For
  22. End If
  23. If cellule_bilan.Value = "" Then
  24. ' // On arrive sur une ligne vide sans avoir trouvé
  25. ' // --> Création
  26. cellule_bilan.Value = n°affaire
  27. cellule_bilan.Offset(, 1).Value = chapitre
  28. cellule_bilan.Offset(, 3).Value = cellule_bilan.Offset(, 3).Value + heures
  29. ' // Penser à sortir
  30. Exit For
  31. End If
  32. Next
  33.  
  34. Next


Comme t'expliques très mal, je ne me suis pas occupé de BE/SOFT. Mais peut-être qu'à la lumière de ce que je te propose tu vas savoir adapter.
Si oui, montre-nous comment tu fais.
Si non, ben réexplique mieux

:) 

Merci de ton aide et je suis desolé pour mon poste pas tres claire
a force de m'énervé dessus j'ai plus les idées clairs.

Enfin le code que tu m'as donné, j'ai bien reussi a comprendre ( enfin je pense) grace a tes commentaire .

donc tu as attribué a n°affaire et chapitre dans dans 1er partie du code
et ensuite tu viens dans la feuille Bilan ( que j'ai crée du meme coup )
comparer chaque affaire et chapitre et tu les regroupes, mais apres au niveau des heures je comprends pas bien tu as mis (ligne 28):

cellule_bilan.Offset(, 3).Value = heures

cette formule va t elle pas me remplacer les heures a chaque fois au lieu de les additionner ?

faudrait il que j'ecrive ? :

heures = cellule_bilan.Offset(, 3).Value + heures

voila j'espere avoir ete clair, plus lisible et encore merci pour ton aide

je viens d'executer ta commande , deja il y a du progres par rapport a moi mais sa marche pas encor,
puis je te contacter par mail et t'envoye mon fichier pour te montre ce que sa fait ?
Expert Programmation

Salut,

Rhoooooo. Mais bien sûr qu'il faut faire l'addition. désolé.

Non, je ne travaille pas pour toi, je n'accepterai pas tes fichiers par mail. Par principe.
En plus on a commencé sur le forum, quel intérêt aurait ce topic si on y trouvait que le début de l'explication.

Bon, on occupe de BE/SOFT maintenant ?

Salut, je voulais juste que tu vois ce que sa fait dans la feuille bilan, je vais donc essaye de te l'expliquer.
uen fois que j'ai compiler le programme, dans la page Bilan j'ai toutes les affaires an colonne A ( normal) mais deja il y a un probleme, car une meme affaire aparait plusieurs fois comme dans la feuille heures imputees ou chaque affaire aparait a chaque enregistrement d'heures differents.
ensuite sa me met le chapitre en colonne B( pas de probleme) et enfin les heures, sont sur 2 colonne bizzarment .

je te copie la feuille :

07.00.1311 A02 38 4
07.44.1285 A02 0 2
06.44.1232 A02 4
07.44.1396 A02 4 88
07.44.1305 A02 8 18
03.44.0892 A02 3
06.44.1223 A02 4 6
07.00.1311 L05 34 49
07.00.1288 L05 38 0
07.44.1325 A02 3 11
06.44.1365 A02 4 45
07.44.1325 L05 39
08.88.1436 L05 3 14
08.00.1436 A02 2 16
08.44.1447 A02 60 15
06.44.1178 0
06.44.1178 A02 0 16
05.44.1172 A02 5
06.44.1227 A02 1 2
06.44.1192 A02 7
05.44.1172 0
06.44.1192 0
06.44.1194 A02 7 2
07.44.1396 L05 24
05.00.1081 A02 7 9
08.44.1452 A02 1 66
08.44.1460 A02 24 7
06.00.1205 A02 2 7
06.00.1228 A02 14 2
07.00.1383 A02 4 73
07.44.1388 A02 28 21
07.00.1399 A02 11
07.00.1412 A02 39 3
07.00.1407 A02 7 7
07.44.1348 A02 4 1
07.00.1389 A02 2 33
07.22.0853 A02 1
08.44.1415 A02 53 50
07.44.1367 A02 6 10
08.22.0150 A02 49 7
08.00.1424 A02 68 74
08.44.1419 A02 42 7
07.00.1378 A02 4 10
08.44.1420 A02 1 4
08.44.1430 A02 7
06.00.1206 A02 12 7
07.88.1179 A02 4
07.00.1295 A02 7 2
07.00.1312 A02 1 15
07.44.1365 A02 12 7
07.00.1385 A02 6 2
07.00.1288 A02 2
06.00.1243 A02 35 2
08.00.1442 A02 70 77
08.00.1421 A02 5
08.44.1448 A02 3 17
08.00.1467 A02 3 6
08.00.1469 A02 41 18
08.02.20 A02 17 4
08.44.1459 A02 7 66
08.44.1433 A02 21 1
07.44.1406 A02 4 3
08.44.1478 A02 7 25
08.44.1468 A02 11
08.00.1498 A02 64
07.44.1346 A02 5 59
07.00.1322 A02 29 9
07.44.1353 A02 0 47
06.44.1225 A02 7
07.00.1401 A02 3 0
03.44.0892 L05 0
06.88.1030 L05 6
06.44.1232 L05 12
07.00.1279 A02 2
06.00.1240 A02 2 19
07.00.1284 A02 2
07.88.1179 L05 35
06.44.1217 A02 4
08.44.1414 A02 8 49
07.00.1401 L05 42
08.88.1352 L05 14
08.88.1331 A02 6
05.44.1139 A02 49
07.44.1360 A02 1 35
06.00.1226 A02 35
07.44.1409 A02 7 77
06.44.1198 A02 7
07.00.1334 A02 35 53
08.44.1444 A02 4 45
08.44.1426 A02 4 17
08.44.1441 A02 14 42
07.00.1334 11
08.00.1429 A02 3 42
08.00.1471 A02 62 35
08.00.1482 A02 26 115
07.44.1333 A02 2 14
06.44.1250 A02 5 1
08.99.91236 A02 3
08.44.1417 A02 28 14
06.44.1193 A02 7
08.44.1432 A02 1 49
07.22.0959 A02 2
08.99.9123 38
07.00.1300 A02 7 28
07.00.1340 A02 3 28
07.00.1323 A02 3
08.00.1416 A02 35 35
07.00.1393 A02 10 42
08.88.1336 A02 2
08.00.1423 A02 2 98
04.00.1035 A02 70 7
08.22.0585 D14 6 4
08.88.1421 D17 4
08.00.1429 L05 28 63
08.00.1462 A02 35 21
08.88.1482 D17 28
07.44.1347 A02 12
07.44.1330 A02 21 6
07.44.1342 A02 7 4
07.44.1381 A02 42 4
07.44.1341 A02 9
07.00.1392 A02 8
08.44.1446 A02 4
08.44.1437 A02 24 20
08.44.1431 A02 10 10
08.00.1455 A02 56 44
08.00.1456 A02 67 2
08.44.1454 A02 2
08.44.1470 A02 5
08.44.1475 A02 45 24
08.88.1432 A02 15
08.44.1483 A02 10
08.00.1492 A02 34
06.44.1218 A02 2
08.99.0001 A02 4 57
07.44.1348 L05 56
07.44.1318 A02 3
0

voila le resultat

et voici le code actuel:
  1. Sub Remplir_Bilan()
  2.  
  3.  
  4. Dim cellule As Range
  5. Dim n°affaire As String
  6. Dim chapitre As String
  7. Dim heures As Integer
  8. Dim nom_technicien As String
  9.  
  10. For Each cellule In Worksheets("Heures Imputees").Range("D2:D2600")
  11.  
  12. n°affaire = cellule.Value ' On est en colonne D
  13. chapitre = cellule.Offset(, 1).Value ' On est ici en colonne D+1 = E
  14. heures = cellule.Offset(, 2).Value ' On est ici en colonne D+2 = F
  15. nom_technicien = cellule.Offset(, -2).Value ' on est ici en colonne B2
  16. ' Où ça ?
  17.  
  18. Dim cellule_bilan As Range
  19.  
  20. For Each cellule_bilan In Worksheets("Bilan").Range("A3:A65536")
  21. If cellule_bilan.Value = n°affaire And cellule_bilan.Offset(, 1).Value = chapitre Then
  22. ' // On a trouvé
  23. cellule_bilan.Offset(, 2).Value = heures
  24. ' // Penser à sortir
  25. Exit For
  26. End If
  27. If cellule_bilan.Value = "" And nom_technicien = "BOB" Or "GARY Then
  28. ' j'ai rajouté une condition sur c'est 2 personne pour mettre les heures en colonne C (BE)
  29. ' // On arrive sur une ligne vide sans avoir trouvé
  30. ' // --> Création
  31. cellule_bilan.Value = n°affaire
  32. cellule_bilan.Offset(, 1).Value = chapitre
  33. heures = cellule_bilan.Offset(, 3).Value + heures ' j'ai modifie sa pour la somme des heures je sais pas si c'est bon
  34. 'cellule_bilan.Offset(, 3).Value = heures
  35. ' // Penser à sortir
  36. Else
  37. ' le reste des heures des autres techniciens en colonne D
  38. heures = cellule_bilan.Offset(, 4).Value + heures
  39.  
  40.  
  41. Exit For
  42. End If
  43. Next
  44.  
  45. Next
  46.  
  47. End Sub

j'ai un probleme au 2eme IF (L27) il me dit erreur 13 alors j'ai du faire une erreur
merci de continuer a m'aider
Expert Programmation

Citation :
merci de continuer a m'aider
Aïe, t'es tombé sur le modérateur. Alors il va falloir tout de suite m'éditer ton message. Je ne veux pas voir une seule ligne de code qui ne soit pas correctement balisé. Par principe, utilise la balise [fixed] pour présenter tes listes de données. La suite, dès que ton message est respectueux du règlement... [:zeb:4]

;) 
Expert Programmation

  1. nom_technicien = cellule.Offset(, -2).Value ' // on est ici en colonne B2
En colonne B, pas B2. C'est bon ?

--------------------

  1. If cellule_bilan.Value = "" And nom_technicien = "FROMAGE" Or "VINGT-CENT" Then
Mais non ! Là, tu testes :
  1. cellule_bilan.Value = ""
  2. nom_technicien = "FROMAGE"
  3. "VINGT-CENT"
Le Or n'est pas prioritaire.
Mettons des parenthèses pour voir comment VB calcule :
  1. If (( cellule_bilan.Value = "" ) And ( nom_technicien = "FROMAGE")) Or ("VINGT-CENT") Then
Tu vois bien que ("VINGT-CENT") n'est pas un test valide.
Tu serais tenté donc d'écrire ceci :
  1. If cellule_bilan.Value = "" And nom_technicien = ( "FROMAGE" Or "VINGT-CENT" ) Then
Encore raté !
("FROMAGE" Or "VINGT-CENT") n'est pas nonplus un test valide.

Voilà comment il faut l'écrire :
  1. If cellule_bilan.Value = "" And (nom_technicien = "FROMAGE" Or nom_technicien = "VINGT-CENT") Then


--------------------

Bon, sinon, c'est du grand n'importe quoi, ton code.
D'abord, c'est la ligne 23 qu'il faut changer pour y faire l'addition.
Ensuite il ne faut pas re-rechercher une ligne vide.

Il faut tenter de tout caser entre les lignes 22 et 24.
J'attends que tu me proposes quelques chose et on en reparle (pa'ce moi, je vais aller manger. Bon ap' )

Bon j'ai essaye de remettre les choses a leurs places ( desoler si c'est le "bordel" mais comme je l'ai dit je suis novice en programation )

  1. Sub Remplir_Bilan()
  2.  
  3.  
  4. Dim cellule As Range
  5. Dim n°affaire As String
  6. Dim chapitre As String
  7. Dim heures As Integer
  8. Dim nom_technicien As String
  9.  
  10. For Each cellule In Worksheets("Heures Imputees").Range("D2:D2600")
  11.  
  12. n°affaire = cellule.Value ' On est en colonne D
  13. chapitre = cellule.Offset(, 1).Value ' On est ici en colonne D+1 = E
  14. heures = cellule.Offset(, 2).Value ' On est ici en colonne D+2 = F
  15. nom_technicien = cellule.Offset(, -2).Value ' on est ici en colonne B
  16. ' Où ça ?
  17.  
  18. Dim cellule_bilan As Range
  19.  
  20. For Each cellule_bilan In Worksheets("Bilan").Range("A3:A65536")
  21. If cellule_bilan.Value = n°affaire And cellule_bilan.Offset(, 1).Value = chapitre And (nom_technicien = "BOB" Or nom_technicien = "GARY") Then
  22. ' j'ai rajouté une condition sur c'est 2 personne pour mettre les heures en colonne C (BE)
  23. ' // On a trouvé
  24. heures = cellule_bilan.Offset(, 3).Value + heures
  25. 'cellule_bilan.Offset(, 2).Value = heures
  26. ' // Penser à sortir
  27. ElseIf nom_technicien <> "BOB" Or nom_technicien <> "GARY" Then
  28. ' le reste des heures des autres techniciens en colonne D
  29. heures = cellule_bilan.Offset(, 4).Value + heures
  30.  
  31. Exit For
  32. End If
  33. If cellule_bilan.Value = "" Then
  34. ' // On arrive sur une ligne vide sans avoir trouvé
  35. ' // --> Création
  36. cellule_bilan.Value = n°affaire
  37. cellule_bilan.Offset(, 1).Value = chapitre
  38. cellule_bilan.Offset(, 3).Value = cellule_bilan.Offset(, 3).Value + heures
  39. ' // Penser à sortir
  40. Exit For
  41. End If
  42. Next
  43.  
  44. Next
  45.  
  46. End Sub


de ce que je comprends du code, j'ai pas l'impression qu'il reunisse les memes affaires dans une seul cellule dans le feuille Bilan
sinon depuis que j'ai modife le code, il m'affiche pas d'erreur mais ne veut pas se compiler alors je sais pas ou chercher l'erreur

petite explication du resultat voulue si sa t'interesse:
le resultat souhaité c'est d'avoir le total des heures pour une affaire donc que l'affaire aparaisse qu'une fois avec le total heure BE et SOFT
sachant que dans la feuille heures imputees une affaire aparait a chaque enregistrement d'heure. ( j'espere avoir ete clair dans mon explication, si tu veux que copie la feuille heures imputées pour mieu visualiser dit le moi)

une fois que j'aurai recupére toutes les infos dans le format


N°AFFAIRE CHAPITRE HEURES
BE SOFT TEST MER
XX.XX.XXXX YY ZZ FF


je vais faire un tableau croisé dynamique pour pouvoir visualiser directemetn le totals des heures pour une affaire en BE et SOFT selon le type de chapitre
voila l'objectif pour mon fichier.


merci de toujours bien vouloire continuer a m'aider ( nouvelle citation :D  )

j'ai compris je vais essaye sa tout de suite, mais il me paraissait plus simple de mettre en condition les bob et gary, car la je dois ecrire tous les autres techniciens enfin c'est pas grave si tu penses que c'est mieu pour le code, je vais tester

ah je viens de voir case else = tous les autres techniciens ?

Bon deja je suis content j'arrive a avoir une somme de mes heures par affaire avec un enregistrement par chapitre ( merci pour sa, rien que d'avancer sa fait plaisir), mais le probleme c'est que sa me fait la somme globale et ne prend pas en compte la difference entre les BOB GARY et les autres techniciens, il me met tout en colonne SOFT ( D ), je suis entrain de reflechir pourquoi en modifiant les case et en testant je te previens si je trouve,

si tu as une idee previen moi stp

merci a toi en tout cas

Salut
voila, j'ai toujours pas reussi a resoudre le probleme, le selecte case marche pas, donc l'addition se fait sur les heures total par chapitres sans distrinction du BE et SOFT, si tu as une idee
( apres que mon tuteur soit passé, il ma demande de declaré 10 soft ( SOFT1, SOFT2, BE ( BE1, BE2)...... pour pouvoir les changers facilement,
et je n'arrive pas a attribuer BE = BE1 or BE = BE2 avec BE1 = TOTO BE2 = TETE, lorsque sa marchera je mettrait sa comme sa dans le selecte

  1. Select Case technicien
  2. Case BE: x = 3
  3. Case SOFT: x = 3
  4. Case Else: x = 4
  5. End Select


enfin pour l'instant j'ai toujours pas reussi a faire marcher le select inital que tu m'as proposé ( additionne la total comme si il prenait toujours case else)
et a attribue les SOFT et BE

merci de m'aider
Expert Programmation

Salut,

Ose me dire que tu n'as pas mis Option Explicit au début de ton code
:fou:  :fou:  :fou:  [:zeb:4]

Ensuite, regarde MON code, puis le TIEN :
  1. Select Case technicien
  2. ' // nice code by zeb
  3. Case "BOB", "GARY": x = 2
  4. ' // bad code by aprentizorrrr
  5. Case BE: x = 3
  6. Case SOFT: x = 3
Au jeu des 7 différences, j'en vois deux. L'une est sans importance, l'autre est la solution à ton problème.
Expert Programmation

M'enfin, sans les guillemets, ça ne peut pas fonctionner ? :( 
Sauf que tu n'as pas remis tout ton code, c'est peut-être pour ça ;) 

Pour rappel, Option Explicit permet de signaler certaines fautes de syntaxe.
Pour les fautes d'orthographe, VB ne peut rien :lol: 

Citation :
et c'est urgent

Citation :
Nous ne traitons pas les problèmes urgents.

As-tu pu résoudre ce problème dans les temps ?


A te lire bientôt
:hello: 

bin j'ai jusqu'a vendredi pour finir, mais je suis passe a une autre etape, la, j'essaye de faire la meme chose mais en regroupant les bilans de 2005 a 2010, donc c'est pas facile, mais mon tuteur voulait d'abor par année, donc j'ai plus qu'a mettre le module dans chaque bilan et a copier la feuille bilan et faire le tableau croisé dynamique de la feuille bilan, ensuite je dois faire un bilan inter années, mais je bloque un peu, et apres j'ai un planning ou toutes les affaires sont ecrite et il faudra que sa remplisse les heures automatiquements.

je sais pas si tu as compris lol, enfin mon 1er probleme est resolue et oui sans guillement

  1. Select Case technicien
  2. Case BE1, BE2: x = 3
  3. Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 4
  4. Case Else: x = 5
  5. End Select


parcontre j'ai pas reussi a mettre BE = BE1 or BE = BE2 pareil pour soft, enfin c'est pas grave quand mon tuteur devra modifier le programme avec de nouveaux employés en soft il ma dit de lui laisse 10 places donc il aura qu'a renseigner les declaration des softs vides et en BE je lui en mttrai d'autre si il veut.

voila tu sais ce que je vais essayer de faire maintenant
Expert Programmation

A la lumière de tes explications, j'ai un gros doute !

Que sont BE1, BE2, SOFT1, etc (au sens VB) et comment sont-ils définis ?
Y'a-t-il bien écrit Option Explicit au début de ton code ?

il y a bien option explicit,
BE1, BE2, SOFT1.... sont declarées en STRING
BE1= "TOTO"
BE2= "BOB"
STOFT1 = "GARY"

et sa marche

je suis maintenant en lutte pour faire la meme chose qu'on a fait pour la feuille bilan, mais a partir des feuilles "heures imputees" de chaque fichier bilan pointage de 2005 a 2008
Expert Programmation

Ah, ouf. C'est donc Ok.

Citation :
je suis maintenant en lutte pour faire la meme chose
Exactement la même chose ?
Parce que si c'est le cas, alors c'est trop facile !

Au lieu d'un Remplir_Bilan() dans le code de la feuille Heures Imputees, on met tout ça dans le code du classeur (ThisWorkbook), et on le modifie un tout petit peu pour en faire : Remplir_Bilan(feuille_source As Worksheet) :

  1. ' // Dans le classeur
  2. Sub Remplir_Bilan_From(feuille_source As Worksheet)
  3.  
  4. Dim ...
  5.  
  6. For Each cellule In feuille_source.Range("D2:D2600" )
  7. ....
  1. ' // Et dans chaque feuille
  2. Sub Remplir_Bilan()
  3. Remplir_Bilan_From(me)
  4. End Sub


Reste à voir si la cible est toujours la colonne A de la feuille Bilan.

J'ai pas tout compris a ton code,
je voudrais faire la meme chose pour chaque feuille "heures impputees" de differents fichiers excel, si c'est que tu m'as ecri alors je vais encore me creuse la tete pour comprendre, sinon mon tuteur ma demande un ptit truc a rajouter:

si chapitre = A02 alors on change rien, si chapitre = L05 alors x= 5 (colonne F , heures de mise en route)

alors j'ai fait ce 2 ptit codes qui me donne le meme resultat, si il y a du L05 sa le met dans la bonne colonne F mais une ligne en dessous, c'est a dire sa rajoute un enregistrement:
  1. If chapitre = "L05" Then
  2. x = 5
  3. Else
  4. Select Case technicien
  5. Case BE1, BE2: x = 3
  6. Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 4
  7. End Select
  8. End If


OU

  1. If chapitre = "A02" Then
  2. Select Case technicien
  3. Case BE1, BE2: x = 3
  4. Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 4
  5. Case Else: x = 5
  6. End Select
  7. ElseIf chapitre = "L05" Then
  8. Select Case technicien
  9. Case BE1, BE2: x = 5
  10. Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 5
  11. Case Else: x = 5
  12. End Select
  13. End If

alors j'ai essaye de tourne sa dans tous les sens pour avoir les heures L05 sur la meme ligne que les A02 pour avoir une seule ligne par affaire mais rien y fait :pt1cable: 

donc voila si tu as une idée, en attendant vais essayer de comprendre ce que tu m'as proposé

merci
Expert Programmation

Indente bien ton code. La forme quand on peine sur le fond, c'est primordial ;) 

  1. ' // Code bien compliqué
  2. Select Case technicien
  3. Case BE1, BE2: x = 5
  4. Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 5
  5. Case Else: x = 5
  6. End Select
  1. ' // Code équivalent plus simple
  2. x = 5


Dans le premier code, il manque la clause Case Else
Dans le second, même s'il peut être simplifié ( ;)  ), ça devrait être bon.

Moi, j'aime pas les If ... ElseIf sur une même variable. Je préfère les Select Case. Question de goût.

  1. Select Case chapitre
  2. Case "A02"
  3. Select Case technicien
  4. Case BE1, BE2: x = 3
  5. Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 4
  6. Case Else: x = 5
  7. End Select
  8. Case "L05"
  9. x = 5
  10. End Select


Une autre façon de programmer est celle-ci. On traite le cas général que l'on amende par les cas particuliers :
  1. x = 5
  2. If chapitre = "A02" Then
  3. Select Case technicien
  4. Case BE1, BE2: x = 3
  5. Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 4
  6. End Select
  7. End If


Ça devrait fonctionner !

================================


Quant à tes classeurs différents, je n'avais effectivement pas compris.

Quizz !
Que ce passe-t-il si tu exécutes ce code ?
  1. MsgBox Range("A1").Value

Celui-ci ?
  1. MsgBox Worksheets("Feuil1").Range("A1").Value

Celui-là ?
  1. MsgBox Workbooks("Classeur1").Worksheets("Feuil1").Range("A1").Value

j'ai teste tes code et j'ai toujours le meme probleme, lorsque une affaire a du A02 et du L05, il y a 2 enregistrement, affaire A02 heures
et affaire L05 heure, c'est dans les bonnes colonnes mais sa veut toujours pas se mettre sur la meme ligne:
peut etre cela vien t'il de laffichage de la colonne chapitre, si elle du A02, on peut pas lui mettre du L05, je verifie sa demain je dois partire repeindre mon apart,

bonne soire

Bonjour,

Le code qu'on a fait, il est dans un module, n'ont pas dans une feuille, pour le probleme de ligne A02 ET L05, je laisse tomber pour le moment mon chef m'a dit de continuer que pour l'instant il s'enfoutait.

Alors voila, la j'ai fait pour le bilan 2008, je vais devoir maintenant recupere les heures SOFT et BE de tous les bilans ( 2005 à 2010) et les mettrent dans un autre fichier(DIGEST), ou il y a deja toutes les affaire renseigner, mais ou il faut que je complete les heures SOFT ET BE

alors je pense partir du module qu'on a créé et faire une extraction de chaque fichier bilan 20XX ( ils contiennent tous une feuille "heures imputee")
et de comparer les affaires aux digest, et d' y mettre les heures SOFT et BE dans les colonnes déterminées.

je dois donc arriver a recupere les heures de chaque affaire et les mettre dans BEE ou SOFT,
( une affaire peut aparaitre dans plusieurs bilans)

voila si tu as une idée je serai ravie que tu m'aide encore
je suis entrain d'y reflechir, mais pour l'instant pas de solution probante

ps: je viens de voir, qd je copie ma feuille, la structure est toute difformé le [feuille] [/feuille] ne permet pas de garder la structure des pages excel ?
Expert Programmation

Citation :
j'ai modifie mais sa n'a pas change grand chose,
:D 

Dis donc, c'est sûr que tu veux laisser les données de ta boîte ici. :/ 
Anonymise-moi tout ça, s'il te plaît.

Qu'est-ce que je peux faire de plus ?

Re, voila j'ai farfouiller sur le net, et je n'ai pas trouve de solution satisfesante a mon probleme ( qui marche) lol
donc je galere si tu peux me mettre sur une piste.

autre petit probleme, mon tuteur veut que les affaires aparaissents en orde decroissantes, je me suis dis je vais utilise l'enregistreur de macro vue que je m'en suis jamais servie et sa me donne ce code:

  1. Sub Macro13()
  2.  
  3.  
  4. Columns("A:A").Select
  5. Range("A1:F735").Sort Key1:=Range("A3"), Order1:=xlDescending, Header:= _
  6. xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  7. DataOption1:=xlSortNormal
  8. End Sub

je l'ai mis apres mon programme, et elle ne marche pas, il me dit erreur 1004, cette macro requiert que les cellules fusionnées soient de taille identique, or je n'ai fusionne que les titres et j'ai mis hors titres alors je comprends pas trop

voila je suis encore et toujours en galere :pt1cable: 
Expert Programmation

Bonne initiative.

Ouvre l'aide de Sort et trouve-moi les valeurs par défaut de chaque option.
Ensuite, vire les options dont les valeurs sont à leur défaut.

A quoi sert la ligne 4 ?

Si tu as des lignes fusionnées, retire-les du Range. S'il s'agit du titre, retire-le quand même, et mets Header à faux.

Que des choses évidentes, non ? ;) 

salut voila sa marche j'ai mis sa a la fin du code

  1. Range("A3:F735").Sort Key1:=Range("A3"), Order1:=xlDescending, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  2. DataOption1:=xlSortNormal


il me mets bien dans l'odre decroissant, je repars plancher sur mon probleme d'extraction des données,
la j'ai fait le bilan 2008 et 2009 ( c'est 2 fichiers distinct, je vais essaye maintenant d'extraire les heures de ces bilans et de les renseigner dans mon DIGEST

Digest: feuille d'un autre fichier excel ou toutes les affaires sont ecrites et je dois remplire les colonnes BE et SOFT, sachant qu'une affaire peut etre en bilan 2008 et bilan 2009

j'ai cherche a droite a gauche et dans l'aide et je trouve pas de bonne explication sur le 'comment faire une extraction de données ' quelqu'un aurait pas un site qui explique les bases ou un cours sur le net pour que je puisse comprendre et le faire pour mon probleme svp
Lassé par la pub ? Créez un compte