Probleme combo box dinitialisation je pense

mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011 - 12 janv. 2007 à 21:15
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011 - 21 janv. 2007 à 16:46
Bonjour,
voila j'ai un petit probleme avc mon application
http://www.vbfrance.com/codes/GESTIONNAIRE-STOCK-DUNE-PME_40421.aspx

voila quand on recherche un produit sa ne fonctionne pas a chaque fois et jai une autre fonction recherche donc elle doivent se brouiller, c'est une erreur de code je pense qu'il faut "clear" quelque part mais je sais pas où.
desole je n'arrive pas a detailler plus

voici les codes:

1)

Dim i As Integer

Private Sub UserForm_Initialize()

    Application.Visible = True

i = PremiereLigneVide(1)

If i > 2 Then
Dim tableau()
Dim j As Integer

j = 2
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("A" & j).Value
CmbNom.AddItem tableau(j)
j = j + 1
Loop Until (j = i)

CmbNom.ListIndex = 0

Else

MsgBox "Il n'y a pas encore d'entrée produit"

End If
End Sub

Private Sub CmdRetour_Click()

Application.Visible = False
Me.Hide

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If Cancel = 0 Then

z = MsgBox("Etes vous sûr de vouloir quitter cette application?", vbYesNo, "Confirmer l'annulation")

  If z = 6 Then

    Application.Visible = True
    ThisWorkbook.Close SaveChanges:=True

  End If

 End If

Cancel = 1

End Sub

Public Function PremiereLigneVide(Colonne As Integer) As Integer

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

End Function

Private Sub CmdRechercher_Click()

Sheets("Produits").Select

Dim k As Integer

For k = 2 To i - 1

If CmbNom.Value = Range("A" & k) Then

rechercher_designation.Value = Range("B" & k).Value
rechercher_prixachat.Value = Range("C" & k).Value
rechercher_prixvente.Value = Range("D" & k).Value
rechercher_stock.Value = Range("E" & k).Value
rechercher_stockmini.Value = Range("F" & k).Value
rechercher_piece_cmd.Value = Range("G" & k).Value
rechercher_date_creation.Caption = Range("H" & k).Value
rechercher_fournisseur.Value = Range("M" & k).Value

End If

Next k

End Sub

Private Sub Cmdmodifier_Click()
Sheets("Produits").Select

Dim k As Integer

For k = 2 To i - 1

If CmbNom.Value = Range("A" & k) Then

Range("B" & k).Value = rechercher_designation.Value
Range("C" & k).Value = rechercher_prixachat.Value
Range("D" & k).Value = rechercher_prixvente.Value
Range("E" & k).Value = rechercher_stock.Value
Range("F" & k).Value = rechercher_stockmini.Value
Range("G" & k).Value =

et le deuxieme:

Bonjour,

voila j'ai un petit probleme avc mon application

http://www.vbfrance.com/codes/GESTIONNAIRE-STOCK-DUNE-PME_40421.aspx


voila quand on recherche un produit sa ne fonctionne pas a chaque fois
et jai une autre fonction recherche donc elle doivent se brouiller,
c'est une erreur de code je pense qu'il faut "clear" quelque part mais
je sais pas où.

desole je n'arrive pas a detailler plus


voici les codes:


1)

Dim i As Integer

Private Sub UserForm_Initialize()

    Application.Visible = True

i = PremiereLigneVide(1)

If i > 2 Then
Dim tableau()
Dim j As Integer

j = 2
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("A" & j).Value
CmbNom.AddItem tableau(j)
j = j + 1
Loop Until (j = i)

CmbNom.ListIndex = 0

Else

MsgBox "Il n'y a pas encore d'entrée produit"

End If
End Sub

Private Sub CmdRetour_Click()

Application.Visible = False
Me.Hide

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If Cancel = 0 Then

z = MsgBox("Etes vous sûr de vouloir quitter cette application?", vbYesNo, "Confirmer l'annulation")

  If z = 6 Then

    Application.Visible = True
    ThisWorkbook.Close SaveChanges:=True

  End If

 End If

Cancel = 1

End Sub

