Ranger des données sur plusieurs lignes a la suite

treizia Messages postés 24 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 10 décembre 2006 - 11 nov. 2006 à 11:28
treizia Messages postés 24 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 10 décembre 2006 - 14 nov. 2006 à 17:54
Bonjour,


Je suis débutant en VBA et je souhaite faire un programme de facturation (études)

Pour cela, j'ai crée un formulaire dans lequel on choisit un article,
son tarif, le nombre et tout ceci doit se ranger dans une feuille excel
automatiquement.

Bon ma procédure fonctionne pour la 1ere ligne, mais lorsque je clique
sur le bouton "autre article" j'aimerais que ce que selectionne la
cassiére maintenant se rajoute à une autre ligne (Or la ca m'efface la
premiére)


Je vous copie mon script dont je me suis servis pr le boutton "Autre article":


Private Sub CommandButton1_Click()


ActiveSheet.Cells(3, 1) = ZLM_DON


End Sub


D'autre part, lorsque la caissiére choisit un article (selon catégorie
sociale le prix est différent), dans mon formulaire s'affiche qu'un
seul paramétre sur les deux (ceci n'est pas génant) mais dans ma
feuille excel, aucune différenciation est faite entre le prix et la
catégorie ( j'ai deux fois la catégorie ou le prix qui s'affiche dans
excel mais jamais l'un et l'autre)


J'utilise ça comme formule pr ça:


Private Sub ComboBox2_Change()

ActiveSheet.Cells(3, 3) = ComboBox2

ActiveSheet.Cells(3, 2) = ComboBox2

End Sub


donc je comprend que j'ai deux fois pareil vu que dans ComboBox2 j'ai qu'un seul paramétre qui s'affiche.

Comment régler ce probléme s'il vous plait ?


En vous remerciant d'avance parce que la je suis vraiment desespéré


Merci beaucoup.

6 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
11 nov. 2006 à 22:37
Salut,

utilise ma fonction (se trouve sur codyx.org) :

Public Function PremiereLigneVide(Colonne As Integer) As Long
    PremiereLigneVide =  Columns(Colonne).Find("", , , , xlByRows, xlNext).Row
End Function
 Private Sub ExempleUtilisation()
    Dim intColonne As Integer
Sheets(1).Select
intColonne = 1
'*** il suffit de changer la valeur de intColonne, qui doit
'    correspondre à la colonne de recherche
 
 MsgBox PremiereLigneVide(intColonne)
End Sub

~<small> Mortalino </small>~

Après au lieu de mettre cells(3, 2), il faudra mettre cells(PremiereLigneVide, 2)

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
treizia Messages postés 24 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 10 décembre 2006
11 nov. 2006 à 23:31
Ok merci beaucoup.


Je vois et je te tiens au courant, mais vraiment merci ;)
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
11 nov. 2006 à 23:37
Pas de problème, par contre, je me corrige :

Après au lieu de mettre cells(3, 2), il faudra mettre cells(<strike>PremiereLigneVide</strike>, 2)

>> il faudra mettre cells(PremiereLigneVide(2), 2)

(j'ai omis la colonne, nécessaire à la fonction)

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
treizia Messages postés 24 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 10 décembre 2006
12 nov. 2006 à 11:54
J'ai fait comme tu m'as dit, mais le probléme c'est que maintenant ca
me va a la premiere ligne vide dés que je change d'article dans la
liste déroulante. Or moi ce que je voudrais c'est que ca passe a la
ligne, uniquement par le clic du bouton "Autre article".


En gros j'ai ça maintenant comme procédure:


Private Sub ComboBox1_Change()


If ComboBox1.ListIndex <> -1 Then


Sheets("Montant_Du").Cells(PremiereLigneVide(2), 2) = ComboBox1.Column(0, ComboBox1.ListIndex)


Sheets("Montant_Du").Cells(PremiereLigneVide(2), 3) = ComboBox1.Column(1, ComboBox1.ListIndex)


End If


End Sub


Public Function PremiereLigneVide(Colonne As Integer) As Long

    PremiereLigneVide = Columns(Colonne).Find("", , , , xlByRows, xlNext).Row

End Function


Private Sub CommandButton1_Click()


Dim intColonne As Integer

Sheets(1).Select

intColonne = 1

Sheets("Montant_Du").Cells(PremiereLigneVide(3), 1) = ZLM_DONNEES


End Sub

Private Sub CommandButton2_Click()


TextBox3.Value = Range("Montant_Du!E21").Value


End Sub


CommandButton1_Click() est le boutton qui doit me permettre de générer le changement de ligne.

Tout le reste, ce sont les paramétres (Article, tarif, nombre)


Vraiment désolé de t'embetter une nouvelle fois avec mon probléme

Mais encore Merci !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
12 nov. 2006 à 21:50
Alors pour se déplacer d'une cellule par rapport à celle activée :

Exemple, la cellule active est C3.
ActiveCell.Offset(1, 0).Select    --> Depuis C3, un déplacement est effectué d'une ligne vers le bas, et de 0 colonne

ActiveCell.Offset(0, 1).Select    --> Depuis C3, un déplacement est effectué de 0 ligne, et de 1 colonne vers la droite

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
treizia Messages postés 24 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 10 décembre 2006
14 nov. 2006 à 17:54
Salut,


J'ai mis la nouvelle formule que tu m'as dite au bouton autre article.

Donc c'est niquel ca me passe bien a la ligne suivante,

cependant, maintenant mes boutons de selection du type d'article et du tarif ne vont plus.

Ils reviennent toujours a la premiére ligne vide, donc si par exemple,
la caissiére choisit l'article 1 dans la liste, puis en fait se trompe
et selectionne l'article 2. Ces deux manipulations sont mises sur deux
lignes différentes, alors que je voudrais que ce le soit que sur une
seule (comme si par exemple je faisais range ... activesheets.cell(
1,1) , ca me mettrait mon choix dans la cellule un, et méme si je me
trompais et que je reselectionnais un autre article, ca me modifirait
la cellule un au lieu de me le mettre a la ligne suivante.)

Je ne sais pas si je suis bien clair ?


Voici le script que j'utilise maintenant :


Private Sub ComboBox1_Change()


If ComboBox1.ListIndex <> -1 Then


Sheets("Montant_Du").Cells(PremiereLigneVide(2), 2) = ComboBox1.Column(0, ComboBox1.ListIndex)


Sheets("Montant_Du").Cells(PremiereLigneVide(3), 3) = ComboBox1.Column(1, ComboBox1.ListIndex)


End If


End Sub


Public Function PremiereLigneVide(Colonne As Integer) As Long

    PremiereLigneVide = Columns(Colonne).Find("", , , , xlByRows, xlNext).Row

End Function


Private Sub CommandButton1_Click()

ActiveCell.Offset(1, 0).Select

End Sub


Private Sub TextBox1_Change()

ActiveSheet.Cells(PremiereLigneVide(4), 4) = TextBox1.Value

En sud


Voila en gros, je me doute que c'est un probléme par rapport au Premierelignevide, mais que mettre a la place ?

Merci beaucoup.

Ou alors si c'est impossible ce que je demande j'avais pensé a faire un
bouton annuler , qui effacerait la derniere ligne qui contient au moins
une valeur?


Merci d'avance et encore désolé du dérangement
0
Rejoignez-nous