VBA perte de valeur apres retour d'une fonct

Fermé
Zigomato - 25 mai 2012 à 21:22
 Zigomato - 25 mai 2012 à 21:46
Bonjour,

J'ai un petit soucis, sur une macro, je voudrais remplir des cellules d'une feuille de calcul en prenant la première ligne vide. Pour cela, suite clique sur un bouton, j'éxécute une premiere Sub qui permet de déterminer la feuille (là pas de soucis, c'est nécessaire car au final, le classeur possèdera plusieurs feuille sur lesquelles je devrais faire la même manip), j'envoie le nom de feuille sur une sub qui détermine la position de la première cellule vide.
Le soucis intervient maintenant, la valeur de la lig n'est pas renvoyer. et du coup écrit toujours sur la même ligne.

Voici le code du Accueil où je déclare mes variable en publique, je mets juste cette partie pour montrer que j'ai fait :

Option Explicit
Public Lig As Integer

Public Col As Integer

Plusieurs boite de dialogue s'ouvre avec action sur des boutons, le dernier permet d'accéder à ces lignes :

Private Sub Validation_Click()
Set feuille = Worksheets("Techniciens")
Lig = 2
MsgBox ("premier test " & Lig)

Comptage 1, feuille
MsgBox ("Dernier test : " & Lig)
feuille.Cells(Lig, 1) = CreationTech.Grade
feuille.Cells(Lig, 2) = CreationTech.Nom
feuille.Cells(Lig, 3) = CreationTech.Prenom
feuille.Cells(Lig, 4) = DateDuJour

Unload CreationTech

End Sub
les msgBox me permette de voir la valeur dans la variable Lig

Comptage est donc ouvert avec la bonne feuille, voici les code situé sur le premier module dans la sub comptage :

'compte la prochaine ligne vide et renvoi la valeur
Sub Comptage(Lig, feuille)
feuille.Select
Range("A2").Select
' Boucle tant que pas vide
Do While Not (IsEmpty(ActiveCell))
Lig = Lig + 1
Selection.Offset(1, 0).Select
Loop
Lig = Lig + 1
MsgBox ("Deuxième test : " & Lig)
End Sub

Le premier test renvoi bien la bonne valeur ainsi que le second en revanche lorsque je reviens sur le code du bouton, le troisième test me renvoi la valeur 2 qui était initialiser avant la sub comptage alors que celle ci , lors du second test, était correct

Je ne sais pas si j'ai été clair

2 réponses

Bonjour,

Ta variable Lig est publique, donc connue dans tout le programme.
En déclarant ta sub Comptage(Lig, Feuille), tu as créé une nouvelle variable Lig interne à la sub Comptage.

Pour que ça marche déclare ta sub avec seulement le paramètre Feuille

Sub Comptage(Feuille)
.
.
End Sub

et pour appeler la procédure:
Comptage Feuille

;)
0
Merci, cela fonctionne, une erreur bien débile que je ne vois pas depuis le début et dont je ne trouvais pas de solution sur le net, pour que ce soit complet, j'ai supprimer la ligne :
Lig = Lig + 1
qui est située après le loop
car Selection.Offset(1, 0).Select sélectionne la cellule directement endessous, ce qui créer toujours une ligne vide
0