Créer un tableau récap. pour impression

Bonjour,

Je reviens vers vous car j'ai à nouveau un problème que je n'arrive pas à résoudre.

Je m'explique, j'ai une feuille base de données avec beaucoup d'information (environ 25000 lignes). Je voudrais, à partir d'un bouton, extraire certaine colonne de cette base et les coller sur une nouvelle feuille afin de pouvoir imprimer!!

Le gros souci est que dans ma base de données principal, le detail d'un article (symbole) est sur une ligne.

Je voudrais que pour un article, toutes les commandes se trouvent une en dessous de l'autre.

C'est tres compliqué à expliquer, c'est pourquoi, j'ai fait un fichier test pour montrer ce que j'aimerais obtenir. il y à une feuille "base de données" et une feuille "liste chantier" sur laquelle on peut voir le résultat que j'aimerais obtenir.

Est ce possible?

Je vous remercie d'avance pour votre aide.

33test-26-05-14.zip (10.85 Ko)

Personne ne peut m'aider?

Est ce que je n'ai pas été assez clair, ou n'est ce pas possible?

Merci

Bonjour

Un essai. Te convient-il ?

26test-v1.zip (32.26 Ko)

Bonjour Gmb,

Merci beaucoup pour ta réponse, et excuse moi pour le long temps de réponse! Weekend surchargé!

C'est juste super ce que tu me proposes. J'ai juste deux problèmes:

1) Je voudrais placer le bouton sur la feuille "Base de données". comment je peux faire pour créer un bouton qui ne s'applique pas à la feuille ou est placé le bouton, mais à une feuille defini?

2) Dans le resultat obtenu sur la feuille "liste chantier", j'ai en ligne 15, 16, 17, et 18 le méme article "couteau" sur les 4 lignes, j'aurais voulu que pour les 3 lignes suivantes, soient affiché par des ".

Est ce possible.

Merci encore, je commencais a désesperer

Bonjour

Nouvelle version ci-joint

Bye !

30test-v1.zip (29.34 Ko)

Merci encore, c'est tout à fait ça!!

Est ce que je peux abuser de ta patiente en te demandant de m'expliquer un peu plus le code suivant?

With Sheets("Base de données")
        For Col = 10 To 108 Step 7 'colonne 10 à 108 par lot de 7 colonnes
            For Ln = 8 To .Range("B" & Rows.Count).End(xlUp).Row 'ligne 8
                If .Cells(Ln, Col).Value <> "" Then
                    Lgn = Range("B" & Rows.Count).End(xlUp).Row + 1
                    'Range("B" & Lgn ).Value = .Range("B" & Ln).Value
                    .Range("B" & Ln & ":C" & Ln).Copy                       'Symbole et désignation                      '
                    Range("B" & Lgn).PasteSpecial xlPasteAll

                    Cells(Lgn, "K").Value = .Range("I" & Ln).Value          'Prix

                    Range("D" & Lgn).Value = .Cells(Ln, Col).Value          'N° Dm

                    .Range(.Cells(Ln, Col + 2), .Cells(Ln, Col + 4)).Copy   'Date de saisie - quantité cdé - Satatut
                    Range("E" & Lgn).PasteSpecial xlPasteAll

                    Range("H" & Lgn).Value = .Cells(Ln, "DZ").Value         'Besoin

                    .Range(.Cells(Ln, Col + 5), .Cells(Ln, Col + 6)).Copy   'Date de saisie - quantité cdé - Satatut
                    Range("I" & Lgn).PasteSpecial xlPasteAll

                    Range("L" & Lgn).Value = "=RC[-1]*RC[-6]"               'Prix total

                End If
            Next Ln
        Next Col
    End With

Si je voulais, dans ma liste chantier, ne sortir que les lignes du tableau base de données qui comporte "NV" dans la colonne EA, que devrais je rajouter comme ligne de code.

Je suis désolé, j'essaie de comprendre, mais ça ne fais pas très longtemps que je pratique le VBA.

D’ailleurs merci pour le code d'encadrement que je cherchais également, maintenant j'ai compris.

Bonjour

Est ce que je peux abuser de ta patiente en te demandant de m'expliquer un peu plus le code suivant?

J'essaie :

For Col = 10 To 108 Step 7

On fait une boucle qui va permettre de donner à la variable Col les valeur successives de 10 puis 17, puis 24 … jusqu’à 108 et exécuter pour chacune de ces valeurs tout ce qui suit jusqu’à l’instruction ’’Next Col’’

For Ln = 8 To .Range("B" & Rows.Count).End(xlUp).Row

On fait une 2° boucle, imbriquée à la précédente qui va permettre de donner à la variable Ln les valeurs successives de 8, 9, 10 …jusqu’à la valeur de la ligne de la dernière cellule non vide de la colonne B

Ces deux boucles vont permettre de balayer, dans le tableau, toutes les cellules des colonnes J, Q, X, AE, AL, AS; AZ, BG, BN,BU, CB, CI, CP, CW et DD

If .Cells(Ln, Col).Value <> "" Then

Et pour chacune de ces cellules, on regarde si elle elle n’est pas vide, auquel cas on fait la suite, sinon on saute jusqu’après l’instruction ‘’End If’’

Et la suite consiste à copier les données désirées pour les coller dans le tableau de la feuille ’’Liste chantier’’

Si je voulais, dans ma liste chantier, ne sortir que les lignes du tableau base de données qui comporte "NV" dans la colonne EA, que devrais je rajouter comme ligne de code.

Dans ce cas, il faudrait que non seulement la cellule examinée par les boucles ne soit pas vide mais que la cellule de la même ligne en colonne EA contienne la valeur ’’NV’’

Ces conditions s’exprimeraient par :

If .Cells(Ln, Col).Value <> "" And .Cells(Ln, "EA").Value = "NV" Then

OK ?

Merci beaucoup Gmb,

Pour tes explications parfaite, et pour le code pour sortir les lignes "NV", ça marche très bien!!

Je vais maintenant te laisser tranquille et adapter tous ça a mon fichier d'origine qui lui comprends beaucoup plus de ligne!!

Je te remercie infiniment!!

Bonne soirée a toi et bonne continuation.

Bonjour Gmb,

Il me vient encore une question si ca ne te derange pas!

Dans le code qui sert à l'encadrement,

il y à:

For i = 1 To 4

A quoi correspond ce 1 à 4 s'il te plait??

Bonjour

Tu écris :

Dans le code qui sert à l'encadrement,

il y à:

For i = 1 To 4

A quoi correspond ce 1 à 4 s'il te plait??

Cela permet à la fonction Border(i) qui suit de prendre successivement les valeurs 1 à 4 et de mettre à la sélection concernée une bordure verticale gauche, puis une bordure verticale droite, puis une bordure horizontale haute, et enfin une bordure horizontale basse.

Et, d’une manière plus générale, si tu veux des précisions sur une fonction de macro, tu cliques dessus et tu tapes sur la touche F1 …

Bye !

Merci encore une fois pour tes explications!!

Je te demandais ça car j'avais un souci, l'encadrement se faisait bien, mais si j'extrais autre chose plus tard qui a moins de ligne que precedement, les bordures retaient.

Mais c'est bon, c'est reglé, j'ai juste ajouté le code suivant au debut du code:

.borders.Linestyles = xlnone

Merci encore, bonne journée.

Rechercher des sujets similaires à "creer tableau recap impression"