VB Excel

VB Excel - VB/VBA/VBS - Programmation

Marsh Posté le 01-04-2012 à 12:33:54    

Bonjour,  
 
Je débute un peu en Visual Basic et j'en ai besoin pour faciliter des calculs sur Excel.
 
Voila le tableau dans lequel j'entre les valeurs. Le but est de calculer la somme des différentes longueurs, selon l'orientation de la facette (Nord, Ouest, ...) et la zone à laquelle elle appartient, et ce pour chaque étage d'un bâtiment (N0, N1, ...)
http://img651.imageshack.us/img651/7620/donnes.jpg
Les sommes des différentes longueurs ont été faites après l'exécution de la macro, pour vérifier les résultats.
 
Pour l'instant j'ai réussi à le faire avec un code assez immonde, mais il faut mettre en forme à chaque fois le tableau de résultats.
 

Code :
  1. For N = 0 To 9 Step 3  'pour les 3 étages du bâtiment
  2. For A = 0 To 9
  3.     If Cells(35 + A, 2 + N) <> 0 Then Cells(35 + A, 1 + N) = 0 'remise à 0 des cellules résultat'
  4.    
  5. Next A
  6. For i = 3 To 31
  7.    
  8.     If Cells(i, 2 + N) = Cells(35, 2 + N) And Cells(i, 3 + N) = Cells(35, 3 + N) Then
  9.         Cells(35, 1 + N) = Cells(35, 1 + N) + Cells(i, 1 + N)
  10.     End If
  11.    
  12.     If Cells(i, 2 + N) = Cells(36, 2 + N) And Cells(i, 3 + N) = Cells(36, 3 + N) Then
  13.         Cells(36, 1 + N) = Cells(36, 1 + N) + Cells(i, 1 + N)
  14.     End If
  15.    
  16.     If Cells(i, 2 + N) = Cells(37, 2 + N) And Cells(i, 3 + N) = Cells(37, 3 + N) Then
  17.         Cells(37, 1 + N) = Cells(37, 1 + N) + Cells(i, 1 + N)
  18.     End If
  19.    
  20.     If Cells(i, 2 + N) = Cells(38, 2 + N) And Cells(i, 3 + N) = Cells(38, 3 + N) Then
  21.         Cells(38, 1 + N) = Cells(38, 1 + N) + Cells(i, 1 + N)
  22.     End If
  23.    
  24.     If Cells(i, 2 + N) = Cells(39, 2 + N) And Cells(i, 3 + N) = Cells(39, 3 + N) Then
  25.         Cells(39, 1 + N) = Cells(39, 1 + N) + Cells(i, 1 + N)
  26.     End If
  27.    
  28.     If Cells(i, 2 + N) = Cells(40, 2 + N) And Cells(i, 3 + N) = Cells(40, 3 + N) Then
  29.         Cells(40, 1 + N) = Cells(40, 1 + N) + Cells(i, 1 + N)
  30.     End If
  31.    
  32.     If Cells(i, 2 + N) = Cells(41, 2 + N) And Cells(i, 3 + N) = Cells(41, 3 + N) Then
  33.         Cells(41, 1 + N) = Cells(41, 1 + N) + Cells(i, 1 + N)
  34.     End If
  35.    
  36.     If Cells(i, 2 + N) = Cells(42, 2 + N) And Cells(i, 3 + N) = Cells(42, 3 + N) Then
  37.         Cells(42, 1 + N) = Cells(42, 1 + N) + Cells(i, 1 + N)
  38.     End If
  39.    
  40.     If Cells(i, 2 + N) = Cells(43, 2 + N) And Cells(i, 3 + N) = Cells(43, 3 + N) Then
  41.         Cells(43, 1 + N) = Cells(43, 1 + N) + Cells(i, 1 + N)
  42.     End If
  43.    
  44.     If Cells(i, 2 + N) = Cells(44, 2 + N) And Cells(i, 3 + N) = Cells(44, 3 + N) Then
  45.         Cells(44, 1 + N) = Cells(44, 1 + N) + Cells(i, 1 + N)
  46.     End If
  47.    
  48. Next i
  49. Next N


 
