Analyse et reports de données

Bonjour,

Etant une bille sur excel, je cherche votre aide pour pouvoir accomplir la merveille suivante :

Je vous décrit le truc en 2 parties :

Partie 1 :

En A, j'ai un numéro de référence désignant un article

De B à E, j'ai des colonnes désignant des marqueurs de passage, représentés par heure et date.

Tous les 4 marqueurs (de B à E) doivent être présents.

La formule que je cherche doit permettre de trouver les lignes où un ou plusieurs marqueurs manquent, puis de notifier dans un autre classeur excel, quels articles (avec report du num de reference) comportent un marqueur absent, et le(s)quel(s).

Tout cela sachant que la base de données est bien evidemment évolutive et doit être tchekée régulièrement. (donc boucle, vba ?)

Partie 2

Et si vous être très fort et motivés, j'aimerai rajouter une difficulté :

Imaginons 2 colonnes supplémentaire : F et G.

F peut correspondre à "Prioritaire" ou "Secondaire"

G peut correspondre à "1", "2", ou "3"

Si F et G sont "Secondaire" ET "3", alors B peut être absent, et la ligne ne doit pas être reportée.

Voili. Si vous pouvez déjà apporter des solutions à la partie 1, ca serait deja enorme !

Merci par avance !

Bonjour,

Le mieux serait que tu joignes une trame de ton fichier pour faciliter l'aide à t'apporter.

Cordialement

ddetp88

Yes, j etais justement en train de faire un exemple

le voila :

