ListBox - Copier des lignes à plusieurs colonnes vers des cellules

Waouh ! à ne pas s'y retrouver dans votre code.

Là si je clique sur Création colisage puis sur Non --> la Sub N032_Modification_NON() bugue

Ahah oui je reconnais que mon codes n'est pas des plus clair avec les variables dans tout les sens et j'en passe.
En fait vous rencontrer ce problème car dans l'USF Panneaux par colis il n'y a pas de valeurs rentrer.

Suivez ces étapes (pour notre cas présent la 1 et 2 suffisent) :

1- Feuille("Données_d'entrée") : On clique sur le bouton Nb de panneaux par colis, on renseigne le nombre de ligne (ici 3) et on fait plusieurs fois OK pour valider le nombre de panneuax par colis.

2- Feuille ("Colisage") : On clique sur la macro Actualiser (Il y a une forme caché donc cliquer sur le texte en haut à gauche) et on clique sur NON. Cela nous donne tout les colis qui sont créer.

3- Feuille ("Colisage") : Décaler vous dans la feuille et cliquer sur le bouton "Créer tableau". Cela regroupe les colis en double

4- Feuille ("Colisage") : copier/coller le tableau obtenu dans la case W6 et cliquer sur le bouton au dessus. Cette macro rassemble tout les colis identique. et incrémente une case pour spécifier leur nombre.

5- Feuille ("Plan_de_chargement") : J'aimerais dans cette feuille qu'une macro me mette automatiquement les colis dans un camion. Il y a bien évidement des contraintes de taille pour le colis en le camion (feuille Données). Idéalement on aurais le choix si on veut un ordre particulier ou non.

2- Feuille ("Colisage") : On clique sur la macro Actualiser (Il y a une forme caché donc cliquer sur le texte en haut à gauche) et on clique sur NON. Cela nous donne tout les colis qui sont créer.

Je n'ai pas de macro actualiser

Mince une erreur de ma part...

Actualiser est une case dans colisage qui est marquée Actualiser avec une forme transparente dessus donc ça active la macro. Mais le macro s'appelle NbDePanneauxParColis et NbDePanneauxParColis2 (elles marchent ensemble).

Bon c'est vraiment compliqué votre fichier.

Il faut en premier déplacer tous vos codes de Thisworkbook dans un module
Une fois fait vous me dites quelle est la première ligne de code dans le module

Oui c'est sur que mon fichier est très compliquer même pour moi.

Je ne suis qu'un débutant donc beaucoup d'erreur se font, j'apprend sur le tard.

Mon fichier est aussi très peu ordonner et optimiser je le reconnais. Mais je ne connais pas tout les raccourcis de formule ni toute les fonctions VBA.

Qu'elle est l'intérêt de mettre mes macros dans les modules ? Je ne vois pas la différence avec ThisWorkbook.

Bien cordialement.

Bonjour

Je ne suis qu'un débutant donc beaucoup d'erreur se font, j'apprend sur le tard. Mon fichier est aussi très peu ordonner et optimiser je le reconnais. Mais je ne connais pas tout les raccourcis de formule ni toute les fonctions VBA

Vous n'êtes pas le seul ici. De mon coté j'ai aussi appris de cette manière mais j'ai eu la chance aussi de rencontrer des personnes qui avaient de grande connaissance dans le VBA. Après il y a toujours le travail personnel...

Qu'elle est l'intérêt de mettre mes macros dans les modules ? Je ne vois pas la différence avec ThisWorkbook.

Pour vous donner une explication plus globale :

Dans l'éditeur VBA vous pouvez trouver plusieurs modules :