Public Function PremiereLigneVide(Colonne As Integer) As Integer

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

End Function

Private Sub CmdRechercher_Click()

Sheets("Produits").Select

Dim k As Integer

For k = 2 To i - 1

If CmbNom.Value = Range("A" & k) Then

rechercher_designation.Value = Range("B" & k).Value
rechercher_prixachat.Value = Range("C" & k).Value
rechercher_prixvente.Value = Range("D" & k).Value
rechercher_stock.Value = Range("E" & k).Value
rechercher_stockmini.Value = Range("F" & k).Value
rechercher_piece_cmd.Value = Range("G" & k).Value
rechercher_date_creation.Caption = Range("H" & k).Value
rechercher_fournisseur.Value = Range("M" & k).Value

End If

Next k

End Sub

Private Sub Cmdmodifier_Click()
Sheets("Produits").Select

Dim k As Integer

For k = 2 To i - 1

If CmbNom.Value = Range("A" & k) Then

Range("B" & k).Value = rechercher_designation.Value
Range("C" & k).Value = rechercher_prixachat.Value
Range("D" & k).Value = rechercher_prixvente.Value
Range("E" & k).Value = rechercher_stock.Value
Range("F" & k).Value = rechercher_stockmini.Value
Range("G" & k).Value =


et le deuxieme:
Bonjour,

voila j'ai un petit probleme avc mon application

http://www.vbfrance.com/codes/GESTIONNAIRE-STOCK-DUNE-PME_40421.aspx


voila quand on recherche un produit sa ne fonctionne pas a chaque fois
et jai une autre fonction recherche donc elle doivent se brouiller,
c'est une erreur de code je pense qu'il faut "clear" quelque part mais
je sais pas où.

desole je n'arrive pas a detailler plus


voici les codes:


1)

Dim i As Integer

Private Sub UserForm_Initialize()

    Application.Visible = True

i = PremiereLigneVide(1)

If i > 2 Then
Dim tableau()
Dim j As Integer

j = 2
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("A" & j).Value
CmbNom.AddItem tableau(j)
j = j + 1
Loop Until (j = i)

CmbNom.ListIndex = 0

Else

MsgBox "Il n'y a pas encore d'entrée produit"

End If
End Sub

Private Sub CmdRetour_Click()

Application.Visible = False
Me.Hide

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If Cancel = 0 Then

z = MsgBox("Etes vous sûr de vouloir quitter cette application?", vbYesNo, "Confirmer l'annulation")

  If z = 6 Then

    Application.Visible = True
    ThisWorkbook.Close SaveChanges:=True

  End If

 End If

Cancel = 1

End Sub

Public Function PremiereLigneVide(Colonne As Integer) As Integer

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

End Function

Private Sub CmdRechercher_Click()

Sheets("Produits").Select

Dim k As Integer

For k = 2 To i - 1

If CmbNom.Value = Range("A" & k) Then

rechercher_designation.Value = Range("B" & k).Value
rechercher_prixachat.Value = Range("C" & k).Value
rechercher_prixvente.Value = Range("D" & k).Value
rechercher_stock.Value = Range("E" & k).Value
rechercher_stockmini.Value = Range("F" & k).Value
rechercher_piece_cmd.Value = Range("G" & k).Value
rechercher_date_creation.Caption = Range("H" & k).Value
rechercher_fournisseur.Value = Range("M" & k).Value

End If

Next k

End Sub

Private Sub Cmdmodifier_Click()
Sheets("Produits").Select

Dim k As Integer

For k = 2 To i - 1

If CmbNom.Value = Range("A" & k) Then

Range("B" & k).Value = rechercher_designation.Value
Range("C" & k).Value = rechercher_prixachat.Value
Range("D" & k).Value = rechercher_prixvente.Value
Range("E" & k).Value = rechercher_stock.Value
Range("F" & k).Value = rechercher_stockmini.Value
Range("G" & k).Value =


et le deuxieme a la suite

merci
A voir également:

9 réponses

mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
12 janv. 2007 à 21:16
Dim i As Integer

Private Sub CmdRetour_Click()
Application.Visible = False
Me.Hide
End Sub