(sachant que j ai oublié de dire qu'il faudrait aussi reporter le "nom responsable" )

Bonjour,

On va procéder en deux temps. Pour le moment tout se passe sur le même classeur.

J'ai ajouté une colonne en i avec une formule

Le bouton Reporter les données lance une macro qui répond à ta demande.

A voir si cela convient.

Cordialement

ddetp88

Ouah ! Excellent !!

C'est presque parfait !

Presque, car j'ai constaté que la formule en "i" ne considère pas la colonne "G", qui est importante dans le cas de "secondaire" en F.

Pour résumer :

Si F est "secondaire" ET G est "3", alors la colonne "B"(passage1) ne doit pas etre remplie et donc par reportée.

Donc si F est "secondaire" ET G est "1" ou "2", alors il faut bien reporter s'il manquerait la colonne B (et/ou les autres bien sur...)

Si je peux me permettre, est il ensuite possible de lancer la macro depuis un autre classeur, et de faire apparaitre le report dans cet autre classeur (ou une feuille de ce 2eme classeur) ?

Et une 3eme chose : la formule en colonne "i" peut elle être inscrite automatiquement (via une autre macro), ou est-il forcement necessaire de copier et tirer la formule jusqu'en bas ?

En tout cas, déjà Gros merci !

Ooops, Mea Culpa, je n'avais pas vu que les arguments "Secondaire" et "3" sont considérés dans la Macro.

MAIS, après plusieurs tests, il s'avère qu'en cas de "Prioritaire" et "3", la colonne B ne se retrouve pas cochée. La ligne s'affiche bien avec "num de reference" et "nom responsable", mais pas de colonne B cochée le cas écheant.

J'ai tenté de bidouiller le code, en ecrivant ainsi :

Option Explicit
Public Sh As Worksheet
Dim i As Integer, L As Integer, Ln As Integer
Sub test()
Set Sh = Sheets("Feuil1")
Sheets("Report").[A2:F1000].ClearContents 'Efface la plage avant écriture
'trouve la dernière ligne du taleau
L = 2 ' valeur de départ
'Boucle d'écriture
Do While Sh.Cells(L, "A") <> ""
  If Sh.Cells(L, "I").Value = "non" Then
    With Sheets("Report")
        Ln = .Range("A" & Rows.Count).End(xlUp).Row + 1 'trouve la dernière ligne
        .Cells(Ln, "A") = Sh.Cells(L, "A").Value 'reference

        If Sh.Cells(L, "F") = "PRIORITAIRE" And Sh.Cells(L, "G") = "3" Then .Cells(Ln, "B") = "X" 'passage1
        If Sh.Cells(L, "F") = "PRIORITAIRE" And Sh.Cells(L, "G") = "2" Then .Cells(Ln, "B") = "X" 'passage1
        If Sh.Cells(L, "F") = "PRIORITAIRE" And Sh.Cells(L, "G") = "1" Then .Cells(Ln, "B") = "X" 'passage1
        If Sh.Cells(L, "F") = "SECONDAIRE" And Sh.Cells(L, "G") = "2" Then .Cells(Ln, "B") = "X" 'passage1
        If Sh.Cells(L, "F") = "SECONDAIRE" And Sh.Cells(L, "G") = "1" Then .Cells(Ln, "B") = "X" 'passage1

        If Sh.Cells(L, "C") = "" Then .Cells(Ln, "C") = "X" 'passage2
        If Sh.Cells(L, "D") = "" Then .Cells(Ln, "D") = "X" 'passage3
        If Sh.Cells(L, "E") = "" Then .Cells(Ln, "E") = "X" 'passage4
        .Cells(Ln, "F") = Sh.Cells(L, "H").Value ' nom responsable
        .Select
    End With
  End If
  L = L + 1
Loop

End Sub

J'imagine que c'est un peu lourd, mais au final, j'obtiens les bons résultats.

Peut etre auriez vous une autre solutions plus stylée ?

Now, reste à trouver l'astuce pour lancer la macro depuis un autre classeur, et faire afficher le report dans cet autre classeur, et voir s'il aurait une solution pour insérer automatiquement la colonne-formule "i"

Merki par avance encore !

Bonsoir,

Je viens de regarder les différents tests que tu as mis en place dans la macro et je m'interroge sur la formule de la colonne I.

Il faudrait que tu définisses tous les cas possibles. Je dois dire que je ne comprends pas tout du fonctionnement de ton tableau.

Peux-tu apporter cette précision avant que je ne me lance?

Merci

Cordialement

Re, comme je n'aurai pas trop de disponibilité durant la semaine, j'ai modifié le code pour écrire dans un autre classeur.

Place les deux fichiers dans un même dossier et lance le fichier BDonnees.xlsm

J'espère que tu ne rencontreras pas de problème.

Bonne soirée

Cordialement

ddetp88

16bdonnees.xlsm (22.21 Ko)
15report.xlsm (8.21 Ko)

Alors :

Il s agit en fait d un tableau destiné a un contrôle qualité des interventions de vehicules d urgences.

Pour etre encore plus concret, voici en details :

  • Num de reference correspond au numero d intervention
  • Les heures de passage correpondent aux differentes heures de l intervention (heure de l alarme, heure de depart, heure d arrivee, heure operationnel)
  • le type de priorité correspond au type d intervention (prioritaire/secondaire) (=P/S)
  • le degré de priorité peut etre de 1-2-3

Le controle qualité vise a verifier si toutes les heures sont presentes. Seules les "Secondaires 3" peuvent se passer de l heure de la 1ere alarme.(1ere colonne).

Donc en gros, il n y a que 2 cas de figure :

  • toutes les heures doivent etre presentes pour les P1-P2-P3-S1-S2
  • pour les S3 (=secondaire 3) on peut se passer de l heure de l alarme, mais toutes les autres doivent y etre.

Pour ta 2eme mouture, je rencontre kkes problèmes, toutes les lignes ne s'affichent pas alors qu'elles le devraient.

Je regarde de mon côté et te redis.

Si entre temps tu as de nouvelles idées, hésite pas !

Tu disais qu'il serait peut etre possible d'éviter la colonne "i", et donc de passer en tout VBA.

Cette solution me séduirait assez

Avec cette formule en i1 et à recopier:

=SI(NBVAL(Tableau3[@[PASSAGE1]:[PASSAGE4]])=4;"oui";SI(ET([@PRIORITE]="Secondaire";[@[TYPE DE PRIORITE]]=3;[@PASSAGE1]=0);"Oui";"Non"))

Le fichier BDonnees en chargement

Cordialement

ddetp88


Pour la colonne I elle peut être masquée si tu veux.

cordialement

6bdonnees.xlsm (23.14 Ko)

Merci !

Mais des erreurs subsistent dans le report...

En me basant sur ta 1ere proposition, et dans l'idée de supprimer la nécessité de la colonne "i" (car en réalité la base de données proviendra régulièrement d'une extraction logicielle et pourra être assez grosse), j'ai tenté ca :

