Autres VBA / Creation Tableau avec condition

akira21

XLDnaute Nouveau
Bonjour,

J'ai un tableau dans Feuil1 qui m'affiche toutes mes actions dans l'ordre chronologique et suivant les différents lignes ( CPO, LG4, CBO, DWF )
J'aimerai récupérer ces infos est en faire un tableau en Feuil2 en classant par lignes ( CBO, LG4, CBO, DWWF ) mais aussi par jour et avec une condition en plus :

Si l'action est à la date du lundi mais qu'elle dépasse 13h00 alors mettre à la journée du mardi.
Si l'action est à la date du mardi mais qu'elle dépasse 13h00 alors mettre à la journée du mercredi.
Est ainsi de suite.

Cela dépasse mes compétences, donc si une âme charitable veut bien m'aider, ça serait top :)

Merci
 

Pièces jointes

  • Classeur2.xlsx
    14.4 KB · Affichages: 7

_Thierry

XLDnaute Barbatruc
Bonjour @akira21 , @JHA, le Forum

Assez tordue comme demande, d'autant plus que tu as des cellules fusionnées dans le tableau de destination, j'ai perdu plein de temps avec ça, et j'ai finalement décidé de "ByPasser" ton tableau en le modifiant, Je te rassure ça ne se voit pas du tout, mais si tu "Unhide" la Ligne 6 et la Colonne "C" tu comprendras pourquoi !

Sinon le fonctionnement semble cohérent, je me suis efforcé de gérer les erreurs et si "Over-Capacity" en destination sur 4 lignes max de même type. (Voir Cas Test 14/3 et Test 14/4...

Je gère aussi le jour suivant après 13h00 et je gère aussi les Week-End, voir Cas Test 25 en semaine 21... Ou encore Cas Test 17, 18, 19, 20 reporté au Lundi 21 ...

J'ai déjà eu à faire ce genre de trucs, mais ton tableau de réception n'est pas du tout structuré vraiment comme il faudrait d'où une énorme complication. Dans l'état cela fonctionne, mais si tu ajoutes des Lignes etc, ca ne va plus le faire...

Bonne découverte !

Bien à toi, à vous
@+Thierry
 

Pièces jointes

  • XLD_akira21_Tableau_avec_conditions_v00.xlsm
    31.2 KB · Affichages: 4

akira21

XLDnaute Nouveau
Bonjour tout le monde,

Merci de ton aide Thierry :)

