Image ne s'affiche pas lors d'une recherche

Petite et dernière question pour le moemnt car je dois digèrer tout ses codes

Comment laisser les titres a la list box?

Merci

Function show_data_in_listbox()
ListBox1.ColumnCount = 6
ListBox1.ColumnWidths = "60;60;120;120;120;120"
'Sheets("Bdd").Activate
Dim lastrow As Long
lastrow = Cells(Rows.Count, "A").End(xlUp).Row
ListBox1.RowSource = "Bdd!A2:C" & lastrow
ListBox1.RowSource = "Bdd!A2:D" & lastrow
ListBox1.RowSource = "Bdd!A2:E" & lastrow
ListBox1.RowSource = "Bdd!A2:F" & lastrow
ListBox1.ColumnHeads = True
End Function

Bonjour polo67,

C'est super que tu aies trouvé la réponse à ton besoin . Du coup, c'est moi qui te sollicites si tu le veux bien car même si la solution que je t'ai proposée ne répond pas à ton besoin, livrer une solution avec des bugs n'est carrément pas satisfaisant pour moi.

Donc si tu le veux bien, peux-tu me dire si la version en pièce jointe fonctionne correctement ? j'ai corrigé le bug d'affichage inversé mais ce qui me trouble c'est l'erreur de chargement de la photo sauf si elle découle de l'inversion d'affichage.

En te remerciant par avance.

Cdlt,

Bonsoir J'ai testé et apparement tout fonctionne bien

Super travail et la possibilité de voir l'image directement depuis le bdd c'est carément génial

Dans le projet que je suis entrain de faire j'ai reussi quasiment à tou mettre en place

Seul bémol

Lorsque je clique sur la list box enregistrée les images n'apparaissent pas

Excuse je ne pouvais pas passer sur le pc j'ai été opéré lundi de la cataracte

Serais tu d'accord pour que je te donne le projet comme je l'ai mis en place?

Merci

Idem pour toi Stepaustras je ne vois que 'un oeil donc je répondrais une vois que je pourais mieux lire les codes

Pourquoi détailler les colonne et ne pas mettre directement ListBox1.RowSource = "Bdd!A2:F" & lastrow"?

Merci

Ps comment vous joindre si le sujet a été cloturé?

Re, Par mp ou si le sujet est clôturé tu peux toujours mettre à la suite si ça concerne toujours le même sujet. Le sujet est pas fermé, s'il te reste tes petits détails a peaufiner.

Pourquoi détailler les colonne et ne pas mettre directement ListBox1.RowSource = "Bdd!A2:F" & lastrow"?

C'est que j'ai mis ?? sauf le "? a la fin

ok en fonction de l'évaulution je te tiendrais informé

merci

Après si tu parles détaillé par un commentaire ça donne ceci

' Alimentez la ListBox à partir de la plage de données "Bdd" allant de la cellule A2 à la dernière ligne (définie par "lastrow").
ListBox1.RowSource = "Bdd!A2:F" & lastrow

Merci

Dans le code de Cylfo quel est le code qui affiche les image en cliquant sur la ListBox?

Re, C'est ça

' Sélection d'un élément de la listebox
Private Sub lbAnimaux_Click()
Dim vLigID As Variant
   If Me.lbAnimaux.ListIndex = -1 Then Exit Sub

   With gtsAnimaux
      vLigID = Application.Match(Me.lbAnimaux.List(Me.lbAnimaux.ListIndex, 1), .ListColumns("ID").DataBodyRange, 0)
      If IsError(vLigID) = False Then
         AfficheData CLng(vLigID)
      Else
         MsgBox "L'ID [" & Me.tbID.Value & "] n'est pas référencé dans le tableau ...", vbExclamation, "ID inexistant"
         RAZ_Controles
      End If
   End With

End Sub

Bonjour polo67, stepaustras,

Pour la ListBox, je ne reproduis pas l'anomalie, quand je sélectionne une ligne les infos alimentent les "Nom", "ID" et les photos. Par contre si tu as reporté le code dans ton projet, le souci pourrait venir du nom des colonnes qui sont peut-être différents entre ton tableau réel et celui que j'ai fourni ...

