Création tableau fictif issu d'un autre tableau
Bonjour,
Je suis en train de créer une petite gestion de stock.
J'ai un tableau avec toutes mes données lié a mes outils. Une ligne = un outils avec 3 pièces ( cavités, fonds, et poinçons)
Je voudrais dans l'onglet "commande" créer un tableau qui me sors la liste des pièces a commander en fonction du stock sécu. Je veux que sur 1 ligne de mon tableau commande il y ai les caractéristique et 1 pièces puis aller a la ligne pour la pièce suivantes.
J'ai réussi pour les 1ere pièce, maintenant il faut que ma macro analyse la 2eme partie du tableau. J'avais pensé définir un tableau fictif mais avec "union" ça me mets en erreur
Je vous mets le fichier simplifier.
Comprenez vous mon problème ?
Bonjour Fanny, bonjour le forum,
Tu y étais presque, joli code !... Essaie comme ça :
Sub Commande()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV() As Variant 'déclare la variable TV (Tableau des Valeurs Outillages)
Dim I As Long 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Long 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim TLF() As Variant 'déclare la variable TL (Tableau des Lignes Fond)
Dim TLP() As Variant 'déclare la variable TL (Tableau des Lignes Poinçon)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Set OS = Worksheets("Basedonnées") 'définit l'onglet source OS
Set OD = Worksheets("Commande_stock") 'définit l'onglet destination OD
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV - Tableau Outillages
' POUR LES CAVITES
For I = 2 To UBound(TV, 1) 'boucles 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 6) < TV(I, 7) Then 'condition : si la donnée en ligne I colonne 6 de TV < la donnée en ligne I colonne 7 de TV, soit stock < stock secu
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
ReDim Preserve TL(1 To 7, 1 To K) 'redimensionne le tableau des lignes TV (7 lignes, K colonnes)
For J = 1 To 7 'boucle 2 : sur les 7 premières colonnes du tableau des valeurs TV (colonnes A à G)
TL(J, K) = TV(I, J) 'récupère dans la ligne J de TL la donnée en colonne J de TV (= Transposition)
Next J 'prochaine colonne de la boucle 2
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
If K > 1 Then 'condition : si K est supérieure à 1
'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onglet OD)
Set DEST = IIf(OD.Range("A1") = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0))
'renvoie dans DEST redimensionnée le tableau TL transposé
DEST.Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
End If 'fin de la condition
'POUR LES FONDS
K = 0
For I = 2 To UBound(TV, 1) 'boucles 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 10) < TV(I, 11) Then 'condition : si la donnée en ligne I colonne 6 de TV < la donnée en ligne I colonne 7 de TV, soit stock < stock secu
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
ReDim Preserve TLF(1 To 7, 1 To K) 'redimensionne le tableau des lignes TV (7 lignes, K colonnes)
For J = 1 To 7 'boucle 2 : sur 7 colonnes du tableau des valeurs TV (colonnes A à G)
Select Case J
Case 1 To 3
TLF(J, K) = TV(I, J) 'récupère dans la ligne J de TL la donnée en colonne J de TV (= Transposition)
Case 4 To 7
TLF(J, K) = TV(I, J + 4) 'récupère dans la ligne J de TL la donnée en colonne J de TV (= Transposition)
End Select
Next J 'prochaine colonne de la boucle 2
End If
Next I
If K > 1 Then 'condition : si K est supérieure à 1
'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onglet OD)
Set DEST = IIf(OD.Range("A1") = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0))
'renvoie dans DEST redimensionnée le tableau TL transposé
DEST.Resize(UBound(TLF, 2), UBound(TLF, 1)).Value = Application.Transpose(TLF)
End If 'fin de la condition
'POUR LES POINÇONS
K = 0
For I = 2 To UBound(TV, 1) 'boucles 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 14) < TV(I, 15) Then 'condition : si la donnée en ligne I colonne 6 de TV < la donnée en ligne I colonne 7 de TV, soit stock < stock secu
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
ReDim Preserve TLP(1 To 7, 1 To K) 'redimensionne le tableau des lignes TV (7 lignes, K colonnes)
For J = 1 To 7 'boucle 2 : sur les 7 premières colonnes du tableau des valeurs TV (colonnes A à G)
Select Case J
Case 1 To 3
TLP(J, K) = TV(I, J) 'récupère dans la ligne J de TL la donnée en colonne J de TV (= Transposition)
Case 4 To 7
TLP(J, K) = TV(I, J + 8) 'récupère dans la ligne J de TL la donnée en colonne J de TV (= Transposition)
End Select
Next J 'prochaine colonne de la boucle 2
End If
Next I
If K > 1 Then 'condition : si K est supérieure à 1
'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onglet OD)
Set DEST = IIf(OD.Range("A1") = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0))
'renvoie dans DEST redimensionnée le tableau TL transposé
DEST.Resize(UBound(TLP, 2), UBound(TLP, 1)).Value = Application.Transpose(TLP)
End If 'fin de la condition
End SubC'est génial ! Merci infiniment !! ça fonctionne parfaitement.
J'ai cependant un problème de visibilité. Une fois le tableau créer la feuille se redimensionne en 18 lignes et jusqu'à la colonne L . Je ne peux donc pas voir toutes les lignes créer. Le problème se solve en réduisant puis agrandissant le fichier. Voyez vous quel peut être le problème ?
Bonsoir Fanny, bonsoir le forum,
Désolé mais je ne comprends pas et je ne vois pas le problème...
Je ne comprends pas trop le problème non plus. Mais il est complètement indépendant puisque quand je change d'écran ou que je réduit le zoom, la visualisation du tableau est correct. Etrange ..
Merci de ton aide