Syntaxe CountIF Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
b
barrym78
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 3 avril 2017
Version d'Excel : 2013

Message par barrym78 » 26 juin 2017, 11:52

Bonjour le forum,

Je viens de nouveau solliciter votre aide.

J'ai commencé la macro suivante:
Sub rer()

Dim s As Integer, j As Integer
Dim myRange As Range
          
   
Set f = Sheets("Feuil1")
    
    ''Définir les limites du planning
    DerniereLigne = Feuil1.Range("A300").End(xlUp).Address
    L = Range(DerniereLigne).Row
          
    For i = 3 To L 'Definit lignes
    
    With f
    j = 4 'colonne
    Set myRange = .Cells(i, j)
    End With

    s = Application.WorksheetFunction.CountIf(myRange, "Super")
    Next i

      
    'Modif 1ère tache de super
    
    If Cells(i, 4) = "Super" Then
        Cells(i, 3) = Cells(i, 3) + (1 / (s * 3))
    
    'Modif 2ème tache de super
    
    ElseIf Cells(i, 4) = "Super" Then
        Cells(i, 3) = Cells(i, 3) + (1 / (s * 3))
        Cells(i, 2) = Cells(i, 2) + (1 / (s * 3))
        
      
End Sub
Ce que je souhaite faire c'est :

1 - Compter le nombre total de tâches dans la colonne 4 de mon classeur portant le nom "Super" pour l'utiliser ensuite pour modifier les valeurs de mes colonnes 2 et 3.
2 - Pour la première tâche "Super" je veux juste modifier la valeur de la colonne 3.
3 - Pour toutes les autres tâches "Super" qui suivent, je souhaite modifier les valeurs des colonnes 2 et 3.

Ci-joint le fichier Excel.

Je vous remercie d'avance de votre aide :wink: !

Barrym
test1.xlsm
(15.32 Kio) Téléchargé 12 fois
Avatar du membre
Raja
Passionné d'Excel
Passionné d'Excel
Messages : 5'059
Appréciation reçue : 1
Inscrit le : 3 février 2008
Version d'Excel : 2010 à 2016 FR et 2010 EN

Message par Raja » 26 juin 2017, 13:21

Bonjour,
Que fait-on pour les autres tâches que "Super" ?
Cdlt,
Raja
b
barrym78
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 3 avril 2017
Version d'Excel : 2013

Message par barrym78 » 26 juin 2017, 13:28

Bonjour Raja,

Merci de t'être penché sur mon problème.

Pour les autres tâches autres que "Super", on ne les prend pas en compte, elles restent comme elles sont.
Avatar du membre
Raja
Passionné d'Excel
Passionné d'Excel
Messages : 5'059
Appréciation reçue : 1
Inscrit le : 3 février 2008
Version d'Excel : 2010 à 2016 FR et 2010 EN

Message par Raja » 26 juin 2017, 13:32

Re,
Essaye le code suivant :
Option Explicit
Sub rer()
    Dim nbS As Integer, nbSPrec As Integer, derLig As Integer, i As Integer, f As Worksheet
    Set f = Sheets("Feuil1")
    'Définir les limites du planning
    With f
        derLig = .Range("A" & Rows.Count).End(xlUp).Row
        For i = 3 To derLig 'Definit lignes
            nbS = WorksheetFunction.CountIf(.Range(.Cells(3, 4), .Cells(i, 4)), "Super")
            If nbS = 1 Then
                .Cells(i, 3) = .Cells(i, 3) + (1 / (nbS * 3))
            'Modif 2ème tache de super
            ElseIf nbS > 1 And nbSPrec < nbS Then
                .Cells(i, 2) = .Cells(i, 2) + (1 / (nbS * 3))
                .Cells(i, 3) = .Cells(i, 3) + (1 / (nbS * 3))
            End If
            nbSPrec = nbS
        Next i
    End With
    Set f = Nothing
End Sub
Cdlt,
Raja
b
barrym78
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 3 avril 2017
Version d'Excel : 2013

