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.
Personne ne peut m'aider?
Est ce que je n'ai pas été assez clair, ou n'est ce pas possible?
Merci
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
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 WithSi 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 7On 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).RowOn 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 <> "" ThenEt 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" ThenOK ?
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 4A 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 4A 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 = xlnoneMerci encore, bonne journée.