Problème dernière ligne tableau dans formulaire VBA

Bonjour à tous et à toutes,

Débutant en VBA, je rencontre quelques difficultés concernant certains tests que je voudrais faire.

Je m'explique: j'ai un tableau excel ("recettes") contenant un certain nombre de colonnes et quelques lignes d'exemple dont la première ligne est l'intitulé des colonnes.

Le tableau en question est un récapitulatif de recettes (nom de la recette, liste des ingrédients séparés par un ";" etc..)

J'ai donc deux soucis:

1) J'ai créé un formulaire vba qui me permet grâce à un bouton précédent et suivant de naviguer entre les différentes lignes (recettes) de mon fichier excel.

Par contre je n'arrive pas à tester correctement le dernier enregistrement.

En effet, à la première utilisation de mon formulaire, mon test fonctionne car arrivé à la dernière ligne de mon tableau en cliquant sur mon bouton suivant, il affiche le message "dernier enregistrement". Jusque là parfait. Sauf que quand je reclique sur suivant après ce message, il descend à nouveau d'une ligne et m''affiche" donc un enregistrement vide. Il ne teste donc qu'une fois cette condition alors que je voudrais qu'il le fasse tout le temps.

Veuillez trouver ci joint le code que j'ai créé (inspiré de plusieurs forums):

Private Sub Bouton_Suivant_Click()

Dim lastrow As Long

If currentrow = 1 Then

currentrow = currentrow + 1

End If

lastrow = Range("A65536").End(xlUp).Row

TextBox1.Text = Cells(currentrow, 1).Text

TextBox2.Text = Cells(currentrow, 3).Text

TextBox3.Text = Cells(currentrow, 4).Text

TextBox4.Text = Cells(currentrow, 5).Text

TextBox5.Text = Cells(currentrow, 2).Text

currentrow = currentrow + 1

If currentrow = lastrow Then

MsgBox "Dernier enregistrement", vbCritical

currentrow = lastrow

End If

End Sub

2) Comme je l'indiquais tout à l'heure ma deuxième colonne du tableau excel contient une liste d'ingrédients, ingrédients chacun séparé par des ";"

Ce que je voudrais faire mais que je n'arrive pas à trouver en programmation vba, serait de créer dans mon formulaire une combobox avec un item par ligne avec par ex item1 = ingrédient1 item2 ingrédient2 etc.

Merci de votre compréhension. En espérant avoir été assez clair dans mes explications.

Dans l'attente d'une réponse, je vous souhaite une bonne journée.

Bonjour et...

Dans ce forum l'usage est de joindre un fichier anonymisé et éventuellement simplifié (Une base de donnée de 10 000 lignes n'est pas utile. 2 ou 3 suffisent...) afin qu'on ne perde pas de temps à bricoler des trucs qui de toute façon ne correspondront jamais à ton fichier...

A+

Bonjour et merci de la réponse. J'envoie tout de suite mon fichier excel.

Mille excuses

Si vous avez besoin de plus de précisions, n'hésitez pas.

Merci de votre compréhension.

16typerec.xlsm (168.49 Ko)

bonjour

avant continuer votre projet regarder cette presentation :

Merci pour cet exemple très complet (trop pour l'instant) mais mon but était d'y aller petit à petit et de créer quelque chose de "simple".

En effet, je n'ai pas forcément besoin de toutes ces informations telles que la frame où il y a la recette sous forme d'images, etc car mon but est juste de référencer dans quel catalogue/page du catalogue se trouve la recette en question car nous avons une pile de catalogues référençant toutes les recettes en question.

Mon but de poster ma question était donc de comprendre mon "erreur" de programmation concernant surtout les tests de dernière ligne du tableau.

J'espère que je ne vous ai pas vexé en vous répondant comme çà car tel n'est pas mon propos.

Je vous remercie par avance de m'aider à comprendre mon erreur dans mon code.

Par la suite, si je veux améliorer l'application, j'affinerai le formulaire en m'inspirant du fichier que vous m'avez envoyé (et je vous en remercie).

Bonne journée.

Christophe

Bonjour,

Déjà je vais te donner 1 ou 2 conseils "généraux"

- évite d'utiliser des noms de variables en une seule lettre à l'exception de i, j, k que tu peux utiliser en minuscule comme compteur de boucles dans une expression For i= 1 To... Next

(éviter aussi le i majuscule que l'on confond trop facilement avec le chiffre 1)

et le O majuscule trop ressemblant avec le zéro.

- évite d'utiliser des noms trop long pour des variables courantes : iR conviennent très bien pour la ligne en cours et iLR pour LastRow...

ça évitera à ton code d'avoir un aspect peu appétissant qui ne donne pas envie de lire ton code

Dans 90 % des cas ces variables devraient te suffire (avec iC pour les colonnes) Les cas restant sont ceux ou tu compares 2 feuilles dans ce cas tu vas avoir iRA et iRB, iLRA et iLRB, ICA et iCB pour les feuilles A et B...

Il s'ensuit de ce qui précède que tu as déjà une variable de trop (CurrentRow, LastRow et L ...

Nous n'utiliserons que iR et iLR : Dimensionnés au début du module :

Dim iR&, iLR&  ' (& = As Long)

iLR doit être initialisé dans le Userform_Initialize et il n'y a pas à y retoucher ensuite jusqu'à la fermeture du USF :

UserForm_Initialize
iLR = Range("A" & Rows.Count).End(xlUp).Row

Après tu peux positionner iR ou tu veux...et te balader dans ta BD tant que tu veux.

Si l'utilisateur confirme qu'il veut ajouter une ligne alors iR = iLR +1

et la dernière opération est alors ILR = iLR +1 (ce qui évite d'avoir à réinitialiser le Formulaire)

Nota : Il faut éviter les commentaires évidents dans le code, ça nuit à la lisibilité... Il y a quelque chose que tu ne comprends pas dans mon code ?

Ton fichier Modifié en pièce jointe

A+

20christrenb.xlsm (169.97 Ko)

merci beaucoup pour ces réponses précises et tous ces conseils!! J'en prends bonne note. Maintenant que ce problème est réglé je vais pouvoir créer mon formulaire de recherche à mon rythme.

Je n'hésiterai pas à demander des conseils supplémentaires si jamais j'ai besoin.

Tes explications sont très claires. Pour information, tout ce qui est boucle et condition je connais un petit peu car j'ai fait un bts informatique de gestion il y a une vingtaine d'années et j'avoue que je suis un peu rouillé, mais j'ai appris sur deux langages complètement obsolètes à savoir Turbo Pascal 4 et Cobol.. mais jamais de POO c'est pour çà que j'ai un peu de mal avec les syntaxes notamment pour les fonctions de test. J'étais quand même pas loin mais ces astuces m'aident grandement.

Merci beaucoup encore une fois et bonne journée.

Rechercher des sujets similaires à "probleme derniere ligne tableau formulaire vba"