Impression d'une feuille excel avec des données variables Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
MPETIT
Membre fidèle
Membre fidèle
Messages : 179
Appréciations reçues : 8
Inscrit le : 20 juin 2019
Version d'Excel : 2019 Fr
Version de Calc : 16.0

Message par MPETIT » 4 novembre 2019, 21:49

Bonjour à tous,

J'ai un problème assez complexe et j'ai besoin de votre aide. Je vais essayer d'être le plus clair possible.

Pour bien comprendre il y a un fichier exemple ci dessous mais je vais vous expliquer le principe par 2 captures.

Mise en situation : Je choisi la librairie "Marchan" ("Impression") et j'aimerais que dans la feuille "Impression", cela affiche que les livres associés à cette librairie. La démarche est la suivante et se situe en "Feuil3" :
- (Regarder Capture1) Je choisi "Marchan" qui correspond à un code librairie qui est égale à "5".
- Or dans le stock de la librairie je retrouve plusieurs fois la librairie "5" pour différents livres.
- (Regarder capture2). Il y a donc à la librairie "5" un livre associé et plus précisément un code_livre de stock.
- Là on fait juste le chemin inverse et on cherche les nombres égaux entre la colonne Code Livre Stock et Code Livre
- Il ne nous reste plus qu'a associé le code livre au titre du livre

Au final qu'est ce que j'obtiens ? La librairie "Marchan" à 4 livres "Allez", "Oscar", "YES CA FONCTIONNE" et "Allez".

J'aimerais que ces infos soit retrouver et ajouter dans la feuille impression automatiquement. Évidemment il faut les lignes se s'additionne (se mettent les unes en-dessous les autres) si il y a plusieurs livres.

Dernière chose, c'est au changement de la combobox de la feuille "Impression" que les livres s'affiche donc cbx_change

Je vous remercie pour votre aide,

Bien cordialement,

AP
Fichier exemple.xlsm
(756.92 Kio) Téléchargé 2 fois
Capture1.PNG
Capture2.PNG
L'entraînement est la réussite :wink:
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'885
Appréciations reçues : 63
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 5 novembre 2019, 08:12

Salut,

Normalement le code ci-dessous devrait faire l'affaire.
Private Sub Bt_impression_Click()
Dim i As Integer, Code_Librairie As Byte, j As Integer

If MsgBox("Êtes-vous certain de vouloir imprimer l'inventaire du stock de livres de cette librairie?", vbYesNo, "Demande de confirmation") = vbYes Then
    With Sheets("Feuil3")
        Range("A22:E" & Rows.Count).ClearContents
        Code_Librairie = Application.WorksheetFunction.VLookup(Range("B11"), .Range("A:B"), 2, False)
        For i = 2 To .Range("F" & Rows.Count).End(xlUp).Row
            If .Range("E" & i) = Code_Librairie Then
                j = Application.WorksheetFunction.Match(.Range("F" & i), .Range("D:D"), 0)
                Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1) = .Range("C" & j)
            End If
        Next i
        PrintOut
    End With ' Sheets("Feuil3")
End If

End Sub
Mais éventuellement qu'il vaudrait mieux actualiser la liste des livres de cette librairie lors du choix de celle-ci en B11 puis décider si tu veux imprimer ou non la liste nouvellement actualisée, non ?

Cordialement.
Fichier exemple_V1.xlsm
(787.99 Kio) Téléchargé 3 fois
Yvouille

Valais de Coeur
Avatar du membre
MPETIT
Membre fidèle
Membre fidèle
Messages : 179
Appréciations reçues : 8
Inscrit le : 20 juin 2019
Version d'Excel : 2019 Fr
Version de Calc : 16.0

Message par MPETIT » 5 novembre 2019, 08:36

Bonjour Yvouille, bonjour le forum,

Oui totalement, en utilisant une Combobox_change cela est plus pratique en effet.

J'adapterai ton code selon cela.

Bien cordialement,

PS: Je ne valide pas le post au cas où j'ai 2 ou 3 petits soucis, je reviendrais ici.

Amitiés
L'entraînement est la réussite :wink:
Avatar du membre
MPETIT
Membre fidèle
Membre fidèle
Messages : 179
Appréciations reçues : 8
Inscrit le : 20 juin 2019
Version d'Excel : 2019 Fr
Version de Calc : 16.0

Message par MPETIT » 5 novembre 2019, 09:23

Re Bonjour,

Voici le fichier finaliser et en fonction d'une Combobox placé sur la cellule B11.

Petite question Yvouille : =RECHERCHEV(Impression!B11;A:B;2;FAUX). À quoi sert cette formule si situant dans la feuille 3 en cellule C20 ?
Je l'ai supprimé car elle je n'en voyait pas la nécessité.

Bien cordialement,

AP
Impression V3.xlsm
(775.24 Kio) Téléchargé 3 fois
L'entraînement est la réussite :wink:
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'885
Appréciations reçues : 63
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 5 novembre 2019, 11:07

