Impression d'une feuille Excel avec des données variables

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

capture2 capture1

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.

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

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

4impression-v3.xlsm (775.24 Ko)

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

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
3impression-maj.xlsm (763.75 Ko)

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

Amicalement.

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

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.

Rechercher des sujets similaires à "impression feuille donnees variables"