> Tous les forums > Forum Bureautique
 Afficher tableau dans une ListBox sur une autre feuilleSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
malaju
  Posté le 22/10/2017 @ 17:20 
Aller en bas de la page 
Petit astucien

Bonjour à tous,

J'ai réalisé un conjugueur pour les verbes en langue provençale. Le principe est le suivant : on entre le verbe dont on veut connaitre la conjugaison dans la ComboBox1 (1). Le verbe de référence, qui sert de support à la conjugaison du verbe recherché, s'affiche automatiquement dans la TextBox1 en dessous (2). En cliquant sur un des quatre boutons (3) de mode de conjugaison (par exemple "Indicatiéu" [qui veut dire Indicatif]) s'affiche la conjugaison désirée (dans ce cas le mode indicatif du verbe LEGI). Voir image 1 et 2 ci-dessous :

Image 1

Image 2

La conjugaison des verbes de référence (il y en a 116) se trouve chacune dans sa feuille (feuille 'counjuguesoun coumpleto', feuille 'indicatiéu', feuille 'sujounctiéu' et feuille 'counditiounau-imperatiéu'). La liste des plus de 14000 verbes se trouve dans la feuille 'verbe' et le formulaire image 1 dans la feuille 'sesido'.

En cliquant sur une des boutons de conjugaison on lance le module concerné (module 1 pour la conjugaison complète, module3 pour l'indicatif, etc). Sur l'image 3 il y a le code du module3 qui affiche la conjugaison de l'indicatif du verbe de référence :

Tout cela fonctionne parfaitement mais plutôt que d'afficher la feuille de la conjugaison du verbe de référence, j'aimerais que celle-ci s'affiche dans une ListBox placée sous les boutons dans la feuille 'sesido' (faire une sorte de copier-coller de la plage de cellules du tableau de conjugaison dans la ListBox).

Et là j'avoue que mes connaissances très limitées en vba ne me permettent pas de faire cet affichage. J'ai donc besoin de votre aide avec d'avance tous mes remerciements.

Publicité
Debrief
 Posté le 22/10/2017 à 21:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

Pour autant que je sache, une ListBox ne va pas te permettre d'afficher l'équivalent de la feuille "indicatiéu" (Image 2).
La ListBox permet d'afficher une liste de termes et lorsqu'on en choisit un, il s'affiche dans la cellule associée (LinkedCell de propriétés de la ListBox).

Si tu veux afficher les conjugaisons de l'indicatif sous les boutons (je suppose pour éviter de switcher entre les feuilles):
- soit en copiant (en VBA) les cellules de la feuille "indicatiéu" en dessous des boutons sur la feuille "sesido" mais ça risque de tilter à cause des largeurs de colonnes qui ne correspond pas
- soit en jouant (enregistrer macro puis utiliser/adapter le code) sur un split des feuilles "sesido" et "indicatiéu"
- soit en incorporant une image préalablement créée à partir de la feuille
"indicatiéu" (fastone capture 5.3 gratuit ou autre)

Pour un split il faudrait:
- Sélectionner la feuille "indicatiéu"
- AFFICHAGE / Nouvelle fenêtre
- Revenir sur l'ancienne fenêtre
- Sélectionner la feuille "sesido"
- AFFICHAGE / Réorganiser tout / Horizontal
- Étirer la fenêtre de la feuille "sesido" pour masquer le ruban de la fenêtre la feuille "indicatiéu" (impossible de masquer le ruban d'une seule fenêtre en commande Excel)

Et aussi du code pour annuler ce split.

Je ne sais pas si ça répond à ta question...

Cordialement,
D.



Modifié par Debrief le 22/10/2017 22:01
malaju
 Posté le 23/10/2017 à 00:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci Debrief,

D'après ce que tu dis cela n'a pas l'air simple et serait même difficilement réalisable.

En fait l'idée m'est venu en voyant ce tuto :

https://www.youtube.com/watch?v=pUkV5lMFWL8

où le bouton "afficher" permet d'afficher dans une ListBox les résultats d'une recherche et d'un tri dans un tableau (un peu comme dans mon cas). J'ai relevé le code et j'ai essayé de l'adapter à mon fichier mais rien ne fonctionne : ça bogue à presque toutes les lignes du code. D'où la demande d'aide !

Sinon je comprends bien le cheminement du split que tu proposes, mais j'avoue ne pas savoir comment écrire le code pour effectuer cette manipulation.

Je vais essayé en enregistrant la macro avec l'enregistreur de macro.

Merci encore pour ta solution

Debrief
 Posté le 23/10/2017 à 00:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

En effet, tu as raison, dans la video il manipule une ListBox où il insère des celulles.

Donc il y a moyen, mais je ne suis pas assez compétent pour te le donner !

Je suis sûr que quelqu'un va te donner la clé !

Cordialement,
D.

malaju
 Posté le 23/10/2017 à 10:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci Debrief,

Je vais continué à faire mes "expériences" en espérant que ça ne fasse pas péter l'ordi (lol) et attendre une solution de quelqu'un plus compétent en la matière.

Merci en tout cas de t'être penché sur mon problème

Amitiés

Debrief
 Posté le 23/10/2017 à 10:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Il y a ici (paragraphe II.G) des informations intéressantes sur ListBox.

J'ai vu dans la vidéo qu'il utilise la propriété ListBox1.Rowsource (ex ListBox1.RowSource = "Feuil1!A2:A10") pour valoriser le contenu.

Toutefois si dans un Sub() je peux faire:
Feuil1.ListBox1.Clear
Feuil1.ListBox1.AddItem "xxx"

J'ai une erreur 438 (propriété non gérée par cet objet) sur:
Feuil1.ListBox1.RowSource = "Feuil2!A1:B5"

Et je ne sais pas pourquoi. Faut qu'un expert explique la chose ou que je trouve une réponse.

malaju
 Posté le 23/10/2017 à 10:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

OK Debrief !

Bien vu merci pour le lien, je vais me pencher dessus sérieusement

À plus

Debrief
 Posté le 23/10/2017 à 11:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Par contre avec la propriété ListFillRange j'arrive à afficher le contenu. Peut-être que RowSource n'est pas dans mon Excel 2013 ?

Ça marche en VBA avec:
Feuil1.ListBox1.ListFillRange = "Feuil2!A1:B5"

Pour le quadrillage je n'ai pas trouvé de propriété sur la ListBox elle-même. Je vais voir en VBA.

Debrief
 Posté le 23/10/2017 à 11:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Je suppose que les propriétés disponibles en VBA sont celles que l'on trouve sur la ListBox en clic droit.

Sur mon Excel 2013 c'est cette liste... (donc pas de RowSource). Peut-être chez toi, selon la version c'est différent.

A noter que lorsqu'on a exécuté le code, on ne peut plus sélectionner le ListBox dans la feuille (ce qui et normal pour l'utilisation ultérieure) !
Il faut à nouveau aller dans DEVELOPPEUR / Insérer / Zone de liste puis ESC (pour ne pas en insérer une nouvelle) et cela donne la possibilité de sélectionner à nouveau la ListBox existante pour en examiner/modifier les propriétés.

En l'occurrence je n'ai rien trouvé dans Excel 2013 pour quadriller les colonnes de la ListBox.

D'autre part, si on doit afficher en VBA des ranges de nombres de colonnes différents, il faut ajuster la propriété ColumnCount:

Feuil1.ListBox1.ColumnCount = 3
Feuil1.ListBox1.ListFillRange = "Feuil2!C1:E5"

Feuil1.ListBox1.ColumnCount = 2
Feuil1.ListBox1.ListFillRange = "Feuil2!A1:B5"

P.S. Par contre la propriété ColumnHeads valorisée à True permet l'affichage des titres des colonnes en mode quadrillé, ce qui peut éventuellement suffire à la délimitation visuelle

Feuil1.ListBox1.ColumnCount = 3
Feuil1.ListBox1.BorderStyle = 1
Feuil1.ListBox1.ColumnHeads = True
Feuil1.ListBox1.ListFillRange = "Feuil2!C1:E5"



Modifié par Debrief le 23/10/2017 11:47
Publicité
malaju
 Posté le 23/10/2017 à 11:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Je vais voir ça mais j'ai une petite question peut-être aussi sotte que grenue : qu'elle est la différence entre Feuil et Sheets. Pour ma part tous mes codes utilisent Sheets("NomDeLaFeuille") plutôt que Feuil1, Feuil2, etc ?

Debrief
 Posté le 23/10/2017 à 12:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

"Feuil1", "Mafeuille", "ListeClients" sont les noms des feuilles de ton classeur.

En VBA tu utilises les mots clés du langage "Worksheets", "Activesheet" "Sheets" pour désigner un objet feuille en général (sauf "Activesheet" qui précise implicitement la feuille ciblée).
Mais il faut préciser quelle instance d'objet feuille (par le petit nom que tu lui as donné) pour désigner la feuille ciblée.

Pour qualifier un range par exemple, "Feuil1.range()" ou "Worksheets("Feuil1").range()" sont équivalents.

Peut-être fais-référence à l'instruction: Feuil1.ListBox1.ListFillRange = "Feuil2!C1:E5"
ListFillRange exige une chaine de caractères pour désigner le range concerné.Donc il faut écrire:

Feuil1.ListBox1.ListFillRange = "Feuil2!C1:E5"
Feuil1.ListBox1.ListFillRange = Feuil2.Range("C1:E5").Address(external:=True)
Feuil1.ListBox1.ListFillRange = Worksheets("Feuil2").Range("C1:E5").Address(external:=True)



Modifié par Debrief le 23/10/2017 12:15
Debrief
 Posté le 23/10/2017 à 12:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Si tu avais des problèmes à modifier le code tu pourrais envoyer le fichier via cjoint.com à condition qu'il ne comporte pas de données confidentielles.

Si tu ne souhaitais pas le partager avec l'ensemble des lecteurs du forum, tu pourrais me l'envoyer en mail privé (symbole enveloppe sous l'icône du pseudo).

Cordialement,
D.

ferrand
 Posté le 23/10/2017 à 16:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour Debrief !

Pour qualifier un range par exemple, "Feuil1.range()" ou "Worksheets("Feuil1").range()" sont équivalents.

Ne va pas si vite ! Ta première expression utilise le nom de code (CodeName), la seconde le nom de la feuille (Name)...

Cordialement.

NB- Je n'ai pas relu tout ce qui s'est ajouté depuis hier dans le sujet... mais j'avais jeté un oeil sur la vidéo indiquée... C'est de qualité inégale, mais le dispositif utilisé est intéressant, le système de recherche déclenche un filtrage avancé de la base récupéré pour l'afficher dans une ListBox.

Mais je ne suis pas certain que ce soit applicable au fichier de Malaju. Le souvenir que j'en ai (sur un autre Forum) ne m'évoque pas des données organisées en base de données...

Debrief
 Posté le 23/10/2017 à 18:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Hello Ferrand,

En effet, intéressant ! Je ne connaissais pas cette nuance. D'ailleurs j'ai modifié le nom de la feuille Feuil1 en Feuil5 et MsgBox Worksheets(1).CodeName donne toujours Feuil1, comme expliqué ici et comme cela apparaît sur l'éditeur VBA (je n'arrive pas à afficher les propriétés de la feuille).

Pour Malaju, c'est plus simple, car il n s'agit pas de faire des filtres avancés mais juste de récupérer un range de cellules "brut" dans une autre feuille et de l'intégrer dans la ListBox.

C'est ce mécanisme (range de cellules dans une ListBox) que je ne connaissais pas (parmi tant d'autres choses !) qui a fait l'objet de cette discussion.
Il se trouve que dans la vidéo le gars utilise .RowSource pour cette intégration que je n'arrive pas à utiliser (Excel 2013) mais qui peut être fait avec .ListFillRange dans mon environnement.

