Dates en entête de colonne et TCD

RE,

Les dates sont en 01/01/1900 et en colone quantité je retrouve les dates et les quantités. Mon fichier "exemple" a exactement la même disposition que celui que j'utilise. J'ai bien la même dénomination des plages et tableau. Par contre j'ai une ligne au dessus de mes colonnes d'entêtes date avec des 1 ou 0 (en fonction du jours ouvré ou non), est ce que ca peut faire varier la sélection de départ?

OUI

8dimlus70-v4.xlsm (116.92 Ko)

Pour la suite, envoie ton vrai fichier et si la taille est supérieure à 1Mo, utilise ce lien pour le transférer :

https://www.cjoint.com/?0BlrIa9VELd

Cdlt.

merci Jean-Eric, j'ai pu faire toutes les modifs et ca semble être opérationnel maintenant

Merci pour tous

Bonjour Jean-Eric

J'ai encore une question, est ce qu'il est possible dans mon tableau de rajouter une colonne champs pour récupérer la couverture de mon stock, qui est également variable à la journée?

dans mon exemple c'est sur la ligne 27 colonne R

Mon code actuel de macro est le suivant:

Option Explicit
'Option Private Module

Public Sub Calcul_charge()
ActiveSheet.Unprotect "lot"
'Déclaration des variables niveau procédure
Dim wsData As Worksheet, wsPT As Worksheet
Dim tbl As Variant, Arr() As Variant
Dim rCell As Range
Dim lCol As Long
Dim I As Long, J As Long, k As Long

    'Initialisation des variables
    Set wsData = Worksheets("PDP")
    Set wsPT = Worksheets("TCD")

    'Transfert plage variable (dans l'exemple $A$10:$AS$182) dans un tableau (Array)
    tbl = wsData.Cells(Range("Ligne_reference"), 1).CurrentRegion
    '1ère. colonne Date (pour boucle)
    lCol = 25

    'Tableau1 - voir gestionnaire de noms dans la feuille de calcul
    'RAZ en conservant formats et formules
    'Initialisation cellule de restitution (1ère cellule vide du tableau)
    With wsPT.ListObjects(1)
        If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
        Set rCell = .InsertRowRange.Cells(1)
    End With

    'Création Array (Arr) 6 lignes x k colonnes (variable)
    For I = 2 To UBound(tbl)
        For J = lCol To UBound(tbl, 2)
        'filtre sur FLOCKPACK, MAL, TABLE, Table d'appoint
        If UCase(Left(tbl(I, 23), 1)) = "*" And UCase(tbl(I, 8) <> "0") Then
                'Array 5 lignes x k colonnes
                ReDim Preserve Arr(6, k + 1)
                'Cadence lot
                Arr(0, k) = tbl(I, 5)
                'Gamme lot
                Arr(1, k) = tbl(I, 7)
                'Cadence lot
                Arr(2, k) = tbl(I, 8)
                'CHAMPS
                Arr(3, k) = tbl(I, 23)
                'Date (entier long)
                Arr(4, k) = CLng(tbl(1, J))
                'Valeur
                Arr(5, k) = tbl(I, J)
                k = k + 1
            End If
        Next J
    Next I

    'Restitution des données de Arr()
    'Transfert Array k lignes x 6 colonnes dans une plage de cellules
    rCell.Resize(UBound(Arr, 2), 6).Value = Application.Transpose(Arr)

    'Actualisation du TCD
    With wsPT.PivotTables(1).PivotCache
        .MissingItemsLimit = xlMissingItemsNone
        .Refresh
    End With
    ActiveSheet.Protect "lot"
End Sub

Merci

Bonjour,

Essaie ceci :

'Création Array (Arr) 6 lignes x k colonnes (variable)
    For I = 2 To UBound(tbl)
        For J = lCol To UBound(tbl, 2)
            If UCase(Left(tbl(I, 18), 7)) = "ATELIER" Then
                'If tbl(I, J) <> "" Then
                    'Array 5 lignes x k colonnes
                    ReDim Preserve Arr(6, k + 1)
                    'Gamme lot
                    Arr(0, k) = tbl(I, 7)
                    'Cadence lot
                    Arr(1, k) = tbl(I, 8)
                    'CHAMPS
                    Arr(2, k) = tbl(I, 18)
                    'Date (entier long)
                    Arr(3, k) = CLng(tbl(1, J))
                    'Valeur
                    Arr(4, k) = tbl(I, J)
                    x = Split(tbl(I, 18))(1)
                    x = Choose(x, 5, 4, 3, 2)
                    Arr(5, k) = IIf(tbl(I, J) <> "", tbl(I + x, J), "")
                    k = k + 1
                'End If
            End If
        Next J
    Next I

    'Restitution des données de Arr()
    'Transfert Array k lignes x 6 colonnes dans une plage de cellules
    rCell.Resize(UBound(Arr, 2), 6).Value = Application.Transpose(Arr)

Merci Jean Eric

oops j'avais pas mis le bon code VBA (rectifié maintenant dans le précédent message) mais a priori ca ne change pas grand chose.

J'ai un problème avec le X, j'ai une fenetre qui me dit que les variables ne sont pas définies.

'

