Somme erronée cellules fusionnées ou non

Résolu
PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   -  
T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

Sur 1 tableau avec 2 colonnes (Matin et Après-midi), j'ai des activités soit par demi-journée, soit à la journée.

Matin = colonne M

Après-midi = colonne N

Journée = colonne M & N fusionnées

Un autre tableau calcule le nombre de personnes affecté.

=NB.SI(M10:M15;"*TEST*")+NB.SI(N10:N15;"*TEST*")/2

Résultat = 6 au lieu de 5

(exemple joint)

https://www.cjoint.com/c/LIEiU63OkOq

Merci d'avance

EXCEL 2010

Windows / Firefox 91.0

7 réponses

  1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
     

    Bonjour

    Une idée dans le fichier

    LIEkEpqiudg_Formule-incorrecte-PhC1.xlsx (cjoint.com)


    1
    1. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
       

      Bonjour,

      Merci pour la méthode, mais les intitulés d'activité ne sont plus les mêmes..

      Les cellules ne sont plus fusionnées

      Cdlt

      1
      1. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835 > PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention  
         

        C'est une idée à vous de l'adapter à votre besoin

        1
      2. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835 > PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention  
         

        Les cellules fusionnées à éviter! Utilisez plus tôt le format centrer sur plusieurs cellules

        1
  2. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     

    Bonjour,

    Oui j'ai enfin compris que vous travaillez avec des valeurs référence (TEST, Toto) et dans la macro il y a un manque de boucle, je vais regarder pour la correction.


    1
    1. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
       

      Merci !

      0
  3. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     

    Bonjour,

    Essayer cette version:

    Function SOMMEAUTO(ByRef celldebut As Range, ByRef CellFin As Range, Recherche As String)
    Total = 0
    For Index = celldebut.Row To CellFin.Row
    
        If Cells(Index, celldebut.Column).Value Like "*" & Recherche & "*" Then
            If Cells(Index, celldebut.Column).MergeCells = True Then
                Total = Total + 1
            Else
                Total = Total + 0.5
                If Cells(Index, celldebut.Column + 1).Value Like "*" & Recherche & "*" Then
                    Total = Total + 0.5
                End If
            End If
        ElseIf Cells(Index, celldebut.Column + 1).Value Like "*" & Recherche & "*" Then
            Total = Total + 0.5
        End If
    Next Index
    SOMMEAUTO = Total
    End Function
    

    1
    1. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
       

      .../

      Merci pour cette correction qui prend l'après-midi en compte.

      J'ai toujours l'autre problème quand à la validation des formules qu'il faut de nouveau valider une par une quand on modifie une activité sur le planning.

      Peux-tu m'aider stp? A part :

      Données / Convertir + Terminer (un peu lourd à faire lors de chaque modif), je ne vois pas...

      ou

      re valider chaque formule...

      0
      1. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478 > PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention  
         

        Bonjour,

        Note:

        Contrairement aux fonctions de base d'excel, les fonctions personnalisées ne se mettent pas à jour automatiquement quand on change la valeur de tout ou partie des arguments . Il faut sélectionner la cellule qui la contient, cliquer sur la formule puis valider pour que la mise à jour du résultat se fasse

        Merci de me dire comment vous entrez les valeurs d'activité?

        Salutations.
        Le Pingou

        1
      2. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21 > Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention  
         

        .../

        Soit par une saisie, soit sélection dans un choix menu déroulant..

        Cdlt

        0
      3. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478 > Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention  
         

        Bonjour,

        Je vous propose d'insérer cette ligne d'instruction [  Application.Volatile  ] comme suit :

        Function SOMMEAUTO(ByRef celldebut As Range, ByRef CellFin As Range, Recherche As String)
        Application.Volatile
        Total = 0

        Salutations.
        Le Pingou

        1
      4. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21 > Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention  
         

        Un grand merci ! Je testerais cela demain matin ...

        0
  4. ALS35 Messages postés 1034 Date d'inscription   Statut Membre Dernière intervention   147
     

    Bonjour,

    Dans ton exemple, en M10:M15 tu as bien 6 cellules comprenant "TEST" et 0 en N10:N15 ????

    Cordialement

    0
    1. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
       

      Bonjour,

      Oui, mais je cherche à calculer le nombre de jours/agent (précision oubliée)

      Cela fait 5 jours et non 6

      M et N fusionnée = 1

      M seule = 0.50

      N seule = 0.50

      Ce qui fait 5

      Bien cordialement,

      0
    2. T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   1 217 > PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention  
       

      Salut,

      Avec t'a formule, ça additionne tous les "TEST" en colonne M  (donc 6) et la deuxième partie de la formule donne zéro car la colonne N est vide. Si tu place les TEST en ligne 11 et 14 sur le soir tu obtiens bien 5.

      Au plus simple tu peut supprimer les cellules fusionnées (et si une personne fait toute la journée le mettre dans les deux cellules)  et diviser par deux la somme de M et de N.

      0
    3. ALS35 Messages postés 1034 Date d'inscription   Statut Membre Dernière intervention   147 > T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention  
       

      Re,

      Vu que tes cellules ne sont pas contiguës, il faut développer la formule :

      =NB.SI(M10;"*TEST*")+NB.SI(M12;"*TEST*")+NB.SI(M13;"*TEST*")+NB.SI(M15;"*TEST*")+(NB.SI(M11;"*TEST*")+NB.SI(M14;"*TEST*"))/2+(NB.SI(N10:N15;"*TEST*"))/2

      Il y a peut-être plus court.

      PS : les cellules fusionnées sont généralement une plaie dans Excel

      Cordialement

      1
    4. T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   1 217 > PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention  
       

      Je regarde pour te faire ça en vba après manger =D

      1
    5. ALS35 Messages postés 1034 Date d'inscription   Statut Membre Dernière intervention   147 > PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention  
       

      Alors si tu peux différencier :

      =NB.SI(M10:N15;"*TEST 1*")+NB.SI(M10:N15;"*TEST 0,5*")/2

      https://www.cjoint.com/c/LIEkAzwNdTK

      1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
     

    J'ai trouvé cela sur le net (veux post)

    Une fonction qui permet de trouver le nombre de cellules fusionnées....

    'Option Explicit

    Function rechFusion(chaine As String, plage As Range) As Long
    ' recherche une chaine dans une plage
    ' et retourne le nombre de cellules fusionnées contenant cette chaine
    '
    '
    ' Ex syntaxe sur feuille :
    ' =rechFusion(J3;$m$3:$n$16)
    '
        Dim data As Variant, lig As Long, col As Long
        Application.Volatile
        If plage.Count = 1 Then Exit Function
        data = plage.Value
        For lig = 1 To UBound(data, 1)
            For col = 1 To UBound(data, 2)
                If data(lig, col) = chaine Then
                    rechFusion = rechFusion + plage.Cells(lig, col).MergeArea.Cells.Count
                    col = col + plage.Cells(lig, col).MergeArea.Cells.Columns.Count - 1
                End If
            Next col
        Next lig
    End Function

    Je cherche pour utiliser cette fonction et rajouter la recherche de l'activité en vba.

    Dans mon exemple, l'idée serait :  si "TEST" trouvé 6 fois - (2 cellules non fusionnées /2)

    0
    1. T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   1 217
       

      Voilà une proposition:

      https://www.cjoint.com/c/LIEnPXigAcX


      EDIT: Ajouter

      Option Compare Text

      Au dessus de la fonction dans le VBA pour que ce ne soit pas sensible à la casse

      1
    2. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21 > T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention  
       

      Merci T3chN0g3n, pour cette fonction qui répond parfaitement à mon problème !

      Cdlt

      1
    3. T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   1 217 > PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention  
       

      Ravis que ça puisse convenir =)

      1
    4. T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   1 217 > T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention  
       

      Pour la postérité ...

      Option Compare Text
      'Recherche une chaine de caractères dans chaque cellule d'une plage donnée, sur deux colonnes, et retourne un compte total en additionnant 0.5 par cellule individuelle et 1 pour deux cellules fusionnées
      Function SOMMEAUTO(ByRef celldebut As Range, ByRef CellFin As Range, Recherche As String)
      Total = 0
      For Index = celldebut.Row To CellFin.Row
          If Cells(Index, celldebut.Column).Value Like "*" & Recherche & "*" Then
              If Cells(Index, celldebut.Column).MergeCells = True Then
                  Total = Total + 1
              Else
                  Total = Total + 0.5
                  If Cells(Index, celldebut.Column + 1).Value Like "*" & Recherche & "*" Then
                      Total = Total + 0.5
                  End If
              End If
          End If
      Next Index
      SOMMEAUTO = Total
      End Function
      1
    5. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21 > T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention  
       

      Bonjour,

      Si je modifie les informations dans mon planning, la fonction ne recalcule pas le total.Pour cela, il faut que je valide de nouveau la formule. Avez-vous une solution svp ?

      (Le calcul est bien automatique)

      Merci d'avance

      0
  7. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     

    Bonjour,

    Juste au passage, comment vous faites pour calculer sur des cellules qui ont du texte...?


    0
  8. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
     

    Avec la fonction personnalisée en vba de T3chN0g3n

    0
    1. T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   1 217
       

      Bonjour,

      Effectivement je sais pas qui a codé ça c'est ni fait ni à faire ...

      Je regarde !

      0
    2. T3chN0g3n Messages postés 69 Date d'inscription   Statut Membre Dernière intervention   1 217
       

      Voilà le code corrigé:

      Option Compare Text
      Function SOMMEAUTO(ByRef celldebut As Range, ByRef CellFin As Range, Recherche As String)
      Application.Volatile
      Total = 0
      For Index = celldebut.Row To CellFin.Row
          If Cells(Index, celldebut.Column).MergeCells = True Then
              If Cells(Index, celldebut.Column).Value Like "*" & Recherche & "*" Then
                  Total = Total + 1
              End If
          Else
              If Cells(Index, celldebut.Column).Value Like "*" & Recherche & "*" Then
                  Total = Total + 0.5
              End If
              If Cells(Index, celldebut.Column + 1).Value Like "*" & Recherche & "*" Then
              Total = Total + 0.5
              End If
          End If
      Next Index
          SOMMEAUTO = Total
      End Function
      
      1