Cordialement,
D.

ferrand
 Posté le 23/10/2017 à 23:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

ListFillRange, c'est en cas d'utilisation du contrôle dans la feuille, RowSource dans un Userform. Mais la propriété est pratiquement la même.

Mais tu peux aussi passer la plage avec List...

Bonne soirée.

malaju
 Posté le 26/10/2017 à 00:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci à tous mais surtout à Debrief qui a fait un très, très gros travail.

Mon problème est résolu mais sans utiliser une ListBox. Debrief a tout simplement (si j'ose dire car ça n'a pas été si simple que cela) fait un copier-coller de plages de cellules du tableau de conjugaison.

Du très bon boulot. Merci mille fois à lui.

Je marque le sujet comme résolu

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
129,99 €Ecran 24 pouces AOC 24G2U5/BK (IPS, FullHD, 1 ms, 75 Hz, FreeSync) à 129,99 €
Valable jusqu'au 01 Avril

Amazon propose actuellement l'écran incurvé 24 pouces AOC 24G2U5/BK à 129,99 € alors qu'on le trouve ailleurs à partir de 160 €. Cet écran à rétroéclairage LED dispose d'une dalle IPS Full HD (1920x1080), dispose d'entrées VGA, HDMI et DisplayPort. Grâce à son temps de réponse ultra rapide de 1 ms et à sa fréquence de 75 Hz, compatible FreeSync, il se distingue par sa bonne réactivité ! Il possède les technologies anti-scintillement (Flicker Free) et anti lumière bleue (Eye Care).  


