Merci pour les posts sur le balisage, c'est très intéressant et on voit bien l'intérêt. Je vais tacher de respecter ces codes pleins de bons sens.
Dans le cadre de mon boulot, j'utilise un tableur calc pour enregistrer tous mes produits. Je souhaite develloper ma première macro, qui me renvoie le premier numéro de référence non utilisé dans mon catalogue pour l'afficher dans une cellule. Le but est de savoir quelle référence donner à un nouveau produit que je rentre dans mon catalogue. Ça me serai utile car les références ne sont pas forcement dans l'ordre et il y a des lignes vides. Plus tard j'ajouterai une détection de doublon.
Bon, en premier lieu je suis content de vous annoncer que mon problème est résolu après pas mal de recherche sur le web. Voilà, merci, au revoir
En vrai, il y a des hics et ma programmation n'est pas "propre" mais ça fonctionne.
Le code en gros c'est une boucle qui parcours une colonne à la recherche de la valeur 1, si elle est trouvée on passe à la valeur 2, etc. Si on trouve pas la valeur 4, alors on affiche 4 dans une case et la boulot est fini.
Code : Tout sélectionner
function refdisp (Cd As integer) as integer
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Dim i As Integer
Dim ref As Integer
Dim test As Integer
ref=1
test=1
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
do while test < ref+1 rem on boucle tant qu'on trouve la reference suivante
For i = 2 To 1000 rem on parcours tout la tableau jusqu'à la ligne 1000 pour chercher une a une la valeur ref suivante
Cell = Sheet.getCellByPosition(0, i)
If Cell.Value = ref rem on a trouve la reference
then ref=ref+1 rem on cherchera la suivante au prochain tour
End If
Next i
test=test+1
loop
rem
refdisp = ref
End function
- Concrètement le calcul est trés long, j'ai lu dans un autre post qu'il fallait garder tout en mémoire pour que ça aille plus vite. Comment mettre ça en œuvre?
- J'ai fait une fonction au lieu d'une "sub" car c'est le moyen le plus simple que j'ai trouver de renvoyer une valeur dans un tableur. J'ai ajouter un argument inutile pour forcer la mise jour de la case en entrant une valeur dans une case. J'imagine qu'il vaut mieux convertir ma fonction en "sub" et utiliser le code qui permet d'écrire dans une cellule, comment faire?
- je voudrais que le calcul se lance tout seul "en permanence"
Je post toutes ces question ensemble car je "pressens" qu'elles sont liés entre elle, mais je serai déjà content d'avoir conseil sur un de ces points.
Merci de votre lecture et de votre aide!