Private Sub UserForm_Initialize()

Application.Visible = True
CmbNom.Clear

i = PremiereLigneVide(1)

If i > 2 Then
Dim tableau()
Dim j As Integer

j = 2
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("A" & j).Value
CmbNom.AddItem tableau(j)
j = j + 1
Loop Until (j = i)

CmbNom.ListIndex = 0

Else

MsgBox "Il n'y a pas encore d'entrée société"

End If

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If Cancel = 0 Then

z = MsgBox("Etes vous sûr de vouloir quitter cette application?", vbYesNo, "Confirmer l'annulation")

  If z = 6 Then

    Application.Visible = True
    ThisWorkbook.Close SaveChanges:=True

  End If

 End If

Cancel = 1

End Sub

Public Function PremiereLigneVide(Colonne As Integer) As Integer

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

End Function

Private Sub CmdRechercher_Click()

Sheets("Sociétés").Activate

Dim k As Integer

For k = 2 To i - 1

If CmbNom.Value = Range("A" & k) Then

TxtAdresse.Value = Range("B" & k).Value
TxtCodePostale.Value = Range("C" & k).Value
TxtVille.Value = Range("D" & k).Value
TxtPays.Value = Range("E" & k).Value
TxtTel.Value = Range("F" & k).Value
TxtFax.Value = Range("G" & k).Value
TxtMail = Range("H" & k).Value
TxtRemarque.Value = Range("I" & k).Value

End If

Next k

End Sub,

----

(Coloration syntaxique automatique par Kenji)
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
12 janv. 2007 à 23:30
C'est trop long et il y a trop d'erreurs de programmation
Tu devrais t'en tenir à mettre le code qui cause problème.

Dim i as integer en entête de page de code ==>  Faut pas faire ça (voir plus bas...)

Les Dim dans des conditions, ça ne sert à rien. Les Dim sont compilés avec le programme et leur espace mémoire est prédéterminée, donc toujours présents dans le programme même s'ils ne servent pas.

Do
Redim Preserve Tableau(1 to j)
le "1 to" ne devrait pas être là, c'est déjà dimensionné...

Dim k As Integer
For k = 2 to i - 1
Comment peux-tu savoir où en est rendu i ?

je commence à peine à regarder et je vais m'arrêter là
Comme je disais, contente-toi de mettre la portion de ton code où tu penses qu'il y a problème.
Ce sera plus simple pour les gens de pouvoir t'aider.
Lâche pas

MPi
0
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
13 janv. 2007 à 10:42
donc je supprime le dim?ainsi que 1 to j? et le i faut que je fasse quoi?
merci

Private Sub UserForm_Initialize()

    Application.Visible = True

i = PremiereLigneVide(1)

If i > 2 Then
Dim tableau()
Dim j As Integer

j = 2
Do
ReDim Preserve tableau(1 To j)
tableau(j) = Range("A" & j).Value
CmbNom.AddItem tableau(j)
j = j + 1
Loop Until (j = i)

CmbNom.ListIndex = 0

end sub

Public Function PremiereLigneVide(Colonne As Integer) As Integer

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

End Function

Private Sub CmdRechercher_Click()

Sheets("Produits").Select

Dim k As Integer

For k = 2 To i - 1

If CmbNom.Value = Range("A" & k) Then

rechercher_designation.Value = Range("B" & k).Value
rechercher_prixachat.Value = Range("C" & k).Value
End If
Next k
End Sub

Donc voila desole pour avant, je pense que le probleme vient dune de ces lignes la
merci
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
13 janv. 2007 à 14:53
Il ne s'agit pas d'éliminer les Dim. Il faut juste comprendre que le compilateur réserve des espaces mémoire pour toutes les variables déclarées, qu'elles soient ou non à l'intérieur de conditions. Ça ne sert donc à rien de déclarer de cette façon
If MaCondition then
Dim MaVariable

Pour une meilleure lecture du code, il est préférable de toutes les déclarer au début de la procédure

