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

21condor.xlsb (64.07 Ko)

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
de groupes partagé égaux en nombre 25 = 8+13+4 OK 25 = 8 + 8 + 9 NOK

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+

8condor.xlsm (113.45 Ko)

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?

brc

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

re barachoie,

Sauf qu'en ligne 33, il faut insérer 25 lignes et non pas le bloc de 22 lignes constitué des éléments de la colonne C (lignes 85 à 106)

brc1

Si je sais compter

klin89

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+

13condor.xlsm (79.47 Ko)

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+

5condor.xlsm (72.20 Ko)

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+

7condor.xlsm (72.68 Ko)

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

3condor1.xlsm (72.04 Ko)

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+

5condor1.xlsm (71.81 Ko)
Rechercher des sujets similaires à "extension code super developeur 2007"