MPETIT a écrit :
5 novembre 2019, 09:23
Petite question Yvouille : =RECHERCHEV(Impression!B11;A:B;2;FAUX). À quoi sert cette formule si situant dans la feuille 3 en cellule C20 ?
Je l'ai supprimé car elle je n'en voyait pas la nécessité.
Afin de trouver la traduction de certaines fonctions, il m'arrive d'écrire une formule sans le signe = devant, de démarrer l'enregistrement d'une macro puis de placer le signe = devant ma formule. Excel enregistre alors une base qui me sert à finaliser mon code.

Par exemple RECHERCHEV(Impression!B11;A:B;2;FAUX) donne
    ActiveCell.FormulaR1C1 = "=VLOOKUP(Impression!R[-7]C[-1],C[-2]:C[-1],2,FALSE)"
et ça m'aide à écrire :
Code_Librairie = Application.WorksheetFunction.VLookup(Range("A1"), Sheet("Impression").Range("A:B"), 2, False)
Dans ton cas, j'ai juste oublié d'effacer cette cellule par la suite :)
1 membre du forum aime ce message.
Yvouille

Valais de Coeur
Avatar du membre
MPETIT
Membre fidèle
Membre fidèle
Messages : 179
Appréciations reçues : 8
Inscrit le : 20 juin 2019
Version d'Excel : 2019 Fr
Version de Calc : 16.0

Message par MPETIT » 5 novembre 2019, 21:36

Bonjour Yvouille, le forum,

J'ai besoin de ton/votre aide pour faire évoluer mon fichier. Je n'arrive pas à appliquer ton code sur ce que je vais t'expliquer par la suite.

Je tiens à préciser n'empêche que le reste fonctionne sur la librairie et les livres (ce que tu m'as déjà apporté quoi)!

Mise en situation :
- Dans notre cas nous ne nous occuperons pas de colonne "CODE LIBRAIRIE STOCK" et "CODE LIVRE STOCK".
- Donc je choisit le livre "2001"(non représenté sur la capture) qui est associé au code livre N°=25.
- On continue sur la ligne qui concerne ce livre jus qu’a tomber sur le code éditeur stock qui est de "4".
- On recherche donc à quoi correspond le code "4" qui vaut "Baudelaire". C'est "Baudelaire" que l'on va mettre dans le fiche "Impression".
- Pour l'année on suit juste la ligne correspondante
- Pour les genres, on effectue le même principe que pour les éditeurs.
- Pour le prix HT on suit la ligne ocrrespondante

Il y a le fichier ci dessous déjà prêt.

Merci pour toute aide,

Bien cordialement,

Amitiés
Impression MAJ.xlsm
(763.75 Kio) Téléchargé 1 fois
Impression.PNG
L'entraînement est la réussite :wink:
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'885
Appréciations reçues : 63
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 6 novembre 2019, 22:57

Wow, pas des plus simple ton fichier, ni des plus logique. Je pense cependant avoir pu répondre à ton attente.

Amicalement.
Impression MAJ_V1.xlsm
(765.58 Kio) Téléchargé 4 fois
Yvouille

Valais de Coeur
Avatar du membre
MPETIT
Membre fidèle
Membre fidèle
Messages : 179
Appréciations reçues : 8
Inscrit le : 20 juin 2019
Version d'Excel : 2019 Fr
Version de Calc : 16.0

Message par MPETIT » 7 novembre 2019, 08:38

Bonjour Yvouille, le forum,

En effet mon fichier n'est pas des plus simples. Pour tout te dire, j'effectue du SQL pour relier une base de données de Acess à Excel. Cela concerne une bibliothèque, des livres, des librairies, quantité en stock. Ayant des liaisons entre différentes tables, cela est très compliqué voir quasi impossible de l'écrire en SQL. À l'ouverture d'un Userform, les données se copie automatiquement des tables de Access dans une feuille Excel "Feuil3" pour ensuite les utiliser.

Évidemment ce fichier que je t'ai partagé n'est qu'un exemple.

Un dernier point que j'aimerais aborder : Les "rows" à quoi servent-ils ? Quelles sont leur avantages par rapport à une autre fonction similaire ? Si tu peux me rediriger vers un lien qui m'explique cela serait parfait !

Un grand merci pour ton aide !

Bien cordialement,

Amitiés
L'entraînement est la réussite :wink:
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 8'885
Appréciations reçues : 63
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 7 novembre 2019, 10:09

Salut,

Tu ne le dis pas explicitement, mais je présume que mon travail te convient.
Range("A" & Rows.Count).End(xlUp).Row
Très souvent en voulant comprendre une expression comme celle ci-dessus, je réfléchis à l'envers. Je comprends alors que l'on cherche la ligne [Row] en partant de la fin d'un objet Excel en direction du haut [End(xlup)] cet objet étant dans le cas présent la dernière cellule de la colonne A [Range("A" & Rows.Count)].

Dans un fichier Excel actuel, le nombre de ligne [Rows.Count] étant de 1'048'576, l'instruction ci-dessus cherche donc la première ligne occupée au-dessus de la cellule A1048576 ou - d'une autre manière - la dernière ligne de ton tableau.

Si tu places ton curseur dans la cellule A1048576 et que tu tapes "Ctrl+Flèche vers le haut", tu obtiens le même résultat.

Amicalement.
1 membre du forum aime ce message.
Yvouille

Valais de Coeur
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message