Condition macro

Bonjour a tous

voici mon probleme, j'ai adapté cette macro (avec du mal mais j'y suis arrivé)

cette macro mets 1 devant les heures de "tableau" lorsque celle ci fait partie d'une plage des arrêts de la feuille "hd" (apparition et disparition) une mise en forme conditionnelle met ensuite la case contenant "1" en rouge.

je voudrais ajouter une condition et qu'elle ne mette "1" que lorsque le numéro de la machine correspond.

merci d'avance

https://www.excel-pratique.com/~files/doc/rapport_arret.zip

re:

je viens de me rendre compte qu'elle ne marche pas si bien que ca, il ne me met pas tout les "1" qu'il devrait, j'ai trouvé, dans la colonne A j'ai pas mis des étoiles jusqu'en bas.

reste ma premiere question

Je ne comprends pas bien le format du tableau, mais je tente de répondre à la question

(Pourquoi séparer les lignes horaires du "tableau " une ligne sur 2?)

Voici le code modifié que je propose :

(Les modifications sont encadrées par des lignes de commentaires avec des signes =)

Cordialement

Sub caseminutes()

Dim j As Long, k As Long

Dim ShDef As Worksheet, ShProc As Worksheet

Dim DerlDef As Long, PremlDef As Long, DerlProc As Long

Dim Dat As Date

'Dim Num As String

'========================

Dim Machine As String

'========================

Set ShProc = Sheets("hd")

Set ShDef = Sheets("Tableau")

'========================

'Le nom de machine est écrit dans la cellule D1

' ce sont les 3 derniers caractères du contenu de la cellule

Machine = LCase(Right(ShDef.Cells(1, 4), 3))

'========================

'========================

'La première ligne a prendre en compte n'est-elle pas invariablement la ligne 2

'et non pas definie comme tel : PremlDef = ShDef.Cells(Rows.Count, 4).End(xlUp).Row + 1

PremlDef = 2

DerlDef = ShDef.Cells(Rows.Count, 1).End(xlUp).Row

'========================

'========================

'Effacement du résultat précédent, sinon les cellules marquées d'un 1

's'additionnent au fur et à mesure de l'exécution de la macro

For j = PremlDef To DerlDef

ShDef.Cells(j, 4) = ""

Next

'========================

'========================

DerlProc = ShProc.Cells(Rows.Count, 1).End(xlUp).Row

'========================

For j = PremlDef To DerlDef

If ShDef.Cells(j, 1) <> "" Then

Dat = ShDef.Cells(j, 3)

'========================

' For k = 2 To ShProc.Cells(Rows.Count, 1).End(xlUp).Row

For k = 2 To DerlProc

'========================

'========================

'Dans la page hd le numéro de machine est en colonne 6

If LCase(ShProc.Cells(k, 6)) = Machine Then

'========================

If Dat > ShProc.Cells(k, 1) And Dat < ShProc.Cells(k, 2) Then

ShDef.Cells(j, 4) = ShProc.Cells(k, 10)

End If

'========================

Exit For

'========================

'========================

End If

'========================

Next

End If

Next

Set ShDef = Nothing

Set ShProc = Nothing

End Sub

salut et merci pour ta réponse.

ta modif a l'air de fonctionner parfaitement, je l'essaierais a plus grande echelle au boulot mais c bon.

Pour le format du tableau, c'est un montage "systeme D" pour arriver a faire un reporting des arrêt machine, j'essais de faire un truc lisible au vu de l'echelle (a la minute) et encore mes superieurs veulent un truc sur une amplitude de 24 heures a imprimer sur une feuille A3 et vu mes connaissances je n'ai pas trouvé pour faire un truc nickel. mais si tu connais une facon ou un site qui traite de ce genre de chose, je t'écoute.

voila, je vais continuer a mettre mon tableau en forme, je ne cloture pas la discussion car je vais avoir d'autre question. Si au cas ou, quelqu'un avais une idée, je suis tout ouï.

cordialement

re:

un petit soucis, j'ai mis une autre liste sur le fichier et ca marche pas, j'ai dut faire une fausse manip et je ne trouve pas quoi, pourtant je n'ai pas fait grand chose,

je ne trouve pas ce qu'il y a

https://www.excel-pratique.com/~files/doc/rapport_arret_2b.zip

apres plusieurs essais, il ne me met "1" que sur le premier defaut de la liste, apres il arette

Dans la macro d'origine, il y a une erreur que j'ai reprise dans ma macro

il faut supprimer la condition "Exit for", sinon tous les cas ne sont pas traités.

