XL pour MAC Calcul

amelie75

XLDnaute Occasionnel
Bonsoir besoin de votre aide
les infos demander sont en FEUIL2
Objectif : me dire en P4/21 combien de fois le chiffre 1 à 18 et sortie
et pour savoir ça il devra aller chercher les information de D4/D390
idem pour Q4/W4
Merci d'avance pour votre aide
 

Pièces jointes

  • Zeshow (2).xlsx
    678.6 KB · Affichages: 7

soan

XLDnaute Barbatruc
Inactif
Bonjour Amélie,

regarde "FEUIL2" ; c'est inchangé ; fais Ctrl e ➯ travail effectué ! 😊

à toi de vérifier très soigneusement tous les résultats. 😁😄😃



code VBA (22 lignes) :

VB:
Option Explicit

Sub Essai()
  If ActiveSheet.Name <> "FEUIL2" Then Exit Sub
  Dim dlg&: dlg = Cells(Rows.Count, 3).End(3).Row: If dlg < 4 Then Exit Sub
  Dim N(1 To 18) As Byte, lig&, c1 As Byte, c2 As Byte, v As Byte, k As Byte
  Application.ScreenUpdating = 0: [P4:W21].ClearContents
  For c1 = 4 To 11
    Erase N
    For lig = 4 To dlg
      With Cells(lig, c1)
        If .Interior.ColorIndex = -4142 Then
          v = Val(.Value): If v >= 1 And v <= 18 Then N(v) = N(v) + 1
        End If
      End With
    Next lig
    For k = 1 To 18
      lig = k + 3: c2 = c1 + 12: If N(k) > 0 Then Cells(lig, c2) = N(k)
    Next k
  Next c1
End Sub



edit : la solution de sylvanu est meilleure que la mienne ; c'est ICI.

(je laisse quand même ma solution pour ceux qui ont envie de voir un code VBA)

soan
 

Pièces jointes

  • Zeshow (2).xlsm
    682 KB · Affichages: 6
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@Phil

j'ai vu ton fichier modifié.

d'abord, je vois de suite que tes résultats sont les mêmes que les miens (même si moi je n'affiche pas les 0) ; ensuite, je regarde ta formule de P4 : =NB.SI(D$4:D$390;$O4) ; je me dis : « c'est pas possible ! 😱 comment, avec une telle formule, tu as pu éviter les nombres sur fond jaune des en-têtes de colonnes ? 😲 ».

j'ai cherché un moment avec la seule lecture de ta formule, puis ensuite mdr !!! j'ai vu que tu as tout simplement effacé les en-têtes de colonnes sur fond jaune !!! oh la bonne blague !!! 😄 😂 🤣 mais là, tu as triché ! 😜 car en faisant ça, tu as changé les données du problème !

alors même si tu as écrit dans ton post #3 que la répétition des jours ne sert à rien, ça m'étonnerait beaucoup qu'Amélie s'en contente ! (ou alors elle n'est pas difficile !) ; car la répétition des jours est bien pratique et utile pour mieux repérer ces nombres 1 à 8 pour chacun des mois ; et ce même si les volets sont figés pour les 3 premières lignes.

ou alors, si on peut s'en passer, alors autant supprimer toutes les lignes dont "D:K" est sur fond jaune, sauf pour la ligne 2.​

soan
 

soan

XLDnaute Barbatruc
Inactif
Bonjour sylvanu,

j'ai vu la formule de ton post #6 ; c'est vraiment une très bonne idée, ton critère "<>JOUR" ! :) 👍 du coup, ma solution avec macro devient inutile ! Amélie peut prendre ta solution plutôt que la mienne !

pour le cas où Amélie préfèrerait ne pas voir les zéros : il suffit de mettre pour la plage P4:W21 ce format de nombre personnalisé : 0;;

je laisse quand même ma solution pour ceux qui ont envie de voir un code VBA.

soan
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour tout le monde,
@soan,
Sur XL tout problème peut être résolu par formules, par VBA, par PowerQuery ... le choix est fonction du contexte, et là où l'utilisateur est le plus à l'aise.
Pour supprimer les 0 le plus simple est de faire :
VB:
=SI(NB.SI.ENS(D:D;$O4;$C:$C;"<>JOUR")=0;"";NB.SI.ENS(D:D;$O4;$C:$C;"<>JOUR"))
Mais on peut garder une approche en VBA avec :
Code:
Sub Total()
    [P4:W21].FormulaLocal = _
    "=SI(NB.SI.ENS(D:D;$O4;$C:$C;""<>JOUR"")=0;"""";NB.SI.ENS(D:D;$O4;$C:$C;""<>JOUR""))"
    [P4:W21].Value = [P4:W21].Value
End Sub
😅😂🤣
 

amelie75

XLDnaute Occasionnel
Bonjour Amélie,

regarde "FEUIL2" ; c'est inchangé ; fais Ctrl e ➯ travail effectué ! 😊

à toi de vérifier très soigneusement tous les résultats. 😁😄😃



code VBA (22 lignes) :

VB:
Option Explicit

Sub Essai()
  If ActiveSheet.Name <> "FEUIL2" Then Exit Sub
  Dim dlg&: dlg = Cells(Rows.Count, 3).End(3).Row: If dlg < 4 Then Exit Sub
  Dim N(1 To 18) As Byte, lig&, c1 As Byte, c2 As Byte, v As Byte, k As Byte
  Application.ScreenUpdating = 0: [P4:W21].ClearContents
  For c1 = 4 To 11
    Erase N
    For lig = 4 To dlg
      With Cells(lig, c1)
        If .Interior.ColorIndex = -4142 Then
          v = Val(.Value): If v >= 1 And v <= 18 Then N(v) = N(v) + 1
        End If
      End With
    Next lig
    For k = 1 To 18
      lig = k + 3: c2 = c1 + 12: If N(k) > 0 Then Cells(lig, c2) = N(k)
    Next k
  Next c1
End Sub



j'imagine d'avance ta future question :

« tu peux m'expliquer le code VBA stp stp ? »

réponse : non ; car j'ai pas envie d'commenter !
ça prend trop d'temps ! mais j'suis sûr qu'tu pourras
t'débrouiller toute seule (avec l'aide VBA). 😁 🍀




edit : la solution de sylvanu est meilleure que la mienne ; c'est ICI.

(je laisse quand même ma solution pour ceux qui ont envie de voir un code VBA)

soan
bonjour et merci
pourquoi on et obliger de faire ctrl e ça ne peut pas se calculer automatiquement
 

Discussions similaires

Réponses
1
Affichages
361
Réponses
13
Affichages
931

Statistiques des forums

Discussions
312 336
Messages
2 087 388
Membres
103 534
dernier inscrit
Kalamymustapha