Effectivement un peu spécial ma demande !
J'aurai du être plus précis sur la mise en forme du tableau. Ça t'aurait fait perdre moins de temps, désolé :(

Entre le 1er post et celui ci, j'ai avancé, avec de l'aide, sur le fichier.

Malheureusement, je me heurte à 3 problèmes :

- L'affichage des dates dans la colonne B de l'onglet "Feuille de route" n'a rien à faire là. Cette colonne doit être vide.
- Si dans le tableau du "Cockpit" il y a une date qui dépasse le vendredi 13h, alors il n'y a plus de suite dans la feuille de route.
- Et comme tu l'a si bien compris, c'est de reporté ce qui est après le vendredi 13h au lundi matin en tête de liste.

Si tu as des solutions, je suis preneur !!!

Encore merci de prendre de ton temps pour m'aider :)
 

Pièces jointes

  • Feuille de route Akira.xlsm
    94.5 KB · Affichages: 3

_Thierry

XLDnaute Barbatruc
Re Bonjour @akira21 , le Forum

Euh oui, ton tableau dans ton nouveau fichier est, je trouve, encore plus "bordelique" que le premier et je vois que tu n'as pas tenu compte de ne pas utiliser les cellules fusionnées en tout cas pour référencer les dates...

As tu au moins testé mon travail, j'y ai passé du temps, ce n'est pas si simple, là tout est à mettre à la poubelle sur ta nouvelle structure mais tu pourras y récupérer quelques astuces pour les +13h00 et les Week-End...

Tes trois problèmes n'existent pas dans ma version non plus.

Bon courage
@+Thierry
 

akira21

XLDnaute Nouveau
Bonjour Thierry,
C'est ce que j'avais fait avant que tu me donne ton travail.
J'ai commencé à regarder ce que tu as fait et c'est top, je t'en remercie.
Je m'y pencherai plus ce soir et demain en repartant de ton fichier
Je partagerai en retour le résultat, si ça peu aider qq'un.
C'est vrai que le dernier tableau est plus bordélique !!!
Pas évident quand on a peu de connaissances !
Encore merci de ton aide
 

akira21

XLDnaute Nouveau
Thierry,

Peux tu me dire ce que je dois modifier dans ton fichier si mon tableau source en Feuill1 est en B39:F au lieu de A1:E ?

Je galère...o_O

VB:
Sub Button1_Click()
Dim WSSource As Worksheet, WSCible As Worksheet
Dim CellSource As Range, PlageSource As Range
Dim CellCible As Range, PlageCible As Range
Dim MyDate As Date
Dim c As Byte, x As Byte
Dim NotTreated As String

Set WSSource = ThisWorkbook.Worksheets("Feuil1")
Set WSCible = ThisWorkbook.Worksheets("Feuil2")
Set PlageSource = WSSource.Range("B2:B" & WSSource.Range("B1000").End(xlUp).Row)
Set PlageCible = WSCible.Range("C8:C" & WSCible.Range("C100").End(xlUp).Row)

WSCible.Range("D8:R72").ClearContents

For Each CellSource In PlageSource
For Each CellCible In PlageCible


    If CellSource.Text = CellCible.Text Then
    
        If DatePart("h", CellSource.Offset(0, -1)) >= 13 Then
            
           Select Case Weekday(CellSource.Offset(0, -1))
           Case 6 'Friday
                MyDate = Format(DateAdd("d", 3, CellSource.Offset(0, -1)), "dd/mm/yyyy")
           Case 7 'Saturday
                MyDate = Format(DateAdd("d", 2, CellSource.Offset(0, -1)), "dd/mm/yyyy")
           Case 1 'Sunday
                MyDate = Format(DateAdd("d", 1, CellSource.Offset(0, -1)), "dd/mm/yyyy")
           Case Else
                MyDate = Format(DateAdd("d", 1, CellSource.Offset(0, -1)), "dd/mm/yyyy")
           End Select
        Else
            
           Select Case Weekday(CellSource.Offset(0, -1))
           Case 7 'Saturday
                MyDate = Format(DateAdd("d", 2, CellSource.Offset(0, -1)), "dd/mm/yyyy")
           Case 1 'Sunday
                MyDate = Format(DateAdd("d", 1, CellSource.Offset(0, -1)), "dd/mm/yyyy")
           Case Else
                MyDate = Format(DateAdd("d", 0, CellSource.Offset(0, -1)), "dd/mm/yyyy")
           End Select
        End If
        
        For c = 1 To 15
        If MyDate = WSCible.Cells(6, c + 3) Then
            For x = 1 To 3
                If WSCible.Cells(7, c + 3) = WSSource.Cells(1, x + 2) Then
                      
                      If CellCible.Offset(0, c) = "" And CellCible.Offset(0, c + 1) = "" And CellCible.Offset(0, c + 2) = "" Then
                        CellCible.Offset(0, c) = CellSource.Offset(0, x)
                        
                      ElseIf CellCible.Offset(1, c) = "" And CellCible.Offset(1, c + 1) = "" And CellCible.Offset(1, c + 2) = "" Then
                        CellCible.Offset(1, c) = CellSource.Offset(0, x)
                        
                      ElseIf CellCible.Offset(2, c) = "" And CellCible.Offset(2, c + 1) = "" And CellCible.Offset(2, c + 2) = "" Then
                        CellCible.Offset(2, c) = CellSource.Offset(0, x)
                        
                      ElseIf CellCible.Offset(3, c) = "" And CellCible.Offset(3, c + 1) = "" And CellCible.Offset(3, c + 2) = "" Then
                        CellCible.Offset(3, c) = CellSource.Offset(0, x)
                        
                    ElseIf CellCible.Offset(4, c) = "" And CellCible.Offset(4, c + 1) = "" And CellCible.Offset(4, c + 2) = "" Then
                        CellCible.Offset(4, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(5, c) = "" And CellCible.Offset(5, c + 1) = "" And CellCible.Offset(5, c + 2) = "" Then
                        CellCible.Offset(5, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(6, c) = "" And CellCible.Offset(6, c + 1) = "" And CellCible.Offset(6, c + 2) = "" Then
                        CellCible.Offset(6, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(7, c) = "" And CellCible.Offset(7, c + 1) = "" And CellCible.Offset(7, c + 2) = "" Then
                        CellCible.Offset(7, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(8, c) = "" And CellCible.Offset(8, c + 1) = "" And CellCible.Offset(8, c + 2) = "" Then
                        CellCible.Offset(8, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(9, c) = "" And CellCible.Offset(9, c + 1) = "" And CellCible.Offset(9, c + 2) = "" Then
                        CellCible.Offset(9, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(10, c) = "" And CellCible.Offset(10, c + 1) = "" And CellCible.Offset(10, c + 2) = "" Then
                        CellCible.Offset(10, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(11, c) = "" And CellCible.Offset(11, c + 1) = "" And CellCible.Offset(11, c + 2) = "" Then
                        CellCible.Offset(11, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(12, c) = "" And CellCible.Offset(12, c + 1) = "" And CellCible.Offset(12, c + 2) = "" Then
                        CellCible.Offset(12, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(13, c) = "" And CellCible.Offset(13, c + 1) = "" And CellCible.Offset(13, c + 2) = "" Then
                        CellCible.Offset(13, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(14, c) = "" And CellCible.Offset(14, c + 1) = "" And CellCible.Offset(14, c + 2) = "" Then
                        CellCible.Offset(14, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(15, c) = "" And CellCible.Offset(15, c + 1) = "" And CellCible.Offset(15, c + 2) = "" Then
                        CellCible.Offset(15, c) = CellSource.Offset(0, x)
                        
                      Else
                      NotTreated = NotTreated & " -- " & CellSource.Offset(0, x) & vbCrLf
                      End If
                
                End If
            
            Next x
        End If

        Next c
    Exit For
  
   End If
Next CellCible
Next CellSource

If NotTreated <> "" Then
MsgBox "Enregistrement(s) dépassant(s) la capacité" & vbCrLf & NotTreated
End If

End Sub
 
Dernière édition:

_Thierry

XLDnaute Barbatruc
Re bonsoir @akira21

Et oui c'est comme ceci qu'on apprend ;)

C'est ici que ca se passera :

VB:
Set PlageSource = WSSource.Range("B2:B" & WSSource.Range("B1000").End(xlUp).Row)

mais il faut bien comprendre que ce qui "interresse" mon algo, c'est uniquement la Colonne "B" dans ton premier exemple, celle qui contient :

CPO
LG4
CBO
DWF
COPACK

Ensuite à sa droite et à sa gauche vu que je utilise des "OffSet" (décaler) dans tous les sens, il faut que ta table source ait aussi toujours la même structure....

1590003585376.png


Bon courage !
@+Thierry
 

akira21

XLDnaute Nouveau
Merci de ton retour :)

Pour faire plus simple, j'ai laissé le tableau commencer dans la colonne A !
Seulement, je le décale à la ligne 39 au lieu de la ligne 1.
J'ai donc modifié :
VB:
Set PlageSource = WSSource.Range("B40:B" & WSSource.Range("B1000").End(xlUp).Row)

Si je comprends bien, les offset fonctionne horizontalement ?
Exemple :
Code:
If DatePart("h", CellSource.Offset(0, -1)) >= 13 Then
Cet offset prend en compte la colonne B -1 afin d'aller chercher l'heure ?
Le -1 joue donc sur les colonnes.

Mais du fait que j'ai modifié le départ de ligne de B2 à B40, est ce qu'il n'y a pas une histoire de ligne ?
VB:
If DatePart("h", CellSource.Offset(0, -1)) >= 13 Then
Le 0 indique le départ de la ligne ?
Si oui, démarre t'il à partir de B40 comme indiqué plus haut ou de la ligne 1 ?

Ou si ça se trouve, je suis complètement à coté de la plaque :eek:



En tout cas, pour l'instant ça ne va tjrs pas !!!
 

akira21

XLDnaute Nouveau
Hello,

Ca fait 3h que j’épluche le code !
N'ayant que très peu de compétences en VBA, j'ai cherché sur internet ce que chaque ligne voulait dire ou faire !
Malheureusement, il y a des choses que je ne comprends pas :(

J'ai commenté chaque ligne afin que tu vérifies, si tu le veux bien, si j'ai bien compris ou l'inverse !

Je joins le fichier, ça sera peut être plus simple pour toi de commenter.

Si tu n'as plus le temps, je comprendrais et te remercie tout de même de ton aide précieuse :)

VB:
Sub Button1_Click()
Dim WSSource As Worksheet, WSCible As Worksheet 'indique que Feuil1 et Feuil2 sont des Feuilles
Dim CellSource As Range, PlageSource As Range 'indique que CellSource et PlageSource sont des sélections de cellules
Dim CellCible As Range, PlageCible As Range 'indique que CellCible et PlageCible sont des sélections de cellules
Dim MyDate As Date 'indique que MyDate est au format Date
Dim c As Byte, x As Byte 'indique que C et X sont au format 8 byte donc chiffre de 0 à 255
Dim NotTreated As String 'indique que NotTreated est au format texte

Set WSSource = ThisWorkbook.Worksheets("Feuil1") 'on appelle la Feuill1
Set WSCible = ThisWorkbook.Worksheets("Feuil2") 'on appelle la Feuill2
Set PlageSource = WSSource.Range("B40:B" & WSSource.Range("B1000").End(xlUp).Row) 'On sélectionne la plage de cellules à partir de B40 et du coup la suite de la colonne B à partir de B40. Et on remonte à partir de B1000 en listant les lignes ?
Set PlageCible = WSCible.Range("C8:C" & WSCible.Range("C100").End(xlUp).Row) 'la même qu'au dessus !

WSCible.Range("D8:R27").ClearContents 'Supprime la plage de cellule avant de commencer

For Each CellSource In PlageSource 'For Each indique une boucle des différents cellsource dans la plage B40:B
For Each CellCible In PlageCible   'la même sur la place C8:C


    If CellSource.Text = CellCible.Text Then 'On verifie que la plage source = cible au format texte ?
    
        If DatePart("h", CellSource.Offset(0, -1)) >= 13 Then  'Si dans l'intervalle de 0 à 23h dans la colonne Date de fin (A) on est supérieur à 13h puis
            
           Select Case Weekday(CellSource.Offset(0, -1)) 'on sélectionne les jours de la semaine dans la colonne A
           Case 6 'Friday
                MyDate = Format(DateAdd("d", 3, CellSource.Offset(0, -1)), "dd/mm/yyyy") 'Pourquoi Case 6 ? Tableau commençant par C8 + 5 jours donc total 6 colonnes pour arriver à vendredi ? MyDate = Format jour/mois/année. On ajoute 3 pour le faire venir au lundi
           Case 7 'Saturday
                MyDate = Format(DateAdd("d", 2, CellSource.Offset(0, -1)), "dd/mm/yyyy") 'la même +2
           Case 1 'Sunday
                MyDate = Format(DateAdd("d", 1, CellSource.Offset(0, -1)), "dd/mm/yyyy") 'Case 1 ? la même +1 pour faire venir au lundi
           Case Else
                MyDate = Format(DateAdd("d", 1, CellSource.Offset(0, -1)), "dd/mm/yyyy") 'Sinon on ajoute automatiquement +1
           End Select
          
        Else 'Sinon si inférieur à 13h, on recommence sauf le vendredi qui sera mis au vendredi
            
           Select Case Weekday(CellSource.Offset(0, -1))
           Case 7 'Saturday
                MyDate = Format(DateAdd("d", 2, CellSource.Offset(0, -1)), "dd/mm/yyyy")
           Case 1 'Sunday
                MyDate = Format(DateAdd("d", 1, CellSource.Offset(0, -1)), "dd/mm/yyyy")
           Case Else
                MyDate = Format(DateAdd("d", 0, CellSource.Offset(0, -1)), "dd/mm/yyyy")
           End Select
        End If
        
        For c = 1 To 15 'on cible le nombre de ligne/boucle
        If MyDate = WSCible.Cells(6, c + 3) Then 'A partir de là, j'ai besoin d'explication !!!
            For x = 1 To 3
                If WSCible.Cells(7, c + 3) = WSSource.Cells(1, x + 2) Then
                      
                      If CellCible.Offset(0, c) = "" And CellCible.Offset(0, c + 1) = "" And CellCible.Offset(0, c + 2) = "" Then
                        CellCible.Offset(0, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(1, c) = "" And CellCible.Offset(1, c + 1) = "" And CellCible.Offset(1, c + 2) = "" Then
                        CellCible.Offset(1, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(2, c) = "" And CellCible.Offset(2, c + 1) = "" And CellCible.Offset(2, c + 2) = "" Then
                        CellCible.Offset(2, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(3, c) = "" And CellCible.Offset(3, c + 1) = "" And CellCible.Offset(3, c + 2) = "" Then
                        CellCible.Offset(3, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(4, c) = "" And CellCible.Offset(4, c + 1) = "" And CellCible.Offset(4, c + 2) = "" Then
                        CellCible.Offset(4, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(5, c) = "" And CellCible.Offset(5, c + 1) = "" And CellCible.Offset(5, c + 2) = "" Then
                        CellCible.Offset(5, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(6, c) = "" And CellCible.Offset(6, c + 1) = "" And CellCible.Offset(6, c + 2) = "" Then
                        CellCible.Offset(6, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(7, c) = "" And CellCible.Offset(7, c + 1) = "" And CellCible.Offset(7, c + 2) = "" Then
                        CellCible.Offset(7, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(8, c) = "" And CellCible.Offset(8, c + 1) = "" And CellCible.Offset(8, c + 2) = "" Then
                        CellCible.Offset(8, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(9, c) = "" And CellCible.Offset(9, c + 1) = "" And CellCible.Offset(9, c + 2) = "" Then
                        CellCible.Offset(9, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(10, c) = "" And CellCible.Offset(10, c + 1) = "" And CellCible.Offset(10, c + 2) = "" Then
                        CellCible.Offset(10, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(11, c) = "" And CellCible.Offset(11, c + 1) = "" And CellCible.Offset(11, c + 2) = "" Then
                        CellCible.Offset(11, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(12, c) = "" And CellCible.Offset(12, c + 1) = "" And CellCible.Offset(12, c + 2) = "" Then
                        CellCible.Offset(12, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(13, c) = "" And CellCible.Offset(13, c + 1) = "" And CellCible.Offset(13, c + 2) = "" Then
                        CellCible.Offset(13, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(14, c) = "" And CellCible.Offset(14, c + 1) = "" And CellCible.Offset(14, c + 2) = "" Then
                        CellCible.Offset(14, c) = CellSource.Offset(0, x)
                        
                        ElseIf CellCible.Offset(15, c) = "" And CellCible.Offset(15, c + 1) = "" And CellCible.Offset(15, c + 2) = "" Then
                        CellCible.Offset(15, c) = CellSource.Offset(0, x)
                        
                      Else
                      NotTreated = NotTreated & " -- " & CellSource.Offset(0, x) & vbCrLf 'sinon pas traité &"Texte"& info des plages non traité & à la ligne
                      End If
                
                End If
            
            Next x '?
        End If

        Next c '?
    Exit For
  
   End If
Next CellCible '?
Next CellSource '?

If NotTreated <> "" Then 'si ce qui n'a pas été traité <> car nombre de ligne dépassé puis afficher la box
MsgBox "Enregistrement(s) dépassant(s) la capacité" & vbCrLf & NotTreated
End If

End Sub
 

Pièces jointes

  • XLD_akira21_Tableau_avec_conditions_v00.xlsm
    35.7 KB · Affichages: 1

_Thierry

XLDnaute Barbatruc
Re Bonsoir Alira21

Tu t'es pas trop mal débrouillé, j'ai réparé il ne manquait pas grand chose ! (ça fait plaisir de voir que tu essaies de comprendre)

Regarde ton fichier maintenant, mais je n'ai rien vérifié par contre.

@+Thierry
 

Pièces jointes

  • XLD_akira21_Tableau_avec_conditions_v01.xlsm
    37.8 KB · Affichages: 2

_Thierry

XLDnaute Barbatruc
Si je comprends bien, les offset fonctionne horizontalement ?
Pas forcément, MyCell.Offset(-1, 2) ira sur une ligne en moins et deux colonnes en plus...

Cet offset prend en compte la colonne B -1 afin d'aller chercher l'heure ?
Le -1 joue donc sur les colonnes.
Oui dans ce cas précis c'est exact !

Le 0 indique le départ de la ligne ?
Si oui, démarre t'il à partir de B40 comme indiqué plus haut ou de la ligne 1 ?
Depuis B40 en effet, dans la Boucle for Each Cell on part de la Ligne 40, et donc 0 = on ne change pas de ligne.

Ou si ça se trouve, je suis complètement à coté de la plaque
Non non, je peux t'encourager, tu te débrouilles bien !

Et pour les questions de Codes :
VB:
           Case 6 'Friday
                MyDate = Format(DateAdd("d", 3, CellSource.Offset(0, -1)), "dd/mm/yyyy")
                'Pourquoi Case 6 ? Tableau commençant par C8 + 5 jours donc total 6 colonnes pour arriver à vendredi ? MyDate = Format jour/mois/année. On ajoute 3 pour le faire venir au lundi
Case 6 c'est pour Weekday(CellSource.Offset(0, -1)), le 6 ième jour en VBA USA c'est le Vendredi (le 1er étant le Dimanche)

VB:
For c = 1 To 15 'on cible le nombre de ligne/boucle
Non c parle de Colonnes, on a 15 colonnes à remplir dans le tableau de destination.

VB:
For x = 1 To 3
On a y trois items à remplir (CODE SAP,DESIGNATION,PROGRAMME)

VB:
                End If
            
            Next x '?
        End If

        Next c '?
    Exit For
  
   End If
Next CellCible '?
Next CellSource '?
Il faut bien fermer les Boucles et passer à la suivante ... ;)

Voilà, je pense que tu n'es pas loin d'avoir tout compris !

La série interminable de 15 If / ElseIF / ElseIf que je déplore est due au fait qu'on ne peut pas faire une boucle simple et rationnelle selon la structure de ton tableau de destination. On doit tester si la série des trois cellules ont été remplies... (J'ai synchronisé ton tableau aussi pour avoir 15 lignes par Type (CPO, CBO etc) car on ne peut pas avoir de différence du nombre de ligne par type.

Bonne découverte
@+Thierry
 

akira21

XLDnaute Nouveau
Bonjour Thierry,

Merci pour toutes ses explications ainsi que ton aide :)

Découvrant le VBA, je ne savais pas que les jours VBA USA étaient tel quel ! C'est bon à savoir !!!
Donc si je modifie l'emplacement, ça se passe dans la mise en forme du second tableau et de la récupération de données sur le 1er où je n'allais pas chercher au bonne endroit (cellule vide!)
Je n'avais pas compris cette partie de code mais maintenant tout est plus clair grâce à toi :D

C'est vrai que la série de If / ElseIF ne doit pas optimiser le code et temps d'exécution à cause de ma structure de tableau...
Selon toi, qu'est ce qui aurait été plus simple comme structure pour optimiser le tout et pour ne pas être bloquer par ces 15 If / ElseIf ( ligne ), c'est à dire dynamiser les lignes du tableau en Feuil2 ?

Je comprends maintenant pourquoi tu me disais que les cellules fusionnées étaient un frein pour optimiser. Mais comment garder une structure lisible tout en l'optimisant ? Sachant que je dois imprimer le tableau sur une feuille A4.
En attendant ton retour, je vais m'y pencher dessus aujourd'hui et essayer de comprendre ce que je peux faire de mieux !

Bonne journée
 
Dernière édition:

_Thierry

XLDnaute Barbatruc
Bonjour @akira21 , le Forum

Tout dépend si maintenant ton tableau correspond à tes besoins, tu peux garder son format si avec 15 row de possibiltés par journée de la semaine par Type te suffisent.
Cette cascade de If /ElseIf n'est pas si 'terrible" sur le temps d'execution... Maintenant si ton tableau final doit comporter 150 rows de possibilités par date et par type ... C'est une autre histoire ! (en un enfer à écrire en code ! ;))

Mais comment garder une structure lisible tout en l'optimisant ?
Tu peux toujours masquer la Ligne 6 (Dates Semaine par formules) et la Colonne "C" (Types répétés 15 fois), d'ailleurs je me rends compte que dans mon fichier j'ai "dragué" LG4 et au lieu de répéter, j'ai LG4, LG5 LG6 etc à corriger bien évidemment sinon tu n'auras pas de résulat pour ce type LG4 !

Disons que la présentation de va pas te plaire, mais un tableau de destination de la sorte sera 200 fois plus ergonomique à gérer :

1590054798613.png


C'est juste un exemple, je ne vais pas programmer ce truc pour le moment...

Bonne découverte
@+Thierry
 
Haut Bas