Création Liste Manquante par Déduction

Bonjour,

Je viens vers vous pour solliciter pour votre curiosité et savoir faire Expert.

Question Avec Excel pouvons nous créer une Liste Manquante à partir de deux Entrées ?

En pièce Jointe Deux Onglet un Standard et l'autre transformé pour exemple

Pour chaque Onglet "lg XXX" existant dans le classeur

18lp-00-rev0.xlsm (99.19 Ko)

Si colonne "C" = 0 et que colonne "L" > 0 alors Créer Liste transformé(*)

(*)Liste transformé = Intitulé de la Ligne ou l'on a trouvé colonne"C"=0 avec colonne qui s'incrémente(**)

(**)Colonne qui s'incrémente x fois de la valeur de L initial en respectant l'ordre de la prochaine valeur jumelle

Dans mon exemple on commence par la ligne 2 ou C=0 et L=25

Donc j'insère 25 fois la Ligne 2 et l'incrémentation colonne C se fera comme le prochain L=25 réel existant soit ligne 4 à 28

et ceux ainsi de suite à chaque fois que C = 0 alors refaire la Manip

Ecriture en blanc volontaire et voulue pour différencier avant aprés

Merci Infiniment pour l'intérêt que vous porterez a ce projet car sans votre aide je ne pourrai aboutir

Bien cordialement

Bonjour,

à tester,

Sub test()
Set plg = Range("C:C")
keywords = "0"
  With plg
    Set c = .Find(keywords, LookIn:=xlValues, LookAt:=xlWhole)
    If Not c Is Nothing Then
       firstAddress = c.Row
        i = firstAddress
        Rows(i + 1 & ":" & i + Cells(i, "L")).Insert Shift:=xlDown
        Rows(i & ":" & i + Cells(i, "L")).FillDown
         For n = 1 To Cells(i, "L")
          Cells(i + n, "C") = n
         Next

        Debug.Print firstAddress
        Do
            Set c = .FindNext(c)
            y = c.Row

            If c.Row = firstAddress Then Exit Sub

            Rows(y + 1 & ":" & y + Cells(y, "L")).Insert Shift:=xlDown
            Rows(y & ":" & y + Cells(y, "L")).FillDown
            For n = 1 To Cells(y, "L")
             Cells(y + n, "C") = n
            Next

        Loop While Not c Is Nothing And c.Row <> firstAddress
    End If
 End With
End Sub

Bonjour et Merci pour ton implication SabV

Tu y es presque....et c'est trop génial de le voir tourné et c'est magique !!!!! tu es un As

Reste à faire remonter la vraie liste dans l'ordre car très important de respecter l'ordre

Exemple : ligne 259 et 260 doivent avoir chacun 9 lignes de Plus incrémenté comme ligne 282 à 290

ce qui donne 2 8 12 10 16 20 18 22 24

je Dois avoir

RaptorXXRES 0 0 2450

RaptorXXRES 0 2 2450

RaptorXXRES 0 8 2450

RaptorXXRES 0 12 2450

RaptorXXRES 0 10 2450

RaptorXXRES 0 16 2450

RaptorXXRES 0 20 2450

RaptorXXRES 0 18 2450

RaptorXXRES 0 22 2450

RaptorXXRES 0 24 2450

Par avance Merci car tu viens de donner un sacré coup de boost

Bien cordialement

Bonjour,

pourquoi ce n'est pas comme entre 159 et 166 ?

1

4

7

10

13

16

19

22

25

Très bonne question

La réponse est toujours plus bas que la ligne trouvée.

En allant vers le bas on respecte la Chronologie dans le temps

Ici ligne 259 et 260 s' incrémente selon ligne 282 à 290 qui sont plus bas

159-166 non valable.

Au cours du processus de fabrication il y a des pertes qui ne pourront jamais revenir

Tel une compétition d'équipe

si on attribut des chiffres à une nation au départ d'une compétition et bien en demi-final on a plus de chance d'avoir

ce chiffre présent en final qu'en 16eme de final si tu veux ça réduit considérablement les probabilités

Merci pour ton intérêt que tu portes a ce projet et je t'en suis infiniment reconnaissant

Cordialement

Bonjour,

Voici la nouvelle version,

ça fonctionnera si il existe un groupe après chaque Cx = 0 ayant le même nombre qu'en cellule Lx,

il n'y a pas de problème pour le tableau de l'onglet lg RaptorXX

mais le cas pourrait être réel et il faudra alors prévoir autre chose.

Sub test()
Set plg = Range("C:C")
keywords = "0"
rw = Cells(Rows.Count, 1).End(xlUp).Row
  With plg
    Set c = .Find(keywords, LookIn:=xlValues, LookAt:=xlWhole)
    If Not c Is Nothing Then
       firstAddress = c.Row
        i = firstAddress
        Rows(i + 1 & ":" & i + Cells(i, "L")).Insert Shift:=xlDown
        Rows(i & ":" & i + Cells(i, "L")).FillDown

        For j = i + 1 To rw
          If Cells(j, "C") > 0 And Cells(j, "L") = Cells(i, "L") Then
            For k = j To j + Cells(i, "L")
             a = a + 1
             Cells(i + a, "C") = Cells(k, "C")
             If a = Cells(i, "L") Then Exit For
            Next k
           Exit For
          End If
        Next j

        Debug.Print firstAddress
        Do
            a = 0
            Set c = .FindNext(c)
            y = c.Row

            If c.Row = firstAddress Then Exit Sub

            Rows(y + 1 & ":" & y + Cells(y, "L")).Insert Shift:=xlDown
            Rows(y & ":" & y + Cells(y, "L")).FillDown
            rw = Cells(Rows.Count, 1).End(xlUp).Row

            For j = y + 1 To rw
              If Cells(j, "C") > 0 And Cells(j, "L") = Cells(y, "L") Then
                For k = j To j + Cells(y, "L")
                a = a + 1
                 Cells(y + a, "C") = Cells(k, "C")
                 If a = Cells(y, "L") Then Exit For
                Next k
               Exit For
              End If
            Next j

        Loop While Not c Is Nothing And c.Row <> firstAddress
    End If
 End With
End Sub

Merci pour cette nouvelle version qui m'alheuresement ne répond pas à partir de Rows(i + 1 & ":" & i + Cells(i, "L")).Insert Shift:=xlDown

Peut être un pb local pour mon Pc?

Cordialement

Merci

J'ai corrigé le bug en passant sous Excel 2007, y a pas de raison tu me diras sur versions récente

Pour les exceptions je jette un coup d'oeil car ce sera des cas tres rares.

au pire une Msgbox de warning si condition non remplie

bon et Excellent week-end c'est hyper class !!!!!

Merci barachoie, pour ce retour, au plaisir!

si le problème est résolu, s.v.p. pour clôturer le fil, cliquer sur le bouton V vert du post à coté du bouton EDITER, merci!

bonjour sabV et Merci

J'ai mis ta Macro à l'épreuve sur le terrain et j'ai découvert un bug de taille.

Dans les extracts il y a des lignes Unique ou la colonne C est différent de 0 est colonne L est égal par mégarde au nombre

que l'on recherche dans le block donc cela fausse le dérouler car il y a pas un reel comptage.

Exemple en ligne 4 du fichier joint.

Par avance Merci pour ta proposition

Bonjour,

ça fonctionne mais les données sont pris sur la plage suivante

le décompte se fait à partir de 25 puis 1, 2,3,....jusqu'à 24

  • Projet Rank Identity ENTITY U Total BLOCK#
    RaptorXX 1 25 VEV211 (MATRIX) 1 25
    RaptorXX 1 1 VEV211 (MATRIX) 1 25
    RaptorXX 2 2 VEV211 (MATRIX) 1 25
    RaptorXX 3 3 VEV211 (MATRIX) 1 25
    RaptorXX 4 4 VEV211 (MATRIX) 1 25
    RaptorXX 5 5 VEV211 (MATRIX) 1 25
    RaptorXX 6 6 VEV211 (MATRIX) 1 25
    RaptorXX 7 7 VEV211 (MATRIX) 1 25
    RaptorXX 8 8 VEV211 (MATRIX) 1 25
    RaptorXX 9 9 VEV211 (MATRIX) 1 25
    RaptorXX 10 10 VEV211 (MATRIX) 1 25
    RaptorXX 11 11 VEV211 (MATRIX) 1 25
    RaptorXX 12 12 VEV211 (MATRIX) 1 25
    RaptorXX 13 13 VEV211 (MATRIX) 1 25
    RaptorXX 14 14 VEV211 (MATRIX) 1 25
    RaptorXX 15 15 VEV211 (MATRIX) 1 25
    RaptorXX 16 16 VEV211 (MATRIX) 1 25
    RaptorXX 17 17 VEV211 (MATRIX) 1 25
    RaptorXX 18 18 VEV211 (MATRIX) 1 25
    RaptorXX 19 19 VEV211 (MATRIX) 1 25
    RaptorXX 20 20 VEV211 (MATRIX) 1 25
    RaptorXX 21 21 VEV211 (MATRIX) 1 25
    RaptorXX 22 22 VEV211 (MATRIX) 1 25
    RaptorXX 23 23 VEV211 (MATRIX) 1 25
    RaptorXX 24 24 VEV211 (MATRIX) 1 25
    RaptorXX 25 25 VEV211 (MATRIX) 1 25

Bonjour sabV et encore Merci pour ton implication.

J'ai fait tourné ta Macro en réel et le temps de traitement dépasse 3 heures pour un fichier.

Je pense qu'il faudrait qu'il se base sur un nombre de ligne réel que supposé.

Dans l'exemple que je te joint ici, les lignes suivante ne devrait pas être créer

RaptorXX 0 25 2425 II_SIGNALFG:SIGNALing_FG_VINGA

RaptorXX 0 25 2425 II_SIGNALFG:SIGNALing_FG_VINGA

RaptorXX 0 4 2425 II_SIGNALFG:SIGNALing_FG_VINGA

RaptorXX 0 25 2425 II_SIGNALFG:SIGNALing_FG_VINGA

RaptorXX 0 25 2445 TQCPRRDRY:Mol_Removal_Dry

RaptorXX 0 25 2445 TQCPRRDRY:Mol_Removal_Dry

RaptorXX 0 4 2445 TQCPRRDRY:Mol_Removal_Dry

RaptorXX 0 25 2445 TQCPRRDRY:Mol_Removal_Dry

6test0001.xlsm (67.83 Ko)

Bonjour,

J'ai fait tourné ta Macro en réel et le temps de traitement dépasse 3 heures pour un fichier.

je ne rencontre pas ce problème, sur mon pc la macro ne prend que 1 à 2 sec à s'exécuter.

comme je l'avais déjà dit, ça fonctionnera si il existe un groupe après chaque Cx = 0 ayant le même nombre qu'en cellule Lx,

il n'y a pas de problème pour le premier fichier transmit, mais le cas pourrait être réel et il faudra alors prévoir autre chose.

je pense que le cas c'est présenté sur le dernier fichier transmit,

si c'était possible de créer des tables de référence pour les données de la colonne "Identity"

cela éviterait ces erreurs.

par exemple au lieu de chercher les données plus bas, les données serait récupérer sur la table Identity:

excel table identity

SabV bonjour et Merci.

En effet le cas est quasiment systématique.

sur un Total de 43514 lignes le nombre de simple 0 associé a 25 indésirable de dénombre 72 fois

donc le traitement s'éternise et devient incompréhensible et ajoute de la confusion.

Tu as était très moteur et constructif dans ce projet et je t'en remercie mais je pense qu'il n'y a pas de

solution que part la recherche d'un comptage exact de ligne.

Encore Merci SabV pour ton aide et support

Bien cordialement

SabV bonjour et Merci,

Avant tout Merci de t'être penché sur ce Dossier en Mai dernier, car à l'époque tu as contribué a faire avancé le projet mais aujourd'hui fort est de constater que tu as à l'époque eu raison de proposer une table entity (car compliqué de le faire en Automatique avec Excel).

Pour Revenir a table entity pour 25 ok pour 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25

<25 ça sera du cas par cas type création de la liste par le biais d'une boite de dialogue.

En gros Excel fait un premier passage pour les 0 à 25 est donc crée la liste 1 à 25

Deuxieme passage il fait une halte sur la ligne ou les 0 < à 25 et on donne une liste ainsi de suite .....

Penses - tu que cela est réalisable ?

Encore Merci de Ton Aide et support precieux

Bien cordialement

SabV ci joint un fichier complet proche de la réalité

au début on a des 0 25

donc

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

vers la fin on a des 0 23 ou 0 22

d'ou l'idée d'une boite de dialogue ou on remplirai la liste

exemple Ligne 16670 0 23

Donc pour 23 =Sélection Ligne 16673 - 16695

pour avoir

1

3

5

6

8

10

12

14

16

20

22

24

2

4

7

9

11

13

15

17

21

23

25

Merci

6datas.xlsb (455.05 Ko)

Bonjour Messieurs et Dames du forum ,

SabV avait donné un élan a ce projet , est ce quelqu'un a une idée pour donner une suite.

Mon projet est aujourd'hui à l'arrêt et je vous serai reconnaissant de bien vouloir partager vos talents, et je vous demande votre aide precieux.

Bien cordialement

Rechercher des sujets similaires à "creation liste manquante deduction"