Message par barrym78 » 26 juin 2017, 14:45

Re Raja,

Merci beaucoup pour cette macro qui fonctionne :wink: !

En faisant un test sur mon projet, je me suis aperçu que j'avais oublié une chose.

Est-il possible d'ajouter une incrémentation dans cette macro ?

Par exemple, la première tâche de "Super" ne changerait pas, on aurait toujours :
.Cells(i, 3) = .Cells(i, 3) + (1 / (nbS * 3))
Pour la deuxième tâche de "Super", on aurait:
.Cells(i, 2) = .Cells(i, 2) + (1 / (nbS * 3))
.Cells(i, 3) = .Cells(i, 3) + ( 2/ (nbS * 3))
Pour la troisième tâche de "Super", on aurait:
.Cells(i, 2) = .Cells(i, 2) + (2 / (nbS * 3))
.Cells(i, 3) = .Cells(i, 3) + ( 3/ (nbS * 3))
Pour la quatrième tâche de "Super", on aurait:
.Cells(i, 2) = .Cells(i, 2) + (3 / (nbS * 3))
.Cells(i, 3) = .Cells(i, 3) + ( 4/ (nbS * 3))
Et ainsi de suite...

merci d'avance !
Avatar du membre
Raja
Passionné d'Excel
Passionné d'Excel
Messages : 5'059
Appréciation reçue : 1
Inscrit le : 3 février 2008
Version d'Excel : 2010 à 2016 FR et 2010 EN

Message par Raja » 26 juin 2017, 16:02

Re,
A tester :
Sub rer()
    Dim nbS As Integer, nbSPrec As Integer, derLig As Integer, i As Integer, f As Worksheet
    Set f = Sheets("Feuil1")
    With f
        'Définit la limite du tableau
        derLig = .Range("A" & Rows.Count).End(xlUp).Row
        For i = 3 To derLig 'Definit la limite du boucle
            nbS = WorksheetFunction.CountIf(.Range(.Cells(3, 4), .Cells(i, 4)), "Super")
            If nbSPrec < nbS Then 'la colonne 4 contient le mot "Super"
                'avec les lignes possédant le mot "Super"
                If nbS >= 1 Then .Cells(i, 3) = .Cells(i, 3) + (nbS / (nbS * 3))
                'uniquement avec les lignes possédant au delà de la 1ère occurence du mot "Super"
                If nbS > 1 Then .Cells(i, 2) = .Cells(i, 2) + (nbS - 1 / (nbS * 3))
                nbSPrec = nbS
            End If
        Next i
    End With
    Set f = Nothing
End Sub
Cdlt,
Raja
b
barrym78
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 3 avril 2017
Version d'Excel : 2013

Message par barrym78 » 27 juin 2017, 10:23

Re Raja,

Merci une nouvelle fois pour cette macro.

J'ai encore question à te poser. Lorsqu'on utilise la fonction CountIf par exemple dans mon cas
nbS = WorksheetFunction.CountIf(.Range(.Cells(3, 4), .Cells(i, 4)), "Super")
, nbs est-il égal au nombre total de tâches portant le nom "Super"?

En fait j'essaie d'automatiser un planning sur excel avec un enchaînement de tâches. La tache "Super" contient des sous-tâches.

Supposons une tâche "Super" comprenant 3 sous-tâches appelées R+1 , R+2 et R+3.

R+1 débute à 1 et se termine à 5.
R+2 débute à 3 (soit 2 jours avant la fin du R+1) et se termine à 10
R+3 débute à 10 (le jour où se termine le R+2) et se termine à 15.

Les dates de début sont dans la colonne 2 de mon classeur et les dates de fin dans ma colonne 3.

Mon but c'est de pouvoir ajouter 1/3 à ma tâche "Super" (comprenant R+1, R+2, R+3).

Si on note nbs le nombre total de sous-tâches comprises dans ma tâche "Super", on obtient ici nbs = 3