Si tu peux envoyer une copie (même vide) de ton fichier, cela nous sera plus aisé pour te répondre.

Pour nous joindre si le sujet est clôturé et que le sujet est différent, il est préférable d'ouvrir un nouveau post et d'y indiquer qu'il y a un lien avec celui-ci.

Bonjour a vous deux, je pense qu'il veut les entêtes de colonnes dans la listebox que tu n'as pas mis.

Bonsoir

Avant de vous envoyer le projet je vais essayer de le modier seul. c'est comme cela que j'apprendrais a comprendre sans jamais pouvoir faire un tel projet.....

je bloque sur la ListBox

Tout fonctioone bien mais je voudrais y ajouter les titres.

Dans un exemple je voudrais savoir comment on sélectionne les colonnes à afficher (cas d'un tableau complexe), ou si on ne dispose les colonnes à afficher que dans la première partie du tableau( ex 12 colonnes et on ne selectionne que les 6 premières.

Mais dans votre code je ne vois ni l'interval entre les colonnes ni le nombre entrant dans la Lisbox

Merci

Ah oui aussi..

Peut'on mettre en première ligne le dernier enregistrement?

Comme gèrer les doublons (éffacement du plus ancien)?

Infiniment Merci

Bonsoir,

tous fonctionne bien mais je voudrais y ajouter les titres.

tu veux dire des entêtes. Une astuce, tu peux aussi faire des Labels et sans entêtes dans ta listbox, voir photo. Dans mon cas j'avais mis 220 textboxs et 11 labels qui servent d'entêtes mais ça marche aussi avec une listbox

sans titre

Pour définir la largeur des colonnes dans ta ListBox., c'est en général comme ça.

Private Sub UserForm_Activate()
    ' Autres codes ici...

    ' Définir la largeur des colonnes dans la ListBox
    ListBox1.ColumnWidths = "60;60;120;120;120;120" ' Par exemple, définissez la largeur pour 6 colonnes

    ' Réinitialiser les contrôles
    RAZ_Controles
End Sub

dans le code de Cylfo, c'est plus complexe, elle s'ajuste automatiquement en fonction de la feuille elle même.

Pour trier du plus ancien au plus récent ou vice versa, en triant directement ta feuille de calcul structurée ça devrais le faire. ou alors faut repasser par une autre macro.

Et pour les doublons aussi une autre macro.

Au pire ceci est une macro du plus récent au plus ancien. Par contre faut des dates ou alors trier par nom ou ID

Private Sub TrierDonnees()
    Dim ws As Worksheet
    Dim lastRow As Long

    ' Spécifiez la feuille de calcul contenant vos données
    Set ws = ThisWorkbook.Sheets("Bdd") ' Remplacez "Bdd" par le nom de votre feuille

    ' Trouvez la dernière ligne dans la colonne où se trouvent vos données
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    ' Trier les données de la plus récente à la plus ancienne
    ' choisir la bonne colonne a trier
    ws.Range("A2:A" & lastRow).Sort Key1:=ws.Range("A2"), Order1:=xlDescending, Header:=xlNo
End Sub

Bonjour,

Dans la version 5 ci-jointe, la ListBox "lbAnimaux" est paramétrée de la manière suivante :

  • Propriété "RowSource" à vide : cette propriété est gérée dans le code dans les procédures :
    • "MiseAJour" : effacement de la propriété "RowSource" avant l'ajout ou la modification d'une ligne dans le TS "T_Animaux" sinon il y a un conflit et plantage d'Excel.
    • "RAZ_Controles" : effacement (au cas où l'appel de la procédure ne se fait pas par la mise à jour"), réinitialisation des autres contrôles et remise à jour de la proproété "RowSource" avec le nom du TS. De ce fait, les mises à jour du TS sont prises en compte dans la ListBox.
  • "ColumnHeads" : valorisé à True => affiche les en-têtes de colonne du TS. Attention : cette propriété ne fonctionne que si elle est combinée à "RowSource".
  • "ColumnCount" : j'ai mis 6 ce qui affiche toutes les colonnes, 3 n'afficherait que les 3 premières.
  • "ColumnWidths" : Permet de fixer les largeurs de colonnes si on le souhaite ET permet, combinée à "ColumnCount" de n'afficher que certaines colonnes. Par exemple pour afficher les colonnes 1, 2 et 5 => ColumnCount = 6 et ColumnWidths = "100;100;0;0;100;0" (100 ou tout autre valeur bien sûr).

Donc au final, je ne suis pas sûr que ce soit plus complexe

Pour les tris, l'ajout d'un bouton de tri (ascendant / descendant) est simple, il faut juste déterminer sur quelles données trier.

Pour les doublons, il faudrait préciser ce qu'est un doublon (par rapport à quelle donnée) et dans ce cas, le plus simple serait de mettre un blocage lors de la mise à jour. Dans le fichier joint (et les précédents) la saisie d'un ID déjà existant provoque la mise à jour des données ET PAS l'ajout d'une nouvelle ligne.

Cdlt,

Cylfo

Merci pour vos commentaire et aide

Je joint ce que j'ai bricolé avec le "cahier des charges" de ce que j'aimerais au final

J'espère que j'ai été le plus précis possible, dans le cas contraire dites le moi

Merci

Bonjour Polo67,

En pièce jointe, ton CDC dans lequel j'ai répondu point par point (commentaire préfixé par Cylfo et surligné en jaune, lorsque j'attend des précisions, les questions sont surlignées en vert). En fonction de tes retours, j'adapterai le code.

Pour les parties que tu ne comprends pas, indiques ce qui te parait obscur et si c'est pour partie lié à l'utilisation des tableaux structurés, je t'invite aussi à consulter sur le forum : https://www.excel-pratique.com/fr/astuces/tableau-structure

Cdlt,

Cylfo

Merci Cylfo

Je réponds déja aux points "Verts"

Date figée = date du premier enregistrement ou dernière modification pour le même annimal pour pouvoir trier les enregistrements....Bien sur à la prochaine modification le précédent cèdera la place au nouveau

Ex "Cheval" enregistré le 29/09, Lapin le 30/09 donc "Lapin" sera en haut de la listbox. le 01/10 modification de "Cheval" donc la listbox contiendra en haut Cheval et en dessous Lapin.

Pour le projet je le regarde maintenant

Merci

Je répondrais ensuite aux points que je ne comprends ou ne déchiffre pas

Concernant la ListBox

Re,

1 - Via la propriété RowSource qui est gérée dans le code VBA (procédures RAZ_Controles et MiseAJour), la ListBox est directement alimentée par le TS "T_ANIMAUX" (lbIndividu.RowSource = "TS_ANIMAUX") donc quand tu modifies le nom d'une colonne dans le TS, tu retrouves le nouveau nom dans la ListBox sans avoir à faire une quelconque modif du code si la colonne est à afficher (voir point 2).

Par contre, quand tu veux écrire ou lire une donnée du TS et que tu as modifié le nom de la colonne, il faut que tu mettes à jour les nouveaux noms dans le code. Par exemple, tu as changé le titre de la colonne "Animal" en "Individu", par conséquent dans le code où il était fait référence à la colonne "Animal" il faut maintenant faire référence à "Individu" :

Exemple dans la procédure "AfficheData", tu avais l'instruction :

   With gtsAnimaux
      Me.tbIndividu.Value = .ListColumns("Animal").DataBodyRange(nLig, 1).Value

qu'il faut modifier en

   With gtsAnimaux
      Me.tbIndividu.Value = .ListColumns("Individu").DataBodyRange(nLig, 1).Value

Bien sûr, il faut faire cette modification dans tout le code.

2 - Pour l'ajout de la colonne "Lien image nourriture en sac", la colonne n'apparait pas dans la ListBox car tu n'as pas modifié la propriété "ColumnCount" de la ListBox (voir copie ci-dessous), elle est restée à 6 donc seules les 6 premières colonnes s'affichent. Relis le paragraphe "Dans la version 5 ci-jointe, la ListBox "lbAnimaux" est paramétrée de la manière suivante :" de ma réponse d'hier 8h48, j'explique comment paramétrer la ListBox.

image

Cdlt

Rechercher des sujets similaires à "image affiche pas lors recherche"