Les résultats doivent s'afficher dans un tableau qu'il faut mettre en place à l'avance :
http://img163.imageshack.us/img163/9589/miseenforme.jpg
 
Le tableau de résultats s'affiche au final sous cette forme :
http://img525.imageshack.us/img525/3793/rsultats.jpg
Encore une fois, les sommes des longueurs n'ont qu'un but de vérification.
 
 
mon but : ne plus avoir à mettre en forme le tableau de résultats, pour que les sommes se fassent directement avec l'affichage de l'orientation et de la zone correspondante, pour les 3 étages
 
 
Auriez-vous des pistes pour m'aider ?  
 
Merci d'avance.


Message édité par clem_tj77 le 01-04-2012 à 13:08:06
Reply

Marsh Posté le 01-04-2012 à 12:33:54   

Reply

Marsh Posté le 03-04-2012 à 08:46:47    

Bonjour,
 
Voilà un exemple de code pour ton projet. Le code reste tout de même à tester dans divers cas de figure et à améliorer si nécessaire.
 

Code :
  1. Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  2. '***************************'
  3. '* Exemple de mise en page *'
  4. '***************************'
  5. 'Réinitialisation de la borduration'
  6. Range("A:L" ).Borders.LineStyle = xlNone
  7. 'Renseignement des cellules'
  8. Range("A2,D2,G2,J2" ) = "Longueur"
  9. Range("B2,E2,H2,K2" ) = "Orientation"
  10. Range("C2,F2,I2,L2" ) = "Zone"
  11. 'Aignement des cellules'
  12. Range("A2:L2" ).HorizontalAlignment = xlCenter
  13. 'Ajustement largeur des colonne'
  14. Range("A2:L2" ).Columns.AutoFit
  15. 'Borduration des titres'
  16. With Range("A2:L2" ).Borders(xlEdgeTop)
  17.     .LineStyle = xlContinuous
  18.     .ColorIndex = xlAutomatic
  19.     .TintAndShade = 0
  20.     .Weight = xlMedium
  21. End With
  22. 'Borduration du total en A'
  23. With Range("A65535" ).End(xlUp).Borders(xlEdgeTop)
  24.     .LineStyle = xlContinuous
  25.     .ColorIndex = xlAutomatic
  26.     .TintAndShade = 0
  27.     .Weight = xlMedium
  28. End With
  29. 'Borduration du total en D'
  30. With Range("D65535" ).End(xlUp).Borders(xlEdgeTop)
  31.     .LineStyle = xlContinuous
  32.     .ColorIndex = xlAutomatic
  33.     .TintAndShade = 0
  34.     .Weight = xlMedium
  35. End With
  36. 'Borduration du total en G'
  37. With Range("G65535" ).End(xlUp).Borders(xlEdgeTop)
  38.     .LineStyle = xlContinuous
  39.     .ColorIndex = xlAutomatic
  40.     .TintAndShade = 0
  41.     .Weight = xlMedium
  42. End With
  43. 'Borduration du total en J'
  44. With Range("J65535" ).End(xlUp).Borders(xlEdgeTop)
  45.     .LineStyle = xlContinuous
  46.     .ColorIndex = xlAutomatic
  47.     .TintAndShade = 0
  48.     .Weight = xlMedium
  49. End With
  50. 'Borduration verticale'
  51. Dim LastCell As Integer
  52. LastCell = ActiveSheet.UsedRange.Rows.Count
  53. With Range("C2:C" & LastCell).Borders(xlEdgeRight)
  54.     .LineStyle = xlContinuous
  55.     .ColorIndex = xlAutomatic
  56.     .TintAndShade = 0
  57.     .Weight = xlMedium
  58. End With
  59. With Range("F2:F" & LastCell).Borders(xlEdgeRight)
  60.     .LineStyle = xlContinuous
  61.     .ColorIndex = xlAutomatic
  62.     .TintAndShade = 0
  63.     .Weight = xlMedium
  64. End With
  65. With Range("I2:I" & LastCell).Borders(xlEdgeRight)
  66.     .LineStyle = xlContinuous
  67.     .ColorIndex = xlAutomatic
  68.     .TintAndShade = 0
  69.     .Weight = xlMedium
  70. End With
  71. End Sub


 
@+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed