Macro recherche d'un espace + somme de colonnes

Thornhegel Messages postés 156 Statut Membre -  
Thornhegel Messages postés 156 Statut Membre -
Bonjour,
J'aimerais créer un nouvel indicateur sur un fichier Excel existant qui me permettrait de connaître la somme de différentes colonnes, entre 2 espaces. Je vous écris un exemple en dessous pour que cela soit plus clair :



Ici, j'aimerais qu'une macro me renvoie (quelque soit la forme), OP1 = 2.75 ; OP2 = 16 ; OP3 = 5.5 ; OP4 = 4 ; OP5 = 17 ; OP6 = 0 ; OP7 = 0. Soit la somme par colonne des temps par opération entre la 1ère ligne d'espace du fichier Excel et la seconde.

En fonction des fichiers, le nombre de lignes est amené à bouger.

Quelqu'un serait-il capable de m'aiguiller sur la marche à suivre et idéalement de m'écrire un petit bout de macro pour résoudre mon problème?

Merci d'avance en tout cas !
Thorn

2 réponses

  1. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour Thorn

    Un macro à adapter à ton fichier
    Sub somme_partielle()
    dercol = 8 ' dernière colonne à traiter A ADAPTER
    derlign = 10 ' dernière ligne à traiter A ADAPTER
    For col = 2 To dercol ' boucle sur toutes le scolonnes
    'RAZ variables
    tot = 0
    vid1 = 0
    vid2 = 0
    ' 1er vide
    For lg = 2 To derlign 'boucle sur toutes les lignes
    If Cells(lg, col) = "" And Cells(lg + 1, col) <> "" And vid1 = 0 Then vid1 = lg 'si cellule vide et celle du desssous remplie et vid1=0 alors vid1=n° de ligne
    Next lg
    '2eme vide
    For lg = vid1 + 1 To derlign ' boucle sur la ligne après vide jusqu'à dernière
    If Cells(lg, col) = "" And Cells(lg - 1, col) <> "" And vid2 = 0 Then vid2 = lg 'si cellule vide et celle du desus remplie et vid2=0 alors vid2=n° de ligne
    Next lg
    
    'si vid2=0 total=0 sinon total partiel des lignes entre vid1 et vid2
    If vid2 = 0 Then tot = 0 Else tot = Application.WorksheetFunction.Sum(Range(Cells(vid1 + 1, col), Cells(vid2 - 1, col)))
    
    Cells(derlign + 2, col) = tot ' inscription du total 2 lignes en dessous de la dernière ligen à traiter
    
    Next col
    End Sub

    Cdlmnt
    Via
    1
    1. Thornhegel Messages postés 156 Statut Membre 12
       
      Bonjour Via,

      Merci beaucoup pour la réponse !
      J'ai modifié un petit peu pour que cela corresponde à ce que je voulais mais l'idée du départ était très bonne.
      Voici le code si quelqu'un d'autre pourrait être intéressé par cela.
      J'ai sorti les variables vid1 et vid2 de la boucle car sinon j'avais un problème (exemple sur la photo, OP1 sortirait 2.25 au lieu de 2.75 car cellule B6 est vide).
      Enfin, j'ai simplement rajouté une condition sur la somme finale pour que cela ne compte que les sommes dont j'ai besoin

      Sub somme_partielle()
      dercol = 13 ' dernière colonne à traiter A ADAPTER
      derlign = 200 ' dernière ligne à traiter A ADAPTER
      vid1 = 0
      vid2 = 0
      For col = 2 To dercol ' boucle sur toutes les colonnes
      'RAZ variables
      tot = 0
      ' 1er vide
      For lg = 5 To derlign 'boucle sur toutes les lignes
      If Cells(lg, col) = "" And Cells(lg + 1, col) <> "" And vid1 = 0 Then vid1 = lg 'si cellule vide et celle du desssous remplie et vid1=0 alors vid1=n° de ligne
      Next lg
      '2eme vide
      For lg = vid1 + 1 To derlign ' boucle sur la ligne après vide jusqu'à dernière
      If Cells(lg, col) = "" And Cells(lg - 1, col) <> "" And vid2 = 0 Then vid2 = lg 'si cellule vide et celle du desus remplie et vid2=0 alors vid2=n° de ligne
      Next lg

      'si vid2=0 total=0 sinon total partiel des lignes entre vid1 et vid2
      If vid2 = 0 Then tot = 0 Else tot = Application.WorksheetFunction.Sum(Range(Cells(vid1 + 1, col), Cells(vid2 - 1, col)))
      If col > 9 Then Cells(derlign + 2, col) = tot ' inscription du total 2 lignes en dessous de la dernière ligne à traiter

      Next col
      End Sub


      En tout cas, cela a résolu mon problème donc merci beaucoup !
      Thorn
      0
  2. Jauster Messages postés 142 Statut Membre 42
     
    Bonjour,
    Je ne comprends pas :
    "Soit la somme par colonne des temps par opération entre la 1ère ligne d'espace du fichier Excel et la seconde."

    Il faut faire la somme des valeurs entre 2 lignes blanches (sans donnée) ?
    Pourquoi OP1 = 2.75 alors que OP2 = 16 et non 16.5 ?

    Ou alors c'est les espaces dans la colonne A (OF) qui définissent la plage des sommes ?

    Merci de m'éclaircir la dessus
    0
    1. Thornhegel Messages postés 156 Statut Membre 12
       
      Dans mon exemple, la ligne 4 est vide et définit donc le départ de la somme et la ligne 8 est la seconde ligne vide, ce qui doit définir la fin de la somme.

      Le 0.5 dans l'OP 2 est après la seconde ligne vide, elle ne doit donc pas être prise en compte

      Merci en tout cas
      0
    2. Thornhegel Messages postés 156 Statut Membre 12
       
      Résolu par la Macro ci-dessous, merci de l'aide en tout cas
      0