Création Array (Arr) 6 lignes x k colonnes (variable)
    For I = 2 To UBound(tbl)
        For J = lCol To UBound(tbl, 2)
        'filtre sur FLOCKPACK, MAL, TABLE, Table d'appoint
        If UCase(Left(tbl(I, 23), 7)) = "*" Then
                'Array 5 lignes x k colonnes
                ReDim Preserve Arr(6, k + 1)
                'Cadence lot
                Arr(0, k) = tbl(I, 5)
                'Gamme lot
                Arr(1, k) = tbl(I, 7)
                'Cadence lot
                Arr(2, k) = tbl(I, 8)
                'CHAMPS
                Arr(3, k) = tbl(I, 23)
                'Date (entier long)
                Arr(4, k) = CLng(tbl(1, J))
                'Valeur
                Arr(5, k) = tbl(I, J)
                x = Split(tbl(I, 23))(1)
                x = Choose(x, 5, 4, 3, 2)
                Arr(6, k) = IIf(tbl(I, J) <> "", tbl(I + x, J), "")
                k = k + 1
            End If
        Next J
    Next I

Re,

Il faut déclarer la variable.

Dim x as long

Merci Jean-Eric,

j'ai encore un soucis, la macro bug à ce niveau:

Erreur d'éxcution 13 => Incompatibilité de type

'

Date (entier long)
                Arr(4, k) = CLng(tbl(1, J))
    'Création Array (Arr) 6 lignes x k colonnes (variable)
    For I = 2 To UBound(tbl)
        For J = lCol To UBound(tbl, 2)
        'filtre sur FLOCKPACK, MAL, TABLE, Table d'appoint
        If UCase(Left(tbl(I, 23), 1)) = "*" Then
                'Array 5 lignes x k colonnes
                ReDim Preserve Arr(6, k + 1)
                'Cadence lot
                Arr(0, k) = tbl(I, 5)
                'Gamme lot
                Arr(1, k) = tbl(I, 7)
                'Cadence lot
                Arr(2, k) = tbl(I, 8)
                'CHAMPS
                Arr(3, k) = tbl(I, 23)
                'Date (entier long)
                Arr(4, k) = CLng(tbl(1, J))
                'Valeur
                Arr(5, k) = tbl(I, J)
                x = Split(tbl(I, 23))(1)
                x = Choose(x, 5, 4, 3, 2)
                Arr(6, k) = IIf(tbl(I, J) <> "", tbl(I + x, J), "")
                k = k + 1
            End If
        Next J
    Next I

Re,

Quelle est la valeur de lCol lors de l'erreur?

Et quelle est la valeur de tbl(1,J)?

Cdlt.

Je ne sais pas

Comment je peux trouver l'info?

Voici mon fichier excel

4exemple5.xlsm (284.14 Ko)

avec la macro modifiée

Re,

Envoie ton fichier.

Cdlt.

Nos messages se sont chevauchés, je l'ai mis en copie de mon dernier message.

Merci Jean-Eric

Re,

Peux tu préciser ce que tu veux faire?

Sinon, une proposition à étudier sans grande conviction.

Cdlt.

strX = Left(tbl(I, 23), 4)
                Select Case strX
                    Case "*LID": x = 0  'à définir
                    Case "*FLO": x = 0  'à définir
                    Case "*MAL": x = 0  'à définir
                    Case "*Man": x = 4
                    Case "*TAB": x = 3
                End Select
                Arr(6, k) = IIf(tbl(I, J) <> "", tbl(I + x, J), "")
7exemple5.xlsm (190.56 Ko)

C'est bien ca merci Jean-Eric!

LE seul hic c'est que mes lignes "Lidl", "Flow."...... ne sont pas figées et du coup le fait de décaler la case de 2,3 ou 4 fait que parfois je ne tombe pas sur la bonne ligne couverture.

Par contre est ce qu'on pourrait par exemple rajouter la ligne prévisions (ligne 26) et définir le décalage pour obtenir la couverture à partir de cette ligne ou autres????

Re,

Je ne pense pas mais tu peux essayer !?

Quels sont les cas de figure que l'on peut trouver dans ton tableau?

Cdlt.

Ah c’est dommage

Dans un soucis d’optimisitation de ligne, en faite *Lidl, *Flow... peuvent varier en fonction ou non de la possibilité d’avoir des quantités, ils peuvent apparaitre ou pas et donc se retrouver en 1ere position comme en deuxieme, troisième ou quatrième.

Si j’ai compris, pour recopier la ligne couverture tu fais un décalage par rapport a *lidl, *flow...est ce que cela recopie egalement les quantités pour ces lignes? Est ce suon ne peut pas simplement rajouter aux filtres de selection le fait de transposer egalement la ligne couverture? Comme on le fait egalement pour les *flow,*lidl...???

'filtre sur FLOCKPACK, MAL, TABLE, Table d'appoint
        If UCase(Left(tbl(I, 23), 1)) = "*" Then

Bonjour Jean Eric,

j'ai encore le même style de tableau à faire mais pas moyen d'arriver à adapter la macro pour le copier coller transposé...

Est ce que vous pouvez m'aider??

Mille fois merci

10test-1.xlsx (926.10 Ko)

Bonjour,

Je répare un oubli.

Cdlt.

14dimlus70.xlsm (890.29 Ko)
Rechercher des sujets similaires à "dates entete colonne tcd"