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 :
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
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 :
Option Explicit
Dim N°AFFAIRE As String
Dim CHAPITRE As String
Dim HEURES As Integer
Sub Remplir_Bilan()
' Définition des variables générales
Dim A As Integer
HEURES = 0
CHAPITRE = Worksheets("Heures Imputees").Range("E").Value
'Rechercher les heures Imputées sur N°AFFAIRE & CHAPITRE
Worksheets("Heures Imputees").Activate
For A = 2 To 2600
Worksheets("Heures Imputees").Activate
If (Worksheets("Heures Imputees").Range("d" & A).Value = N°AFFAIRE) And CHAPITRE = "A02" Then
HEURES = Worksheets("Heures Imputees").Cells(A, 7).Value + HEURES
End If
Next A
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
Autres pages sur : besoin aide prog vba excel faires totals selection
Lassé par la pub ? Créez un compte
Meilleure solution
Bon, tu m'as foutu la chienlit dans mon si zoli code. Je repars du mien.
Dim cellule As Range
Dim n°affaire As String
Dim chapitre As String
Dim heures As Integer
Dim cellule_bilan As Range
Dim technicien As String
Dim x As Integer ' // Décalage de colonne
For Each cellule In Worksheets("Heures Imputees").Range("D2:D2600")
n°affaire = cellule.Offset(, 0).Value
chapitre = cellule.Offset(, 1).Value
heures = cellule.Offset(, 2).Value
technicien = cellule.Offset(, -2).Value
Select Case technicien
Case "BOB", "GARY": x = 2
Case "FROMAGE": x = 4
Case Else: x = 3
End Select
For Each cellule_bilan In Worksheets("Bilan").Range("A2:A65536")
If cellule_bilan.Offset(, 0).Value = n°affaire And _
cellule_bilan.Offset(, 1).Value = chapitre _
Then
cellule_bilan.Offset(, x).Value = cellule_bilan.Offset(, x).Value _
+ heures
Exit For
End If
If cellule_bilan.Value = "" _
Then
cellule_bilan.Offset(, 0).Value = n°affaire
cellule_bilan.Offset(, 1).Value = chapitre
cellule_bilan.Offset(, x).Value = cellule_bilan.Offset(, x).Value _
+ heures
Exit For
End If
Next
Next
J'use d'un Select Case. C'est moins chiant que des If .. ElseIf en cascade.
T'as tout compris ?
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é
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 !
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
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
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
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é
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 !
Sub Remplir_Bilan() ' // Les variables se déclarent localement Dim N°AFFAIRE As String Dim CHAPITRE As String Dim HEURES As Integer Dim A As Integer HEURES = 0 CHAPITRE = Worksheets("Heures Imputees").Range("E").Value ' // <-- Manque pas un bout, là, dans l'adresse ? ' // Worksheets("Heures Imputees").Activate <-- Ne sert qu'à ralentir le programme For A = 2 To 2600 ' // Worksheets("Heures Imputees").Activate <-- Ne sert qu'à ralentir encore plus le programme If Worksheets("Heures Imputees").Range("d" & A).Value = N°AFFAIRE And CHAPITRE = "A02" Then HEURES = Worksheets("Heures Imputees").Cells(A, 7).Value + HEURES End If ' // Next A <-- En 2010, c'est l'indentation qui permet de ne pas confondre les Next. Next 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
Sub Remplir_Bilan() Dim cellule As Range Dim n°affaire As String Dim chapitre As String Dim heures As Integer For Each cellule In Range("D2:D2600") n°affaire = cellule.Value ' // On est en colonne D chapitre = cellule.Offset(, 1).Value ' // On est ici en colonne D+1 = E heures = cellule.Offset(, 2).Value ' // On est ici en colonne D+2 = F ... Next 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
Dim cellule As Range Dim n°affaire As String Dim chapitre As String Dim heures As Integer For Each cellule In Worksheets("Heures Imputees").Range("D2:D2600") n°affaire = cellule.Value ' // On est en colonne D chapitre = cellule.Offset(, 1).Value ' // On est ici en colonne D+1 = E heures = cellule.Offset(, 2).Value ' // On est ici en colonne D+2 = F ' Où ça ? Dim cellule_bilan As Range For Each cellule_bilan In Worksheets("Bilan").Range("A1:A:65536") If cellule_bilan.Value = n°affaire And cellule_bilan.Offset(, 1).Value = chapitre Then ' // On a trouvé cellule_bilan.Offset(, 2).Value = heures ' // Penser à sortir Exit For End If If cellule_bilan.Value = "" Then ' // On arrive sur une ligne vide sans avoir trouvé ' // --> Création cellule_bilan.Value = n°affaire cellule_bilan.Offset(, 1).Value = chapitre cellule_bilan.Offset(, 3).Value = cellule_bilan.Offset(, 3).Value + heures ' // Penser à sortir Exit For End If Next 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 ?
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 ?
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 ?
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:
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
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:
Sub Remplir_Bilan()
Dim cellule As Range
Dim n°affaire As String
Dim chapitre As String
Dim heures As Integer
Dim nom_technicien As String
For Each cellule In Worksheets("Heures Imputees").Range("D2:D2600")
n°affaire = cellule.Value ' On est en colonne D
chapitre = cellule.Offset(, 1).Value ' On est ici en colonne D+1 = E
heures = cellule.Offset(, 2).Value ' On est ici en colonne D+2 = F
nom_technicien = cellule.Offset(, -2).Value ' on est ici en colonne B2
' Où ça ?
Dim cellule_bilan As Range
For Each cellule_bilan In Worksheets("Bilan").Range("A3:A65536")
If cellule_bilan.Value = n°affaire And cellule_bilan.Offset(, 1).Value = chapitre Then
' // On a trouvé
cellule_bilan.Offset(, 2).Value = heures
' // Penser à sortir
Exit For
End If
If cellule_bilan.Value = "" And nom_technicien = "BOB" Or "GARY Then
' j'ai rajouté une condition sur c'est 2 personne pour mettre les heures en colonne C (BE)
' // On arrive sur une ligne vide sans avoir trouvé
' // --> Création
cellule_bilan.Value = n°affaire
cellule_bilan.Offset(, 1).Value = chapitre
heures = cellule_bilan.Offset(, 3).Value + heures ' j'ai modifie sa pour la somme des heures je sais pas si c'est bon
'cellule_bilan.Offset(, 3).Value = heures
' // Penser à sortir
Else
' le reste des heures des autres techniciens en colonne D
heures = cellule_bilan.Offset(, 4).Value + heures
Exit For
End If
Next
Next
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
Citation :
merci de continuer a m'aider![[:zeb:4] [:zeb:4]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/e9/8b/zeb:4.gif)
En colonne B, pas B2. C'est bon ?
nom_technicien = cellule.Offset(, -2).Value ' // on est ici en colonne B2
--------------------
Mais non ! Là, tu testes :
If cellule_bilan.Value = "" And nom_technicien = "FROMAGE" Or "VINGT-CENT" Then
Le Or n'est pas prioritaire.
cellule_bilan.Value = "" nom_technicien = "FROMAGE" "VINGT-CENT"
Mettons des parenthèses pour voir comment VB calcule :
Tu vois bien que ("VINGT-CENT") n'est pas un test valide.
If (( cellule_bilan.Value = "" ) And ( nom_technicien = "FROMAGE")) Or ("VINGT-CENT") Then
Tu serais tenté donc d'écrire ceci :
Encore raté !
If cellule_bilan.Value = "" And nom_technicien = ( "FROMAGE" Or "VINGT-CENT" ) Then
("FROMAGE" Or "VINGT-CENT") n'est pas nonplus un test valide.
Voilà comment il faut l'écrire :
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 )
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
)
Sub Remplir_Bilan()
Dim cellule As Range
Dim n°affaire As String
Dim chapitre As String
Dim heures As Integer
Dim nom_technicien As String
For Each cellule In Worksheets("Heures Imputees").Range("D2:D2600")
n°affaire = cellule.Value ' On est en colonne D
chapitre = cellule.Offset(, 1).Value ' On est ici en colonne D+1 = E
heures = cellule.Offset(, 2).Value ' On est ici en colonne D+2 = F
nom_technicien = cellule.Offset(, -2).Value ' on est ici en colonne B
' Où ça ?
Dim cellule_bilan As Range
For Each cellule_bilan In Worksheets("Bilan").Range("A3:A65536")
If cellule_bilan.Value = n°affaire And cellule_bilan.Offset(, 1).Value = chapitre And (nom_technicien = "BOB" Or nom_technicien = "GARY") Then
' j'ai rajouté une condition sur c'est 2 personne pour mettre les heures en colonne C (BE)
' // On a trouvé
heures = cellule_bilan.Offset(, 3).Value + heures
'cellule_bilan.Offset(, 2).Value = heures
' // Penser à sortir
ElseIf nom_technicien <> "BOB" Or nom_technicien <> "GARY" Then
' le reste des heures des autres techniciens en colonne D
heures = cellule_bilan.Offset(, 4).Value + heures
Exit For
End If
If cellule_bilan.Value = "" Then
' // On arrive sur une ligne vide sans avoir trouvé
' // --> Création
cellule_bilan.Value = n°affaire
cellule_bilan.Offset(, 1).Value = chapitre
cellule_bilan.Offset(, 3).Value = cellule_bilan.Offset(, 3).Value + heures
' // Penser à sortir
Exit For
End If
Next
Next
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
)
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 ?
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
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
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
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
Select Case technicien
Case BE: x = 3
Case SOFT: x = 3
Case Else: x = 4
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
Salut,
Ose me dire que tu n'as pas mis Option Explicit au début de ton code
![[:zeb:4] [:zeb:4]]()
Ensuite, regarde MON code, puis le TIEN :
Ose me dire que tu n'as pas mis Option Explicit au début de ton code
![[:zeb:4] [:zeb:4]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/e9/8b/zeb:4.gif)
Ensuite, regarde MON code, puis le TIEN :
Au jeu des 7 différences, j'en vois deux. L'une est sans importance, l'autre est la solution à ton problème.
Select Case technicien ' // nice code by zeb Case "BOB", "GARY": x = 2 ' // bad code by aprentizorrrr Case BE: x = 3 Case SOFT: x = 3
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
As-tu pu résoudre ce problème dans les temps ?
A te lire bientôt
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
Citation :
et c'est urgentCitation :
Nous ne traitons pas les problèmes urgents.As-tu pu résoudre ce problème dans les temps ?
A te lire bientôt
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
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
je sais pas si tu as compris lol, enfin mon 1er probleme est resolue et oui sans guillement
Select Case technicien
Case BE1, BE2: x = 3
Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 4
Case Else: x = 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
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
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
Ah, ouf. C'est donc Ok.
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) :
Reste à voir si la cible est toujours la colonne A de la feuille Bilan.
Citation :
je suis maintenant en lutte pour faire la meme choseParce 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) :
' // Dans le classeur Sub Remplir_Bilan_From(feuille_source As Worksheet) Dim ... For Each cellule In feuille_source.Range("D2:D2600" ) ....
' // Et dans chaque feuille Sub Remplir_Bilan() Remplir_Bilan_From(me) 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:
OU
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
donc voila si tu as une idée, en attendant vais essayer de comprendre ce que tu m'as proposé
merci
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:
If chapitre = "L05" Then
x = 5
Else
Select Case technicien
Case BE1, BE2: x = 3
Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 4
End Select
End If
OU
If chapitre = "A02" Then
Select Case technicien
Case BE1, BE2: x = 3
Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 4
Case Else: x = 5
End Select
ElseIf chapitre = "L05" Then
Select Case technicien
Case BE1, BE2: x = 5
Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 5
Case Else: x = 5
End Select
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
donc voila si tu as une idée, en attendant vais essayer de comprendre ce que tu m'as proposé
merci
Indente bien ton code. La forme quand on peine sur le fond, c'est primordial
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.
Une autre façon de programmer est celle-ci. On traite le cas général que l'on amende par les cas particuliers :
Ç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 ?
Celui-ci ?
Celui-là ?
' // Code bien compliqué Select Case technicien Case BE1, BE2: x = 5 Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 5 Case Else: x = 5 End Select
' // Code équivalent plus simple 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.
Select Case chapitre Case "A02" Select Case technicien Case BE1, BE2: x = 3 Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 4 Case Else: x = 5 End Select Case "L05" x = 5 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 :
x = 5 If chapitre = "A02" Then Select Case technicien Case BE1, BE2: x = 3 Case SOFT1, SOFT2, SOFT3, SOFT4, SOFT5, SOFT6, SOFT7, SOFT8, SOFT9, SOFT10: x = 4 End Select 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 ?
MsgBox Range("A1").Value
Celui-ci ?
MsgBox Worksheets("Feuil1").Range("A1").Value
Celui-là ?
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
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 ?
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 ?
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:
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
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:
Sub Macro13()
Columns("A:A").Select
Range("A1:F735").Sort Key1:=Range("A3"), Order1:=xlDescending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
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
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 ?
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
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
Range("A3:F735").Sort Key1:=Range("A3"), Order1:=xlDescending, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
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
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumPetite aide vba excel
- ForumExcel 2010 ou est la prog vba
- ForumSelection cellule vba excel
- ForumSelection d'une feuille vba excel
- ForumAide sur projet vba excel
- ForumAide programmation vba dans excel
- ForumSelection plage vba excel
- ForumVba excel copier une selection
- ForumMacro vba excel graphique selection donnã es
- ForumVba excel selection plage cellules
- Voir plus