Je te propose une variante de ton fichier, où une journée est découpée en 6 colonne de 4 heures. (j'ai aussi adapté la macro)

Cordialement

https://www.excel-pratique.com/~files/doc/rapport_arret2.xls

La même version mais j'ai un peu nettoyé le code

https://www.excel-pratique.com/~files/doc/rapport_arret3.xls

super interessant ton tableau, j'aimerais essayer d'approfondir cet exemple

puis-je facilement le modifier? en fait, la journée chez nous se compte de 06:00:00 à 05:59:59 le lendemain.

ce fichier va importe des historiques de défaut et les met en forme pour ensuite faire ces tableaux, il devrat etre entierement automatique jusque l'impression du résultat avant la réunion du matin.

aussi, chaque liste étant a cheval sur deux jours comment faire pour aller chercher la bonne date a partir des listes (dispo: la rangée d'apparition des défaut dans les listes)

apres, il va falloir que je trouve une mise en page car en tout il y a 27 "machines" divisés en plusieurs groupes, mais j'y vais au fur et a mesure car sinon je vais me perdre.

autre question :

Ajoute un espace dans la cellule à coté de l'heure pour prise en compte par la MFC

qu'entends tu par mfc

re:

je regarde tout ca et je n'ai pas les connaissances pour le modifier, c bete, c une super depart,

n'y a t'il pas un site ou un tuto qui explique cela?

si je le veux sur 3 colonnes de 8 heures (06:00-14:00; 14:00-22:00 et 22:00-06:00 avec date +1 a partir de minuit) comment je fait pour le modifier?

Une version avec les heures de 6h00 à 5h59

Pour la récupération des incidents, je suppose que tu les récupère dans un fichier texte.

Si tu as un exemple de fichier texte, il est possible d'écrire un bout de macro qui récupère les infos dans une page excel

https://www.excel-pratique.com/~files/doc/rapport_arret4.xls

mince, désolé j'ai corriger mon messsage trop tard, regarde mon precedent message.

oui, je l'importe au format texte et pour la mise en forme des liste pour les exploiter, les macro sont faites et fonctionnent parfaitement, j'en suis la au plus compliqué, c ce tableau qui me posent probleme, apres, normalement ca devrait aller il n'y aurat plus que des tableaux croisés dynamique et autres graphique (je ne devrais buter que sur des details

voila, une fois ce tableau fait et mis en page pour la vingtaine de machines, ca devrais aller

super, merci a toi, c sympas

maintenant, il me reste a voir comment je peux faire pour tout mettre en forme.

mais pour l'instant, je vais aller me coucher car je n'en peut plus

des demain je me mets dessus ett je te tiendrais au courant, mais j'aureais peut-etre d'autre question.

cordialement, bonne nuit a tous

Bonjour tout le monde,

apres moulte essais, ce tableau est vraiment nickel, bravo!

une petite question voila j'ai donc au total un parc de 19 machines et un autre de 10 machine.

je voudrais donc reproduire 29 fois ce tableau (19 a la suite et 10 en dessous) pour la place, ca rentre. mais le prob, c'est la macro.

c'est ou ca ou il faut que je recopie la macro 29 fois a la suite et que je copie-colle le résultat.

par contre, j'aimerais bien comprendre, alors si vous pouviez le faire avec deux en m'expliquant ce que vous faites, ce serais parfait et ca me permettrais de progresser. en faisant les autres moi-même.

encore merci

Une version avec avec 4 tableaux sur la même page.

Voir si cela correspond à ce que tu veux faire.

Après ajout de tableaux dans la même page, il faut créer les sous-programmes

"Tableau_Qxx" dans le module VBA (en copiant un ".sub" existant)

et renseigner les champs "nom de machine" et "première cellule" du nouveau ".sub"

Cordialement

https://www.excel-pratique.com/~files/doc/rapport_arret6.zip

ok, super,

encore une question si je veux qu'une partie de ces tableaux aillent chercher des infos dans une autre feuille de défaut, je met un module supplémentaire identique et je change le nom de la feuille dans la macro principale, c ca?

J'ai ajouté, le passage en arguments des sous-programmes, le nom de la feuille incidents

Voir le fichier joint

Cordialement

https://www.excel-pratique.com/~files/doc/rapport_arret7.zip

ok, et bien voila, il ne me reste qu'a bosser.

merci et bravo, c du boulot de chef ca 8)

vivement le jour ou je saurais faire des choses comme cela !

je cloture cette discussion car je pense avoir tout ce qu'il me faut

bonne fin de week end.

5loto-v03.zip (22.11 Ko)

re bonjour tt le monde

voila, je sait que j'avais mis résolu, mais j'ai un soucis et je pense qu'il valais mieux faire ca que de rouvrir le meme sujet. j'espere simplement que ce serat vu.

voila, j'ai fait des essais de modif de tableau et la, ca semble fonctionner mais ca ne donne pas des infos correct, j'ai fait des essais avec 1 défaut qui devrais me remplir toute le ligne, mais ca n'en color qu'une partie, j'ai beau chercher, je ne trouve pas ce qu'il y a.

cordialement

https://www.excel-pratique.com/~files/doc/Copie_de_prob.zip

Bonsoir, j'ai vu 2 erreurs

Dans le sous-programme "Sub Arret_machine(..., Incidents As String)", il ne faut pas modifier la ligne :

Set Feuil_incidents = Sheets(Incidents)

le nom de la feuille contenant les arrêts machine est transmis à partir du sous-programme "Sub Tableau_Qxx()" par le jeux des variables "Feuille_incidents" et "incidents".

(Ce qui doit permettre d'utiliser plusieurs feuilles d'incidents).

En résume, il n'y a rien a modifier dans le sous-programme "Sub Arret_machine(...)",

la ligne "Set Feuil_incidents = Sheets("gi tableau")" doit redevenir

Set Feuil_incidents = Sheets(Incidents)

=> mais ce n'est pas là, la source de ton problème

La cellule B2 de la feuille "Tab. 6-14" contient une formule :

='gi tableau'!A2

Soit la valeur : 04/06/2008 06:00:01

=> décalage de 6h00 par rapport à la date attendue : 04/06/2008

Il faut soit, saisir une date seule (Excel considére les heures/minutes/secondes à 0),

soit modifier la macro pour quelle ne prenne en compte que la date (sans les hh:mm:ss)

=> dans le sous-programme "Sub Arret_machine(...)",

remplacer la ligne : Dat2=Dat

par celle-ci : Dat2=int(Dat)

Cordialement

Rechercher des sujets similaires à "condition macro"