1. Le module ThisWorkbook est le seul endroit où vous pouvez avoir des gestionnaires d'événements qui s'exécutent lorsque l'utilisateur effectue des actions dans/sur le classeur.
(exemple ouverture du fichier, la fermeture du fichier, la sauvegarde, l'impression, modifications applicables dans chacune des feuilles... )

2. les Modules de feuille (Sheet) - Chaque feuille du classeur a un objet de feuille dans le dossier Objets Microsoft Excel.
Un double-clic sur l'objet de la feuille ouvre son module de code où nous pouvons ajouter des procédures événementielles (macros).
Ces macros s'exécutent lorsque l'utilisateur effectue par exemple une action spécifique dans la feuille.

3. Modules de code – Les modules de code sont l'endroit le plus courant où peuvent stockés les macros. Les modules se trouvent dans un dossier Module du classeur et sont exécutés via une commande genre bouton, raccourci clavier ou via les menus excel.

4. Modules de classe - Ils permettent d'écrire des macros pour créer des objets, des propriétés et des méthodes.
Les classes peuvent être utilisées lorsque nous voulons créer des objets personnalisés ou des collections qui n'existent pas dans la bibliothèque d'objets.

5. Modules Userform - Les formulaires utilisateur qui sont des formulaires interactifs ou des fenêtres où sont ajoutés des contrôles (menus déroulants, des zones de liste, des cases à cocher, des boutons, etc. Les codes seront exécutés lorsque le formulaire est ouvert et lorsque l'utilisateur interagit avec ces contrôles.

Retenez que les objets Sheet (point 2) et ThisWorkbook (point 1) permettent de stocker des procédures événementielles (macros) qui s'exécuteront lorsqu'un utilisateur effectuera une action dans le classeur.

On peut toujours tout faire mais question de s'y retrouver et de compréhension il est plus facile de partir sur cette organisation

Dites moi quand vous aurez effectué les modifications.

Oui c'est sur et je fais des efforts mon code a bien progresser depuis mon dernier projet. Il reste très simple car je ne découvre pas d'autres fonction (par manque de temps surtout et ne pas savoir ou chercher) mais je le fais bien plus rapidement qu'avant.

D'accord je vois. Il s'agit juste d'une façon de ranger les macros qui est utilisé par un grand nombre. Cela permet de communiquer les fichiers simplement.

voici le fichier rangé en essayant de suivre ce que vous avez marqué. En espérant que cela vous aille...

Ok je vais regarder votre dernier fichier mais essayez de ne pas poster chaque fois un fichier sans quoi je dois chaque fois tout refaire dans le fichier de travail que j'ai ici.
Si vous devez tout de même poster un fichier ajoutez un indice c'est plus simple de s'y retrouver.

1. Ok pour les codes. Ils sont placés au bon endroit

2. Dans votre feuille Colisage, pourquoi ajoutez-vous des tableaux à droite ?. Vu qu'il y a la case à cocher en colonne A cela ne sert plus je pense.

3. Pour votre question ici --> https://forum.excel-pratique.com/s/goto/1022556 faites ceci :

--- Dans le module 1, juste avant la ligne Sub N01_NbDePanneauxParColis(), ajoutez ceci :

Public stpevt As Boolean

--- Dans le code qui se trouve dans la feuille Colisage, juste avant la ligne "dlg = Range("B" & Rows.Count).End(xlUp).Row", ajoutez cette ligne

If stpevt = True Then Exit Sub

--- Dans le code N032_Modification_NON juste en dessous de For a = Z To X

        With Sh.Cells(a, 1) 'ajout des cases a cocher vide en colonne A
            stpevt = True
            .FormulaR1C1 = "£"
            .Font.Name = "Wingdings 2"
            .Font.Size = 12
            stpevt = False
        End With

je pense qu'il faudra peut être l'ajouter ailleurs mais je n'ai pas encore tout compris ce que vous faites dans ce code

rem : on pourrait déjà revérifier cette macro pour la rendre plus lisible

Ok c'est parfait ca marche comme je le souhaitais. Je vais noter ces formules dans un fichier car elles sont vraiment intéressantes !

J'ai du le rajouter à chauque For a = ... to ... .

Voulez-vous que je vous renvoie le fichier complêter ?

Voulez-vous que je vous renvoie le fichier complêter ?

Non pas besoin pour le moment je le fais de mon coté

Par contre vous ne me dites rien au sujet des tableaux de droite. Point 2 de mon post précédent

concernant les tableaux situés à droite dans la feuille Colisage. J'en aurais malgré tout besoin car il me permettent de créer les camions par la suite donc je ne pense pas les supprimer tout de suite.

Ce qu'on est entrain de faire va me donner un ordre de colis et modifier l'ordre de colisage des colis.

Par exemple : le colis 4 est sélectionné donc il sera le premier dans la liste donc le premier à être fait et finalement le premier à être mis dans un camion.

Ce qu'on est entrain de faire va me donner un ordre de colis et modifier l'ordre de colisage des colis.

Par exemple : le colis 4 est sélectionné donc il sera le premier dans la liste donc le premier à être fait et finalement le premier à être mis dans un camion.

Oui je comprends mais dans un post précédent vous m'aviez demandé si l'on pouvait trier pour mettre les palettes présentant une case cocher en colonne A en haut du tableau. Je ne vous ai pas encore donné cette partie. raison pour laquelle je vous disais que les tableaux de droite ne serviront pas.

Dites moi

En effet, nous n'avons pas encore aborder cette partie qui consiste à ordonner les colis en fonction des cases cocher.

Je ne comprend cependant pas pourquoi les tableaux de droite seront inutiles après ca car ils servent pour la création des camions et non à autre chose. le fait est que aujourd'hui j'en ai besoin pour créer mes camions.

A quoi aviez-vous pensez par rapport à ma demande ? et en quoi cette solution est contraignante pour mes tableaux ? Eclairez moi svp

Je ne comprend cependant pas pourquoi les tableaux de droite seront inutiles après ca car ils servent pour la création des camions et non à autre chose.

Parce que j'ai compris que le fait de cocher les palettes en colonne A permet d'avoir en haut de votre tableau les palettes qui sont concernées. Donc il me semble que tout au moins le tableau entre les colonnes Q et V ne devrait plus servir.

Juste ou pas ?

Je pense qu'il servira toujours car :

Le tableau entre les lignes Q et V permet de rassembler les colis qui sont composer de deux panneaux différents (donc présent deux fois dans le premier tableau)

Le tableau entre les lignes X et AD permet de rassembler les mêmes types de panneaux qui se suivent pour en noter la quantité.

Il me semble donc important de garder les deux pour l'instant mais bien sur l'idéal serait de ne pas avoir ces tableau du tout. Mais ca me parait vraiment très compliquer pour moi. Les masquer permet aussi de faire le boulot pou rendre l'expérience utilisateur simplifier.

Concernant le fait que les colis sélectionner remonte en haut j''ai réussi à faire ce code la (a rajouter dans la feuille colisage après le dernier End If de Private Sub Worksheet_SelectionChange(ByVal Target As Range) ):

If Range("A" & Rows.Count).End(xlUp).FormulaR1C1 = "£" Then
      Range("B" & Rows.Count, "N" & Rows.Count).End(xlUp).Cut
      Range("B6:N6").Insert Shift:=xlDown
End If

J'ai déjà remarquer quelques erreurs et choses qui ne se passent pas bien :

- le code ne copie que la colonne B, je n'ai pas réussi à faire toute les colonnes.

- les numéros ne se remettent pas dans l'ordre quand on enlève la cases cocher

- le reste des infos et la case cocher ne suivent pas

- le numéros ne se remettent pas dans l'ordre même si on clique sur Réinitialiser Feuille puis sur Création colis pour créer de nouveau un colisage.

En espérant vous avoir un peu éclairer.

Concernant le fait que les colis sélectionner remonte en haut j''ai réussi à faire ce code la....

Oulàlà non du tout.
N'allez pas trop vite avant d'aller rajouter des lignes dans le code que je vous ai donné pour les cases à cocher

Donc faites ceci :

1. Dans la macro Private Sub Worksheet_SelectionChange(ByVal Target As Range)
-->
Supprimez les lignes dont vous me parlez. Vous ne devez avoir que le code que je vous ai proposé avant.
--> Enlevez l'apostrophe qui est placée devant l'instruction CALL TRIER

2. Allez dans un module ou mieux créez un nouveau module et mettez le code ci-dessous

Sub Trier()
Dim dlg As Integer

dlg = Worksheets("Colisage").Range("B" & Rows.Count).End(xlUp).Row
With Worksheets("Colisage").Sort
    With .SortFields
        .Clear
        .Add Key:=Range("A6:A" & dlg), SortOn:=xlSortOnValues, Order:=xlDescending ', DataOption:=xlSortNormal
        .Add Key:=Range("B6:B" & dlg), SortOn:=xlSortOnValues, Order:=xlAscending ', DataOption:=xlSortNormal
    End With
    .SetRange Range("A5:N" & dlg)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub

Après faites un test en cochant et décochant en colonne A

3. Ensuite vous pouvez supprimer l'userform 1 qui contient la listbox. Elle ne servira plus.

Aïe... :/ mon égo en prend un coup ahah

J'ai fait tout ce que vous avez mis et le code marche bien à un détail près que les lignes sélectionné se copie un rang trop bas (ligne 7 et non 6)

UPDATE : c'est bon en changeant la valeur de 5 à 4, le problème se résout tout seul.

image

Je pense que ce sujet est clos à partir de maintenant.

Je tenais à vous remercier pour m'avoir aider et pris de votre temps pour m'expliquer des choses simple pour vous mais plus compliquer pour moi.

Merci beaucoup pour tout.

Arthur

Rechercher des sujets similaires à "listbox copier lignes colonnes"