Option Explicit
Public Sh As Worksheet
Dim i As Integer, l As Integer, Ln As Integer
Sub test()
Set Sh = Sheets("Feuil1")
Sheets("Report").[A2:F1000].ClearContents 'Efface la plage avant écriture
'trouve la dernière ligne du taleau
l = 2 ' valeur de départ
'Boucle d'écriture
Do While Sh.Cells(l, "A") <> ""

    With Sheets("Report")
        Ln = .Range("A" & Rows.Count).End(xlUp).Row + 1 'trouve la dernière ligne

        If Sh.Cells(l, "B") = "" Or Sh.Cells(l, "C") = "" Or Sh.Cells(l, "D") = "" Or Sh.Cells(l, "E") = "" Then .Cells(Ln, "A") = Sh.Cells(l, "A").Value 'reference

        If Sh.Cells(l, "B") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 3 Then .Cells(Ln, "B") = "X"  'testamoi
        If Sh.Cells(l, "C") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 3 Then .Cells(Ln, "C") = "X"  'testamoi
        If Sh.Cells(l, "D") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 3 Then .Cells(Ln, "D") = "X"  'testamoi|
        If Sh.Cells(l, "E") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 3 Then .Cells(Ln, "E") = "X"  'testamoi|

        If Sh.Cells(l, "B") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 2 Then .Cells(Ln, "B") = "X"  'testamoi
        If Sh.Cells(l, "C") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 2 Then .Cells(Ln, "C") = "X"  'testamoi
        If Sh.Cells(l, "D") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 2 Then .Cells(Ln, "D") = "X"  'testamoi|
        If Sh.Cells(l, "E") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 2 Then .Cells(Ln, "E") = "X"  'testamoi|

        If Sh.Cells(l, "B") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 1 Then .Cells(Ln, "B") = "X"  'testamoi
        If Sh.Cells(l, "C") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 1 Then .Cells(Ln, "C") = "X"  'testamoi
        If Sh.Cells(l, "D") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 1 Then .Cells(Ln, "D") = "X"  'testamoi|
        If Sh.Cells(l, "E") = "" And Sh.Cells(l, "F") = "PRIORITAIRE" And Sh.Cells(l, "G") = 1 Then .Cells(Ln, "E") = "X"  'testamoi|

        If Sh.Cells(l, "B") = "" And Sh.Cells(l, "F") = "SECONDAIRE" And Sh.Cells(l, "G") = 1 Then .Cells(Ln, "B") = "X"  'testamoi
        If Sh.Cells(l, "C") = "" And Sh.Cells(l, "F") = "SECONDAIRE" And Sh.Cells(l, "G") = 1 Then .Cells(Ln, "C") = "X"  'testamoi
        If Sh.Cells(l, "D") = "" And Sh.Cells(l, "F") = "SECONDAIRE" And Sh.Cells(l, "G") = 1 Then .Cells(Ln, "D") = "X"   'testamoi|
        If Sh.Cells(l, "E") = "" And Sh.Cells(l, "F") = "SECONDAIRE" And Sh.Cells(l, "G") = 1 Then .Cells(Ln, "E") = "X"   'testamoi|

        If Sh.Cells(l, "B") = "" And Sh.Cells(l, "F") = "SECONDAIRE" And Sh.Cells(l, "G") = 2 Then .Cells(Ln, "B") = "X"  'testamoi
        If Sh.Cells(l, "C") = "" And Sh.Cells(l, "F") = "SECONDAIRE" And Sh.Cells(l, "G") = 2 Then .Cells(Ln, "C") = "X"  'testamoi
        If Sh.Cells(l, "D") = "" And Sh.Cells(l, "F") = "SECONDAIRE" And Sh.Cells(l, "G") = 2 Then .Cells(Ln, "D") = "X"   'testamoi|
        If Sh.Cells(l, "E") = "" And Sh.Cells(l, "F") = "SECONDAIRE" And Sh.Cells(l, "G") = 2 Then .Cells(Ln, "E") = "X"   'testamoi|

        If Sh.Cells(l, "C") = "" And Sh.Cells(l, "F") = "SECONDAIRE" And Sh.Cells(l, "G") = 3 Then .Cells(Ln, "C") = "X"  'testamoi
        If Sh.Cells(l, "D") = "" And Sh.Cells(l, "F") = "SECONDAIRE" And Sh.Cells(l, "G") = 3 Then .Cells(Ln, "D") = "X"   'testamoi|
        If Sh.Cells(l, "E") = "" And Sh.Cells(l, "F") = "SECONDAIRE" And Sh.Cells(l, "G") = 3 Then .Cells(Ln, "E") = "X"   'testamoi|

        .Cells(Ln, "F") = Sh.Cells(l, "H").Value ' nom responsable
        .Select
    End With

  l = l + 1
Loop

End Sub

Ca marche nickel (bon ok, ca reste d'une lourdeur incommensurable, mais je découvre le VBA...!), en revanche, en cas de "Secondaire 3", ca m'affiche tout de meme une ligne (sans "X")

Bonjour,

On aurait peut-être dû commencer par le début disait Lapalisse.

Peux-tu compléter le tableau des conditions ci-joint?

Merci

ddetp88

10conditions.xlsx (9.30 Ko)

Yep, alors voili le tableau rempli

Merci

9conditions.xlsx (8.71 Ko)

Bonsoir,

Regarde la modification.

Juste un truc, quand passage1 est faux et que prioritaire= secondaire et type=3, c'est compté comme vrai.

En revanche si passage1 est faux et qu'un autre passage est faux sur la même référence, alors passage1 et 2 sont faux, ils sont répertoriés dans la feuille report.

Cordialement,

ddetp88

8bdonnees.xlsm (18.79 Ko)

Yes, ca commence a prendre forme. Par contre le fait que en cas de Secondaire3, passage 1 se coche si passage 2 est faux, pose encore probleme...

J'ai ajouté une ligne pour traiter à part la colonne B.

J'ai un peu joué avec les priorités et tout semble fonctionner comme tu le souhaites.

Bonne suite dans ton projet,

ddetp88

12bdonnees.xlsm (21.79 Ko)

Merci infiniment pour ton implication !

Très aidant !

Merci de passer le fil en résolu.

Cordialement

Rechercher des sujets similaires à "analyse reports donnees"