Ainsi pour chaque sous-tâche (R+1, R+2, R+3), je dois donc ajouter 1/nbs*3.

- Pour la première sous-tâche (R+1), on aurait un début à 1 et une fin à 5 + (1/3*3)

- Pour la deuxième sous-tâche (R+2), on aurait un début à 3 + (1/3*3) pour respecter l’enchaînement initial avec le R+1 et une fin à 10 + ( (1/3*3) pour respecter la durée initiale de la tâche + (1/3*3) pour augmenter la durée de la tâche de 1/nbs*3 ) soit un début à 3 + (1/nbs*3) et une fin à 20 + (2/nbs*3)

-Pour la troisième sous-tâche (R+3), on aurait un début à 10 + ((1/3*3) + (1/3*3) )pour respecter l’enchaînement initial avec le R+2 et une fin à 15 + ((1/3*3)+(1/3*3)) pour respecter la durée initiale de la tâche + (1/3*3) pour augmenter la durée de la tâche de 1/nbs*3)
Soit un début à 10 + (2/nbs*3) et une fin à 15 + (3/nbs*3)

Et ainsi de suite.

je reconnais que mes explications précédentes n'étaient pas très claires ! ::~

Penses-tu donc qu'il faudrait introduire une nouvelle variable ou utiliser une fonction autre que CountIf pour que nbs soit égale au total des sous-tâches de "Super"?

Je te remercie d'avance pour ton aide.

Barrym
Avatar du membre
Raja
Passionné d'Excel
Passionné d'Excel
Messages : 5'059
Appréciation reçue : 1
Inscrit le : 3 février 2008
Version d'Excel : 2010 à 2016 FR et 2010 EN

Message par Raja » 27 juin 2017, 10:52

Re,
Merci de joindre un fichier à nouveau pour expliciter ta dernière demande.
Cdlt,
Raja
b
barrym78
Jeune membre
Jeune membre
Messages : 32
Inscrit le : 3 avril 2017
Version d'Excel : 2013

Message par barrym78 » 27 juin 2017, 10:57

Re,

Ci-joint mon fichier Excel.

Barrym
test1.xlsm
(17.33 Kio) Téléchargé 4 fois
Avatar du membre
Raja
Passionné d'Excel
Passionné d'Excel
Messages : 5'059
Appréciation reçue : 1
Inscrit le : 3 février 2008
Version d'Excel : 2010 à 2016 FR et 2010 EN

Message par Raja » 27 juin 2017, 11:16

Re,
Je suis navré de ne pas comprendre ton problème. Il vaut mieux présenter ton problème à résoudre dans sa globalité au lieu de présenter ton tableau.
Cdlt,
Raja
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message
  • CountIf
    par Adyl2019 » 27 mars 2019, 15:40 » dans Excel - VBA
    5 Réponses
    38 Vues
    Dernier message par h2so4
    27 mars 2019, 17:40
  • Probleme de countif
    par Nieben » 15 avril 2018, 06:31 » dans Excel - VBA
    5 Réponses
    120 Vues
    Dernier message par Theze
    16 avril 2018, 06:38
  • Countif avancé
    par CDB » 17 février 2019, 12:03 » dans Excel - VBA
    13 Réponses
    134 Vues
    Dernier message par CDB
    17 février 2019, 21:14
  • Fonction Countif
    par stepel70 » 27 octobre 2015, 22:26 » dans Excel - VBA
    4 Réponses
    400 Vues
    Dernier message par LouReeD
    28 octobre 2015, 19:09
  • CountIF probleme
    par Spouns » 12 juin 2016, 11:58 » dans Excel - VBA
    5 Réponses
    223 Vues
    Dernier message par Spouns
    12 juin 2016, 21:38
  • Countif multiples
    par jules_57 » 23 août 2018, 17:19 » dans Excel - VBA
    2 Réponses
    37 Vues
    Dernier message par jules_57
    23 août 2018, 17:24