> Voir l'offre
93,99 €Carte mémoire microSDXC UHS-I U3 SanDisk Extreme 400 Go (160 Mo/s) à 93,99 €
Valable jusqu'au 31 Mars

Amazon fait une promotion sur la carte mémoire microSDXC UHS-I U3 A2 SanDisk Extreme 400 Go qui passe à 93,99 € livrée gratuitement alors qu'on la trouve ailleurs autour de 120 €. Cette carte mémoire offre des vitesses jusqu'à 160 Mo/s et est idéale pour les téléphones, caméras et appareils photo HD/4K.


> Voir l'offre
12,90 €Windows 10 Pro 32/64 bits OEM à 12,90 €
Valable jusqu'au 03 Avril

Le vendeur sérieux DIGITAL FR propose sur Amazon  la clé d'activation pour Windows 10 professionnel en français 32 bits / 64 bits à 12,90 €. Cette clé livrée par email fonctionne avec l'outil d'installation et de création de support de Microsoft que vous pouvez télécharger ici ou directement avec l'ISO de Windows 10 Pro. De quoi installer légalement Windows 10 Pro sur un PC. Pour en savoir plus sur l'achat et l'installation d'une clé OEM de Windows 10, suivez les indications de notre dossier pratique.


> Voir l'offre

Sujets relatifs
Effectuer une copie dans Excel des données d'une feuille vers une autre
Aller chercher une valeur dans une cellule d'une autre feuille
Excel 2007 Copier/Coller d’une feuille à l’autre Dans un même classeur.
macro afficher masquer lignes tableau dans word 2010
Garder la forme d'un texte répété dans une autre feuille
Coller une image dans une autre feuille en VBA
masquer/afficher des lignes dans tableau word
Déplacer une feuille dans un autre classeur
copier un tableau dans un autre tableau-exel 2007
afficher l'index d'une ligne dans un tableau
Plus de sujets relatifs à Afficher tableau dans une ListBox sur une autre feuille
 > Tous les forums > Forum Bureautique