Si ton Combobox demeure vide, essaie avec cette Function.
En fait, tu ne veux probablement pas intégrer une ligne vide à ton tableau (la première ligne vide justement...)

Public Function DerniereLignePleine(Colonne As Integer) AsLong

   
DerniereLignePleine
= Columns(Colonne).Find("",Range("A1") , , , xlByRows, xlPrevious).Row

End Function

Et tu changes l'appel pour
i =
DerniereLignePleine
(1)

Comme tu connais maintenant le nombre de cellules à lire, tu peux dimensionner ton tableau d'un seul coup
Redim Tableau(i)  ' ici i pourrait être écrit i-2 selon la ligne de départ de ta boucle
et laisser tomber le Redim Preserve

MPi
0

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

Posez votre question
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
14 janv. 2007 à 17:07
quand je copie la la focntion de la dernierelignepleine ca me le surligne en rouge :
Public Function DerniereLignePleine(Colonne As Integer) AsLong
 cela vient d'ou?

le code donne ca alors

Private Sub UserForm_Initialize()

    Application.Visible = True

i =
DerniereLignePleine
(1)

If i > 2 Then

Redim Tableau(i-2)

CmbNom.AddItem tableau(i)
j = j + 1
Loop Until (j = i)

CmbNom.ListIndex = 0

end sub

Public Function DerniereLignePleine(Colonne As Integer) AsLong

   
DerniereLignePleine
= Columns(Colonne).Find("",Range("A1") , , , xlByRows, xlPrevious).Row

End Function

Private Sub CmdRechercher_Click()

Sheets("Produits").Select

Dim k As Integer

For k = 2 To i - 1

If CmbNom.Value = Range("A" & k) Then

rechercher_designation.Value = Range("B" & k).Value
rechercher_prixachat.Value = Range("C" & k).Value
End If
Next k
End Sub
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
14 janv. 2007 à 23:08
Mets un espace entre As et Long et rajoute un * entre les guillemets... j'ai fait un mauvais copier/coller

Donc,

Public Function DerniereLignePleine(Colonne As Integer) As Long

   
DerniereLignePleine
= Columns(Colonne).Find("*",Range("A1") , , , xlByRows, xlPrevious).Row

End Function

MPi
0
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
15 janv. 2007 à 06:41
merci je regarde sa ce soir
0
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
16 janv. 2007 à 20:55
bonjour,
jai regarder et j'avoue etre perdut
Je suis un noob donc en meme temps sa se comprend.
Jai compri qu'il fallait remplacer ma recherche de ligne vide, par celle de ligne pleine pour dimensionner correctement le tableau.
Mais ou placer cette variable, a la place de quoi?
le do doit etre supprimer mais sa veut dire qu'il faut supprimer le loopuntil ect, je suis confut.
Le probleme et que desfois il m'affiche sur mes deux  userform differentes dans mes combobox(avec le meme code, mais pas la meme recherche de feuille) les noms trouver sur la userform precedement.Ya pas un endroit ou il faut mettre la fonction clear.
desole de tembeter Mpi merci encore 
0
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
21 janv. 2007 à 16:46
voila mon code encore remodifier

Public Function DerniereLignePleine(Colonne As Integer) As Long
Sheets("Produits").Select
    DerniereLignePleine = Columns(Colonne).Find("*", Range("A1"), , , xlByRows, xlPrevious).Row

End Function

Private Sub CmdRechercher_Click()

Sheets("Produits").Select

Dim k As Integer

For k = 2 To i - 1

If CmbNom.Value = Range("A" & k) Then

rechercher_designation.Value = Range("B" & k).Value
rechercher_prixachat.Value = Range("C" & k).Value
rechercher_prixvente.Value = Range("D" & k).Value
rechercher_stock.Value = Range("E" & k).Value
rechercher_stockmini.Value = Range("F" & k).Value
rechercher_piece_cmd.Value = Range("G" & k).Value
rechercher_date_creation.Caption = Range("H" & k).Value
rechercher_fournisseur.Value = Range("M" & k).Value

End If

Next k

End Sub

mais celui ci n'affiche que la premiere valeur de la collonne et non toutes les autres
0
Rejoignez-nous