Lire valeur numérique dans listview
Bonsoir Patrick T
Normalement j'ai un code dans le fichier qui active les références vba nécessaires. J'ai office 365. Le listview fonctionne normalement. J'ai pu aussi le tester sur d'autres postes par ailleurs sans difficulté. Le seul problème que je rencontre est la récupération de la valeur de la listview si le montant est supérieur ou = à 1000.
Merci à toi
re
bonsoir
et bien sur qu'il fonctionne chez toi tu a les deux librairies
perso je n'en ai qu'une
par ce que j'ai fais la bidouille correctement sur 2013 et 2016
Bonjour à tous
@Patrick T : je suis désolé, mais je ne comprends pas le problème des librairies que tu évoques. J'ai installé les librairies qui m'étaient nécessaires et trouvé un code pour les installer sur un poste qui ne les aurait pas. Peux-tu être plus précis?
@ jean-Paul :
A/Sur ce code :
' Todo "Quelles sont ces entrées ?"
'Tbx_EcheancesModification_OrigineDemande.Value = ""
'Tbx_EcheancesModification_PorteeModif.Value = ""
'Tbx_EcheancesModification_Virt.Value = ""
Origine demande :
En fait, à défaut d’autre solution, çà me permet d’enregistrer à partir de quel formulaire je fais la demande et donc d’y revenir lorsque la demande est traitée. Exemple :
Je modifie une échéance ou une opération à partir de la liste des opérations ou des échéances d’un tiers. Je passe le code signifiant liste des opérations avec un tiers sur le formulaire de modification et je ferme le premier formulaire. Je fais ma modif et le code me ramène sur le formulaire initial actualisé.
Portée : çà me permet de savoir si seule l’échéance sélectionnée doit être modifiée, ou s’il faut appliquer la modification de façon pérenne.
Virt : supprimé depuis.
Lol, je sais c’est compliqué, mais c’est provisoire. Quand j’aurais fini la modification à partir de listview, j’étendrais la solution à l’ensemble des listview du projet.
B/ j'ai lu le tutoriel sur les classes. Je n'ai pas encore tout compris bien sur, mais j'ai essayé d'en tenir compte et retravaillé aussi le fichier dans le sens que tu proposais. J’ai donc supprimé pas mal de colonnes dans les tableaux, et aussi modifié l’ordre des colonnes pour le code Evaluate(Sort(… pour que la première colonne soit celle du tri.
J'ai mis de côté property get, property let et tab managements pour l'instant, il faut encore que je comprenne bien le principe mais j'y travaille. Ci joint nouveau fichier.
Je rencontre deux problèmes avec les filtres dans le code : Evaluate(Sort(....). (cf formulaire ajout pour compléter la cbx comptes) pour laquelle j'ai besoin de plusieurs conditions (compte non cloturé et contrôle de l'accés au compte (titulaire ou procuration)
1/plusieurs conditions
J’ai d’abord testé en séparant chaque condition par une virgule, puis avec AND entre les deux conditions, rien ne passe. J’ai probablement un problème de syntaxe avec les guillemets ou les parenthéses.
Je pense par ailleurs que j’ai besoin de deux lignes : compte non cloturé+ procuration d’une part et compte non cloturé + titulaire d’autre part.
Le combo doit-il contenir autant de colonnes que de colonnes comprises dans la condition FILTER ?
2/ le signe =
Lorsque je mets dans la condition <> ‘’Picsou ‘’, le code fonctionne. Si je mets = ‘’Picsou’’, je n’ai pas le résultat attendu.
Qu’en penses-tu ?
A noter que j'ai maintenant des pointillés qui apparaissent dans ma listview quand les champs sont vides ?
Salut,
Je ne vais pas avoir beaucoup de temps disponible les prochains jours petit travail en complément.
Je rencontre deux problèmes avec les filtres dans le code : Evaluate(Sort(....). (cf formulaire ajout pour compléter la cbx comptes) pour laquelle j'ai besoin de plusieurs conditions (compte non cloturé et contrôle de l'accés au compte (titulaire ou procuration)
Si j'ai un conseil à te donner, si tu ne maitrise pas les formules, bascule sur une feuille, décortique la formule, exemple d'abord FiLTRE, fais les test dans une cellule cela te permettra d'avoir d'une part l'aide d'Excel sur la formule, et de voir directement si cela fonctionne. Une fois la formule finie, sélectionne la cellule va dans l'environnement VBE et dans la fenêtre exécution tape ? ActiveCell.Formulas et voilà tu as la formule au bon format VBA.
Pour FILTRE la première plage doit comprendre les plages de recherches, si tu fait une recherche sur les colonnes 3 et 5 la première plage doit inclure ces colonnes, ensuite l'opérateur n'est pas AND mais * donc [plage de recherche];(condition 1)*(condition 2). C'est pour cela je pense qu'il ne te prends pas l'égalité.
Le combo doit-il contenir autant de colonnes que de colonnes comprises dans la condition FILTER ?
Oui, d'où l'intérêt de bien agencer les colonnes. Leurs placement ne t'importe peu puisque tu y accède depuis un formulaire donc fait en sorte de mettre un ordre qui ne t'oblige pas à faire des formules tordues. Ou de renvoyer des colonnes inutiles pour toi. Maintenant si tu ne gère pas d'énormes tableaux il peut être intéressant de charger toutes les colonnes. cela t'évite de devoir grace à ton ID de récupérer la ligne pour afficher les informations dans le formulaire; Celles-ci te seront fournis par le Listeview. (N'oubli pas que tu peux cacher des colonnes).
Lorsque je mets dans la condition <> ‘’Picsou ‘’, le code fonctionne. Si je mets = ‘’Picsou’’, je n’ai pas le résultat attendu.
Vu plus haut refait ta formule sur une feuille. et colles le résultat.
A noter que j'ai maintenant des pointillés qui apparaissent dans ma listview quand les champs sont vides ?
Je pense que c'est du au fait que tu as doublé les guillemets dans la formule.
Dés que j'ai une minute je me penche dessus.
Re,
Merci de ton aide. J'ai trouvé la syntaxe. Cà fonctionne dans la feuille Excel mais il doit y avoir un truc supplémentaire au niveau de la cbx. Je te joins un fichier actualisé (et je continue mes recherches..)
Re, çà y est. Je pense que je l'ai. J'ai fini par trouvé dans l'aide Microsoft de la fonction FILTER
https://support.microsoft.com/fr-fr/office/fonction-filtre-f4f7cb66-82eb-4767-8f7c-4877ad80c759
Donc nouveau fichier encore une fois, dsl
L'aide précise également comment renvoyer une chaine vide si besoin. Je vais l'intégrer au cas ou.
Merci à toi. Je vais m'attaquer à property et tabmanagements.
Bonsoir Jean-Paul
Je pense avoir à peu compris le principe de tabsmanagement. Je ne comprends par contre pas la fonction GetListObjectSheet. Peux-tu m'en dire plus?
Merci d'avance
Salut,
Bon me voilà de retour.
Concernant les modules exemple ci-dessous :
- TabsManagement inclus des procédures et fonctions concernant les tableaux structurés.
- AddRow : Ajoute une ligne dans un tableau ex. AddRow Range("vt_Contacts"), VBA.Array("ID", Max(Range("vt_Contacts[ID]") + 1, "Nom", TextBox1, "Prénom", TextBox2)
- getListObject retourne un ListObject dans ThisWorkbook, ou dans un autre classeur si son nom est définit, retourne Nothing si pas trouvé.
- GetListObjectSheet retourne la feuille où se trouve un tableau, Nothing si pas trouvée.
- GetListRow récupère une ListRow par rapport à la valeur d'une colonne ex: Set lstRow = GetListRow(Range("vt_Contacts[ID]").ListObject, "ID", 12)
- Tu peux ensuite l'utiliser. ex: TextBox1 = lstRow.Range(.Parent.ListColumns("Nom").Index).Value
- IsListObjectExists Retourne True si le ListObject existe, utilisé si l'on n'a pas besoin d'affecter le ListObject à une variable. Par exemple à l'ouverture du classeur on teste si toutes les tables sont présentes, si une est manquante on avertit et on prends les mesures nécessaires.
- Factory me permet d'initialiser les tableaux à un seul endroit.
Voilà tu es au courant de tout, tu remarqueras que je regroupe les procédures et fonctions par emploi, ex:
- Callbacks pour la gestion du ruban.
- Colors contient mes énumérations pour la gestion des thèmes.
- Display gère l'affichage des feuilles et noms système.
- Ribbon regroupe les procédures et fonctions des contrôles du ruban.
- Settings regroupe tout pour la gestion des paramètres sur une feuille.
- etc...
Et pour finir si tu t'attardes sur la gestion des tableaux avec une classe voilà ce que cela peut donner, il faut avouer que le code devient plus simple.
Bonjour Jean-Paul
Merci de ces précieux conseils.
J'ai commencé à simplifier mon code dans le sens ou tu l'indiquais et créé une classe échéances. Voila donc ou j'en suis:
Me reste maintenant à décortiquer tabsmanagement et factory et çà devrait le faire. Je reviens vers toi dés que possible.
Encore un grand merci et bon week end
Bonjour à tous
Encore merci à toi Jean-Paul. Je cale un peu sur tabmanagement, mais je vais me débrouiller . J'ai compris le principe, donc avec un peu de temps, je vais y arriver. Je marque le problème en résolu car on s'est un peu éloigné de la question originale.
Il me reste cependant une question. J'ai noté que tu écris directement Max(...),
AddRow Range("vt_Contacts"), VBA.Array("ID", Max(Range("vt_Contacts[ID]") + 1, "Nom", TextBox1, "Prénom", TextBox2)
alors que si je n'écris pas "application.worksheet.function" devant max, çà ne fonctionne pas. Il faut peut-être une bibliothéque particulière?
Merci à toi
dernière version:
Bonjour,
Tu as entièrement raison, je suis allé un vite dans la rédaction de la réponse.
Donc soit :
Application.Max(VBA.Array(1, 2, 3, 4))Soit et c'est là qu'irait ma préférence
Application.WorksheetFunction.Max(VBA.Array(1, 2, 3, 4))Je vais me pencher sur ton fichier dès que possible.
bonjour
merci à toi. j'ai commencé aussi à retravaillé mon fichier en regroupant user et tiers sous la rubrique personne (avec une colonne "estutilisateur") et en supprimant le tableau des id utilisés grace à cette fonction max.
Je te tiens au courant
Bonjour Jean-Paul
Pour info et te remercier à nouveau. J'arrive maintenant à crééer des arrays de paire colonne-valeur pour passer les valeurs dans les feuiiles . J'ai décortiqué ton code et lu les blogs de P Fauconnier.
Dans l'autre sens, récupérer un array de données, c'est plus dur, mais je ne désespère pas. çà va le faire.Donc encore merci à toi
J'ai maintenant des problèmes de format de date, mais j'ouvre un nouveau sujet.
Amicalement
Salut,
Oui, la programmation passe avant tout par beaucoup de lecture.
J'ai de la famille jusqu'à dimanche prochain, je ne peux donc pas être aussi présent que je le voudrais, je n'ai pas trop compris quand tu dis écriture avec un Array tu parle sans doute de la fonction AddRow qui boucle sur le Array de couple de valeur pour écrire dans le tableau. Si c'est le cas tu peux inversé les couples de valeurs pour charger les contrôles du formulaire. Si j'ai une minute je regarde cela.
Bonne Programmation.
