D'extension Code pour Super Dévelopeur Excel 2007
Bonjour le forum et aux cadors d'Excel qui j'espèrent apporterons une solution à mon Pb sous Excel.
Depuis peux on a un Scénario de collecte de données défaillant qui remontent des valeurs à Zéro (Surcharge réseau ) et qui fausse la lecture. (En gros la Machine Envoie des données pendant un laps de temps au système si ce dernier est occupé alors c Perdu)
Le But de ma requête est de reconstituer par l'intelligence artificielle d'Excel les lignes Manquante
[u]J'ai un Bouton Rouge qui fait en partie déjà le Job mais absolument pas optimisé
[/u]
Pour y arrivé si je devais le faire Manuellement c'est de respecté les logiques suivant :
Conditions de reconstitution de Ligne
Si sa Colonne C=0 et que la valeur de sa colonne D de la ligne suivante est différente alors on récupère X fois les valeurs existante de sa colonne L
En clair dans mon fichier Exemple:
Ligne 2
C2=0 D2 différent de D3 (Condition Remplie) Donc je lis L2=25
Donc je recrée 25 fois la Ligne2 en m'aidant d'un bloc Existant de 25 lignes (ici Ligne8 a Ligne32)
Ligne 3
C3=0 D3=D4 (Condition non remplie) Pas de traitement
Ligne 33
C33=0 D33 différent de D34 (Condition Remplie) Donc je lis L33=25
Donc je recrée 25 fois la Ligne33 en m'aidant d'un bloc Existant de 25 lignes (ici Ligne85 a Ligne106)
Ligne 263
C263=0 D263 différent de D264 (Condition Remplie) Donc je lis L263=9
Donc je recrée 9 fois la Ligne263 en m'aidant d'un bloc Existant de 9 lignes (ici Ligne286 a Ligne294)
Ligne 264
C264=0 D264=D265 (Condition non remplie) Pas de traitement
...... Tant que colonne C=0 on continue le traitement ...........
En espérant avoir était clair.
Par Avance Merci
Bonsoir à toutes et à tous
Je serai très reconnaissant envers le génie qui saura me développer et faire grandir mon outil, car aujourd'hui force de constater
que je fais cela manuellement sur plusieurs lignes et Onglets et c'est très chronophage !!! entre 40 et 90 minutes par traitement ....
Comme on dit Excel sait tout faire mais pour moi c'est le codeur que vous êtes qui sublime ce logiciel et Merci de partager
votre savoir faire comme vous le faites souvent sur ce forum que j'apprécie particulièrement.
Bon bout d'An, et portez vous bien, et par avance MERCI !!!! pour vos futurs propositions et coup de pouces que vous voudriez bien me soumettre car j'implore grandement votre Aide sur ce sujet
Bien cordialement
Bonjour Barachoie,
combien de traitements dois-tu faire par semaine ou par mois ?
Salut Barachoie, H2SO4,
compris le principe mais il y a quand même un truc que je n'ai pas pigé (ce serait trop beau...) : où trouves-tu tes "blocs existants" ? puisqu'il faut justement les rétablir ?
A+
Bonsoir et Merci de l’intérêt que vous portez à mon problème
Avant tout mes excuses pour la réponse tardive car j’étais sur la route et à mon point de chute pas de Pc pour travailler.
Pour revenir à vos questions respectives h2so4 et curulis57 je tenais à vous expliquer le but.
Je travaille dans une société à Heures 24/24 et Jours 365/365 pour fabriquer des pièces Aéronautiques Spatiale type satellites et voitures compétitions etc….
Dans un projet [colonneA] on lance toujours 25 piéces [colonneC] et selon affectations certains ce vois conférer des traitements spécifique décomposé en séquences [colonneD] d’usinages, anodisations, peintures etc….
Un projet évolue pendant 4 et 8 mois donc avec énormément de phase de fabrication donc de lignes
Au contrôle qualité intémédiaire, final ou en utilisation dans les LabTest ou chez le client il nous faut savoir ou sont passé chaque pièce dans sa vie de fabrication pour rectifier une éventuelle défaillance.
Donc avoir une valeur à Zéro n’est pas concevable d’où le besoins de reconstitution.
Je gère environ 24 à 32 Projets par semaine, et chaque Projet est composé de 32000 lignes en Moyenne que je reconstruit manuellement
1) Je met un filtre « 0 » ColonneC puis je blanchi les Textes de toutes les lignes
2) Pour chaque ligne « Textes blanc » Si colonne C=0 + colonne L=25 + colonneD ligne suivante différentes séquences Alors je crée 25 lignes identique en changeant juste colonneC en mettant 1,2,3,4,5,6……….25
3) L’etape 2 est recommencé X fois tant que « Textes blanc » Si colonne C=0 + colonne L=25 + colonneD ligne suivante différentes séquences
4) Ensuite je m’attaque aux autres cas ou colonne L<25
dans mon exemple L=9
Donc je crée 9 fois la ligne et pour avoir les bonnes pieces ColonneC je vais chercher
a la séquence le plus prêt de ma séquence actuel ou le cas de 9 apparait
Pour éviter toute confusion on a établi une règle aux bureaux Projets :
- 25 pieces par projets
- Si en cours de route on doit diviser le projet pour tel ou tel affectation on ne doit jamais créer
La fabrication étant linéaire dans le temps on retrouvera forcément plus tard ce groupe qui à vécu différemment des autres
Merci d’avoir pris le temps de lire et je suis open pour les avis et les solutions que vous voudriez bien me soumettre.
Je vous souhaite bonne santé à vous et vos proches et un bon réveillon en famille
Merci de votre support et ingéniosité
Bien cordialement et respectueusement
Salut Barachoie, H2SO4,
Salut le forum,
premier jet...
Un double-clic en Feuille1 affiche le résultat escompté en 'EXTRACT'.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim rCel As Range, tData, iCol%, iNum%, iRow%, iRowA%
'
Cancel = True
On Error Resume Next
Application.ScreenUpdating = False
iRowA = Range("A" & Rows.Count).End(xlUp).Row
'
With Worksheets("EXTRACT")
.Cells.Delete
Range("A1").Resize(iRowA, 13).Copy Destination:=.Range("A1").Resize(iRowA, 13)
For x = iRowA - 1 To 2 Step -1
iRow = 0
If .Cells(x, 3) = 0 And .Cells(x, 4) <> .Cells(x + 1, 4) Then
.Rows(x + 1 & ":" & x + .Cells(x, 12)).Insert shift:=xlDown
.Range("A" & x & ":L" & x + .Cells(x, 12)).FillDown
tData = .Range("A" & x & ":L" & x + .Cells(x, 12)).Value
If CInt(.Cells(x, 12)) < 25 Then
For Y = x + CInt(.Cells(x, 12)) + 1 To .Range("A" & Rows.Count).End(xlUp).Row
If .Cells(Y, 12) = .Cells(x, 12) And .Cells(Y, 3) > 0 Then
iRow = Y
Exit For
End If
Next
End If
For Y = 2 To UBound(tData, 1)
tData(Y, 6) = DateAdd("d", 1, CDate(tData(Y - 1, 6)))
For Z = 1 To 5
iNum = 0
iCol = Choose(Z, 3, 7, 8, 9, 10)
If iCol = 3 Then
If iRow = 0 Then tData(Y, 3) = CInt(tData(Y - 1, 3)) + 1
If iRow > 0 Then tData(Y, 3) = .Cells(iRow + (Y - 2), 3)
Else
If IsNumeric(Right(tData(Y, iCol), 2)) Then iNum = 2
If IsNumeric(Right(tData(Y, iCol), 1)) And iNum = 0 Then iNum = 1
If iNum > 0 Then
tData(Y, iCol) = Left(tData(Y, iCol), Len(tData(Y, iCol)) - iNum) & Format(Val(Right(tData(Y - 1, iCol), iNum)) + 1, IIf(iNum = 1, "0", "00"))
End If
End If
Next
Next
.Range("A" & x & ":L" & x + .Cells(x, 12)).Value = tData
End If
Next
.Columns.AutoFit
.Activate
End With
'
On Error GoTo 0
Application.ScreenUpdating = True
'
End Sub
Dans ce premier jet, je postule que "les blocs existants" au cas où [L xx] < 25, existent bel et bien et sont situés en bas de la ligne à reconstituer sinon, une petite modif'...
Joyeuses Fêtes à tous,
A+
Bonjour à tous,
barachoie, tu parles de projet en colonne A, mais ne faut-il pas tenir compte de la colonne G "Entity" pour former ces blocs ?
La colonne E contient-elle des éléments (y a t-il des messages d'erreur ?) dont il ne faut pas tenir compte pour constituer ces blocs ?
Que signifie DEPTR
Ne faudrait-il pas procéder initialement à un nettoyage en supprimant des doublons?
Le problème c'est que tu ne nous dit pas tout, mets toi à la place de tes interlocuteurs qui ne connaissent pas ton travail
klin89
KLIN89 et CURULIS57 bonjour et Merci
CURULIS57 ton premier Jet est opérationnel et il me faudra traité plusieurs Dossier pour voir les réajustements.
Le seul réajustement à l'instant T est une erreur qui m'incombe et que j'ai laissé dans mon fichier Test que je vous ai transmis et je m'en excuse.
En effet seul la colonne C est à reconstruire le reste des colonnes restent à l'initial de la copie de ligne (pas d'incrémentation)
et est-ce qu'il est possible de mettre en blanc Gras les lignes qu'il reconstruit dans EXTRACT
Tu m'enlève là une belle épine du pied CURULIS57 et je t'en remercie infiniment
Bien cordialement
Salut Barachoie, Klin, H2SO4,
premier jet ne signifie pas que j'ai tout compris, n'est-ce pas...
Klin a raison : le "bloc existant" de 85 à 106 ne compte que 22 lignes...
Perso, je n'ai pas chipoté : 25 = de 1 à 25, point!
Mise au point :
- OK, pas d'incrémentation des colonnes F,G,H,I,J ;
- OK pour le blanc gras ;
- un "bloc existant" est-il le premier bloc de même "contenance" (25,9,...) rencontré dans les lignes suivantes et uniquement suivantes ? Quelle utilité si contenance = 25 ?
- si ce bloc n'existe pas, quid ? Si une condition de reconstruction est remplie en fond de tableau, par exemple?
Ça va aller...
A+
Bonsoir,
Oh que si vous avez compris et c'est là votre force et MERCI
-Le 22 au lieu de 25 est une erreur de ma part il faut bien creer 25 lignes (d'ou il etait temps d'automatisé cat Manuellement c'est galère)
Mise au point :
- OK, pas d'incrémentation des colonnes F,G,H,I,J ; -------Merci (pourras-tu me donner le code)
- OK pour le blanc gras ; --------Merci (pourras-tu me donner le code)
- un "bloc existant" est-il le premier bloc de même "contenance" (25,9,...) rencontré ------ Oui dans la mesure du possible
- dans les lignes suivantes et uniquement suivantes ? Quelle utilité si contenance = 25 ? -----Process standard que l'on garde
- si ce bloc n'existe pas, quid ? Si une condition de reconstruction est remplie en fond de tableau, par exemple? ----Pop-Up en specifiant le ou les lignes a construire Manuellement
Merci a vous deux pour votre clairvoyance et spontanèité pour me remonter mes pb de reconstitution Manuel
Merci de votre support car c'est géant ce que vous realisez là
Bien cordialement
Salut Barachoie,
voilà ton fichier adapté selon tes précisions.
J'ai "créé" un faux bloc de 3 à reconstituer en fond de tableau, histoire de provoquer l'affichage d'un message simulant le n° de ligne d'un bloc < 25 non actualisé.
Donc :
- un bloc de 25 -> initialisé de 1 à 25 ;
- bloc < 25 avec bloc existant -> les valeurs de ce bloc ;
- bloc < 25 sans bloc existant -> initialisé de 1 à nb. de lignes de ce bloc et renseigné dans MsgBox.
Autre question : dans un bloc à reconstituer, faut-il garder la ligne "0" (zéro) puisque je constate que les blocs "normaux" commencent tous par un chiffre > 0 ?
A+
Bonjour et Merci curulis57,
Tu es un AS !!!!
Tu as raison si tu fait sauté la ligne "0" puisque tu l'as parfaitement reconstitué et Très grand MERCI à toi pour ton
génie et le bond de géant que tu me fais gagné grâce à ton Super code.
Je t'en félicite je l'essaye sur plusieurs Dossiers et reviendrai vers toi.
Le double click onglet est génial et je t'en remercie. Je réfléchie à l'usage futur dés lors que dans un meme classeur j'aurai plusieurs "Onglet = Dossier Différent" commençant par Lg xxx et que le traitement se fasse en une fois
Cordialement tu es génial !!!!!!!!!!!!!!!!!
MERCI !!!!!!!!!!!!!!!!!
Re, Barachoie,
si il n'y a que ça pour te faire plaisir, alors...
Un double-clic dans n'importe quelle feuille lance la macro.
- le code scanne et traite toutes les feuilles si elles commencent par "LG".
! ATTENTION : le code s'attend à trouver les infos adéquates dans les mêmes colonnes telles que décrites dans l'énoncé initial de la demande !
- les modif' se font directement sur les feuilles 'LGxxx' sans passer par un 'EXTRACT' : ça, évidemment, je ne sais pas si c'est souhaité... ;
- la ligne "0" est zappée ;
- le MsgBox (pas testé mais devrait...) récapitule les blocs < 25 non-existants par feuille traitée.
L'idéal serait de m'envoyer un tel fichier multi 'LGxxx', histoire de tester tout ça...
A+
Re, re, (avant re...) Barachoie,
Même chose pour le traitement multi-feuille... double-clic n'importe où dans n'importe quelle feuille... sauf en [A1] !!!!
En effet, dans cette version, dans les feuilles où il y a un problème de blocs < 25 "non-existants", je colore les lignes à problème en rouge!!
Donc, dans ces feuilles à problème, un double-clic en [A1] affiche aussitôt la première ligne en rouge.
A toi de les colorer autrement après traitement manuel pour, sur un nouveau double-clic en [A1], afficher l'éventuel problème suivant.
Tu suis?
With Sh
For x = 1 To .Range("A" & Rows.Count).End(xlUp).Row
If Cells(x, 1).Font.Color = RGB(255, 0, 0) Then
ActiveWindow.ScrollRow = x
Exit For
End If
Next
End With
A+
Curulis57 c'est purement un chef d'oeuvre mes Yeux m'en tombent face a une telle prouesse
Tu as largement dépassé mes attentes et ceux en un temps records c'est simplement fabuleux.
Sais-tu que cela fait trois ans que j'en ai rêvé et Curulis57 l'a fait !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
béni sois-tu et que la joie le bonheur et la prospérité inonde ton quotidien
Merci à toi, Tu as fait un Super Boulot Vraiment !!!!!!!
Bien respectueusement et avec toutes ma reconnaissance
Danie
Curulis57 bonjour,
grâce a l'ecxellent fichier que tu m'as fourni il apparait une évidence d'un non traitement jusqu'a ce jour complètement ignoré par moi en premier et mes collaborateurs.
Je l'ai constaté grâce a toi et je t'en remercie infiniment, bien que dans l'incapacité de le résoudre
Dans le fichier joint j'ai mis les nouvelles lignes qui sont a exploités en ligne 3 , 5 , 300, 302
en effet j'arrive dans le cas ou "0" est masqué par la ligne d'aprés Meme valeurs colonne D et colonne K=1
Cette nouvelle condition s'exploiterai ainsi : Si colonneC =25 + ColonneC-1 = 0 + colonne K=1 alors recréer 25 fois la Ligne
Exemple la Ligne 3 ,5 300 ,302 à copier 25 fois
Par sécurité avec cette nouvelle condition si colonneC <25 + ColonneC-1 =0 + colonne K=1 alors recherche de bloc existant et recréer X fois la ligne 3,5,300,302 à copier X fois
Bien cordialement
Daniel
Salut Barachoie,
pas encore regardé mais, si [C] < 25, à recopier X fois selon [C] ou selon [L] ?
La ligne "0" doit, je suppose, être effacée ?
La numérotation : de 1 à 25 ?
Pour les blocs < 25, même principe : numérotation du bloc existant ou de 1 à xx ?
A+
Bonsoir et Merci Curulis57
Dans ce nouveau Scenario le comptage se fera par le chiffre colonne C.
Avant ce nouveau scenario je n'avais pas saisie que tout les valeurs à zéro était effacé, je me suis basé que sur l'effacement
des lignes ayant subit le traitement.
Le fait d'effacer les Zéro non traiter nous fera perdre trop de données utiles pour la compréhesion des problemes de fabrication.
Ce nouveau scenario m'était étranger auparavant et cette aprés-midi quand j'ai remonté cette faille et bien le bureau projet
à émis une mise en garde pour cette faille et je t'en remercierai jamais assez.
Merci
Cordialement
Daniel
Salut Barachoie,
je n'ai qu'un mot à dire en fonction de la responsabilité que tu mets sur moi :
! VÉRIFIE, VÉRIFIE, VÉRIFIE ET VÉRIFIE ENCORE !
A+