En fait tu te servais du listindex du listbox comme numéro de ligne à supprimer, ce quui induisait une erreur quand les données étaient filtrées. Pour trouver le numéro de ligne à supprimer, j'ai fait une recherche sur l'immatriculation et le kilométrage :
Set c = Feuil2.Range("A65000").End(xlUp) 'Dernière ligne de la base de données Ligne = c.Row With LstResultat Immat = .List(.ListIndex, 1) Km = .List(.ListIndex, 4) End With Feuil2.Select 'Calcul de la ligne à supprimer / Modifier l = Evaluate("sumproduct((B2:B" & Ligne & "=""" & Immat & """)*(E2:E" & Ligne & "=" & Km & _ ")*row(2:" & Ligne & "))")
J'ai testé les suppressions, pas les modifications. Je t'en laisse le soin. Daniel
Mais tout compte fait, attend pour le faire, on doit pouvoir s'en sortir sans. Daniel
Non, C'est très bien ! tu peux le mettre dans le listbox dans une colonne ayant une largeur 0 ce qui fait qu'on ne la voit pas. Daniel
En complément et après grande réflexion !!
En fait, il faudrait intervenir dans le classeur HISTOCARBU" sur le numéro de ligne et seulement sur celle ci de la colonne A à J puisque quand on filtre, le numéro de ligne ne change pas.
Et si je mettais un numéro d'enregistrement pour chaque ligne ? afin de "repérer" la ligne correspondante
Enfin c'est qu'une idée de débutant ....
En fait tu te servais du listindex du listbox comme numéro de ligne à
supprimer, ce quui induisait une erreur quand les données étaient
filtrées.
Pour trouver le numéro de ligne à supprimer, j'ai fait une recherche
sur l'immatriculation et le kilométrage :
Set c = Feuil2.Range("A65000").End(xlUp)
'Dernière ligne de la base de données
Ligne = c.Row
With LstResultat
Immat = .List(.ListIndex, 1)
Km = .List(.ListIndex, 4)
End With
Feuil2.Select
'Calcul de la ligne à supprimer / Modifier
l = Evaluate("sumproduct((B2:B" & Ligne & "=""" & Immat & """)*(E2:E"
& Ligne & "=" & Km & _
")*row(2:" & Ligne & "))")
J'ai testé les suppressions, pas les modifications. Je t'en laisse le
soin.
Daniel
Mais tout compte fait, attend pour le faire, on doit pouvoir s'en sortir
sans.
Daniel
Non, C'est très bien ! tu peux le mettre dans le listbox dans une colonne
ayant une largeur 0 ce qui fait qu'on ne la voit pas.
Daniel
En complément et après grande réflexion !!
En fait, il faudrait intervenir dans le classeur HISTOCARBU" sur le numéro
de ligne et seulement sur celle ci de la colonne A à J puisque quand on
filtre, le numéro de ligne ne change pas.
Et si je mettais un numéro d'enregistrement pour chaque ligne ? afin de
"repérer" la ligne correspondante
En fait tu te servais du listindex du listbox comme numéro de ligne à supprimer, ce quui induisait une erreur quand les données étaient filtrées. Pour trouver le numéro de ligne à supprimer, j'ai fait une recherche sur l'immatriculation et le kilométrage :
Set c = Feuil2.Range("A65000").End(xlUp) 'Dernière ligne de la base de données Ligne = c.Row With LstResultat Immat = .List(.ListIndex, 1) Km = .List(.ListIndex, 4) End With Feuil2.Select 'Calcul de la ligne à supprimer / Modifier l = Evaluate("sumproduct((B2:B" & Ligne & "=""" & Immat & """)*(E2:E" & Ligne & "=" & Km & _ ")*row(2:" & Ligne & "))")
J'ai testé les suppressions, pas les modifications. Je t'en laisse le soin. Daniel
Mais tout compte fait, attend pour le faire, on doit pouvoir s'en sortir sans. Daniel
Non, C'est très bien ! tu peux le mettre dans le listbox dans une colonne ayant une largeur 0 ce qui fait qu'on ne la voit pas. Daniel
En complément et après grande réflexion !!
En fait, il faudrait intervenir dans le classeur HISTOCARBU" sur le numéro de ligne et seulement sur celle ci de la colonne A à J puisque quand on filtre, le numéro de ligne ne change pas.
Et si je mettais un numéro d'enregistrement pour chaque ligne ? afin de "repérer" la ligne correspondante
Enfin c'est qu'une idée de débutant ....
Daniel.C
Oups, le classeur est là : http://cjoint.com/?bDndQ8HDhD Daniel
Mais tout compte fait, attend pour le faire, on doit pouvoir s'en sortir sans. Daniel
Non, C'est très bien ! tu peux le mettre dans le listbox dans une colonne ayant une largeur 0 ce qui fait qu'on ne la voit pas. Daniel
En complément et après grande réflexion !!
En fait, il faudrait intervenir dans le classeur HISTOCARBU" sur le numéro de ligne et seulement sur celle ci de la colonne A à J puisque quand on filtre, le numéro de ligne ne change pas.
Et si je mettais un numéro d'enregistrement pour chaque ligne ? afin de "repérer" la ligne correspondante
Enfin c'est qu'une idée de débutant ....
Oups, le classeur est là :
http://cjoint.com/?bDndQ8HDhD
Daniel
Mais tout compte fait, attend pour le faire, on doit pouvoir s'en sortir
sans.
Daniel
Non, C'est très bien ! tu peux le mettre dans le listbox dans une colonne
ayant une largeur 0 ce qui fait qu'on ne la voit pas.
Daniel
En complément et après grande réflexion !!
En fait, il faudrait intervenir dans le classeur HISTOCARBU" sur le numéro
de ligne et seulement sur celle ci de la colonne A à J puisque quand on
filtre, le numéro de ligne ne change pas.
Et si je mettais un numéro d'enregistrement pour chaque ligne ? afin de
"repérer" la ligne correspondante
Oups, le classeur est là : http://cjoint.com/?bDndQ8HDhD Daniel
Mais tout compte fait, attend pour le faire, on doit pouvoir s'en sortir sans. Daniel
Non, C'est très bien ! tu peux le mettre dans le listbox dans une colonne ayant une largeur 0 ce qui fait qu'on ne la voit pas. Daniel
En complément et après grande réflexion !!
En fait, il faudrait intervenir dans le classeur HISTOCARBU" sur le numéro de ligne et seulement sur celle ci de la colonne A à J puisque quand on filtre, le numéro de ligne ne change pas.
Et si je mettais un numéro d'enregistrement pour chaque ligne ? afin de "repérer" la ligne correspondante
Enfin c'est qu'une idée de débutant ....
DAVID
Bonsoir Daniel
Désolé de t'avoir lâché aujourd'hui....
En ce qui concerne la finalité, bin je dirais EXTRA GENIAL !!!
Ça fait 45 mns que je fais des essais afin de trouver une faille au system mais que néni !!!
Un GRAND MERCI de ta patiente, ton aide.....
Sincères salutations
David
Bonsoir Daniel
Désolé de t'avoir lâché aujourd'hui....
En ce qui concerne la finalité, bin je dirais EXTRA GENIAL !!!
Ça fait 45 mns que je fais des essais afin de trouver une faille au system
mais que néni !!!
Ci-joint la dernière version de mon projet http://www.cijoint.fr/cjlink.php?file=cj201001/cijD4UIqGb.xls
Il y a un petit souci.
J'explique en disant la manip.
Ouverture UserForm Dans le combo Alias, sélectionne "V1"
Nous pouvons voir au dernier enregistrement qu'il manque des informations ce qui est normal puisqu'on les connaisser pas au moment de la saisie.
Double-Clic dans cette enregistrement et remplissage des TextBox vides.
Clic sur modifier et la "Incompatibilité de type"
sur la ligne .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne dans CmbModifier_Click
Merci à nouveau de ton aide
Cordialement David
DT
Désolé, je pense avoir trouvé
Je vais changer la recherche par une valeur plus sûre
'Trouver le numéro de ligne à partir de l'immatriculation et du kilométrage Set c = Feuil2.Range("A65000").End(xlUp) 'Dernière ligne de la base de données Ligne = c.Row With LstResultat Immat = .List(.ListIndex, 1) Km = .List(.ListIndex, 4) End With
Désolé, je pense avoir trouvé
Je vais changer la recherche par une valeur plus sûre
'Trouver le numéro de ligne à partir de l'immatriculation et du kilométrage
Set c = Feuil2.Range("A65000").End(xlUp)
'Dernière ligne de la base de données
Ligne = c.Row
With LstResultat
Immat = .List(.ListIndex, 1)
Km = .List(.ListIndex, 4)
End With
Je vais changer la recherche par une valeur plus sûre
'Trouver le numéro de ligne à partir de l'immatriculation et du kilométrage Set c = Feuil2.Range("A65000").End(xlUp) 'Dernière ligne de la base de données Ligne = c.Row With LstResultat Immat = .List(.ListIndex, 1) Km = .List(.ListIndex, 4) End With
michdenis
| Clic sur modifier et la "Incompatibilité de type"
| sur la ligne .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne dans
Je n'ai pas ouvert ton classeur, mais il y a de grosses chances que ton textbox "TxtDate.value" ne doit pas contenir un format "Date" reconnu par Excel. Ce que tu dois savoir, la fonction de conversion Cdate() utilise le format court "Date" défini dans le panneau de configuration de Windows pour effectuer la conversion d'un string en date.
| Clic sur modifier et la "Incompatibilité de type"
| sur la ligne .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne dans
Je n'ai pas ouvert ton classeur, mais il y a de grosses chances que
ton textbox "TxtDate.value" ne doit pas contenir un format "Date"
reconnu par Excel. Ce que tu dois savoir, la fonction de conversion Cdate()
utilise le format court "Date" défini dans le panneau de configuration
de Windows pour effectuer la conversion d'un string en date.
| Clic sur modifier et la "Incompatibilité de type"
| sur la ligne .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne dans
Je n'ai pas ouvert ton classeur, mais il y a de grosses chances que ton textbox "TxtDate.value" ne doit pas contenir un format "Date" reconnu par Excel. Ce que tu dois savoir, la fonction de conversion Cdate() utilise le format court "Date" défini dans le panneau de configuration de Windows pour effectuer la conversion d'un string en date.
DT
Pas spécialiste, mais je pense pas que cela vienne d'un problème de format de date.
La solution de Daniel C fonctionne très bien sauf qu'il prend 2 conditions pour rechercher le numéro de ligne; l'immatriculation et le kilométrage. Le problème c'est que le kilométrage, nous l'avons pas toujours.
Après essai en remplaçant le "Km" avec une condition comme le "type" ou "Alias" j'ai compris qu'il fallait une valeur qui change. Donc la je coince.
Pas spécialiste, mais je pense pas que cela vienne d'un problème de format
de date.
La solution de Daniel C fonctionne très bien sauf qu'il prend 2 conditions
pour rechercher le numéro de ligne; l'immatriculation et le kilométrage.
Le problème c'est que le kilométrage, nous l'avons pas toujours.
Après essai en remplaçant le "Km" avec une condition comme le "type" ou
"Alias" j'ai compris qu'il fallait une valeur qui change. Donc la je coince.
Pas spécialiste, mais je pense pas que cela vienne d'un problème de format de date.
La solution de Daniel C fonctionne très bien sauf qu'il prend 2 conditions pour rechercher le numéro de ligne; l'immatriculation et le kilométrage. Le problème c'est que le kilométrage, nous l'avons pas toujours.
Après essai en remplaçant le "Km" avec une condition comme le "type" ou "Alias" j'ai compris qu'il fallait une valeur qui change. Donc la je coince.
Daniel.C
Bonjour.
Est-ce qu'il peut y avoir deux lignes avec le kilométrage non renseigné pour le même véhicule ? J'ai mmodifié le code comme suit :
Private Sub CmbModifier_Click()
If TxtDate.Value = "" Then MsgBox "Date OBLIGATOIRE pour continuer" Me.TxtDate.SetFocus Cancel = True Calendrier_Form.Show Else
If Not IsDate(Me.TxtDate.Text) Then MsgBox "Format date incompatible. Utiliser le Calendrier" Me.TxtDate.SetFocus Cancel = True Calendrier_Form.Show Else
'Boite Confirmation Dim réponse réponse = MsgBox(" Etes vous sur de vouloir MODIFIER cette fiche ? ", vbYesNo + vbQuestion, "Validation") If réponse = vbNo Then Exit Sub 'Trouver le numéro de ligne à partir de l'immatriculation et du kilométrage Set c = Feuil2.Range("A65000").End(xlUp) 'Dernière ligne de la base de données Ligne = c.Row With LstResultat Immat = .List(.ListIndex, 1) Km = .List(.ListIndex, 4) If Km = "" Then Km = 0 End With Feuil2.Select 'Calcul de la ligne à supprimer / Modifier l = Evaluate("sumproduct((B2:B" & Ligne & "=""" & Immat & """)*(E2:E" & Ligne & "=" & Km & _ ")*row(2:" & Ligne & "))")
'la 1ère ligne de la BD est 2 qui correspond à LisIndex=0 donc, décaler d'autant pour retrouver la ligne With Feuil2 Var = CDate(TxtDate.Value) .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne .Cells(l, 2) = TxtImmat.Value .Cells(l, 3) = TxtAlias.Value .Cells(l, 4) = TxtType.Value .Cells(l, 10) = CmbPaiement.Value End With
If TxtKms <> "" Then With Feuil2.Cells(l, 5) .NumberFormat = "0" 'Si tu as besoin d'appliquer un format particulier à cette cellule .Value = CDbl(Me.TxtKms) End With Else Feuil2.Cells(l, 5) = TxtKms.Value End If
If TxtMontant <> "" Then With Feuil2.Cells(l, 6) .NumberFormat = "0.000 ¤" .Value = CDbl(Me.TxtMontant) End With Else Feuil2.Cells(l, 6) = TxtMontant.Value End If
If TxtLitre <> "" Then With Sheets("HISTOCARBU").Cells(l, 7) .NumberFormat = "0.000" .Value = CDbl(Me.TxtLitre) End With Else Feuil2.Cells(l, 7) = TxtLitre.Value End If
If TxtPrixLitre <> "" Then With Feuil2.Cells(l, 8) .NumberFormat = "0.000 ¤" .Value = CDbl(Me.TxtPrixLitre) End With Else Feuil2.Cells(l, 8) = TxtPrixLitre.Value End If
If TxtCarteInter <> "" Then With Feuil2.Cells(l, 9) .NumberFormat = "0" .Value = CDbl(Me.TxtCarteInter) End With Else Feuil2.Cells(l, 9) = TxtCarteInter.Value End If
'recalculer la liste UserForm_Initialize
End If End If End Sub
J'ai ajouté la ligne : If Km = "" Then Km = 0
Au cas où il peut y avoir deux lignes sélectionnées (même immatriculation, deux lilométrage non renseigné) il faudrait ajouté un critère de sélection supplémentaire (la date ?) Daniel
Bonjour/Bonsoir Daniel
Désoler de revenir sur ce fil
Ci-joint la dernière version de mon projet http://www.cijoint.fr/cjlink.php?file=cj201001/cijD4UIqGb.xls
Il y a un petit souci.
J'explique en disant la manip.
Ouverture UserForm Dans le combo Alias, sélectionne "V1"
Nous pouvons voir au dernier enregistrement qu'il manque des informations ce qui est normal puisqu'on les connaisser pas au moment de la saisie.
Double-Clic dans cette enregistrement et remplissage des TextBox vides.
Clic sur modifier et la "Incompatibilité de type"
sur la ligne .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne dans CmbModifier_Click
Merci à nouveau de ton aide
Cordialement David
Bonjour.
Est-ce qu'il peut y avoir deux lignes avec le kilométrage non renseigné
pour le même véhicule ?
J'ai mmodifié le code comme suit :
Private Sub CmbModifier_Click()
If TxtDate.Value = "" Then
MsgBox "Date OBLIGATOIRE pour continuer"
Me.TxtDate.SetFocus
Cancel = True
Calendrier_Form.Show
Else
If Not IsDate(Me.TxtDate.Text) Then
MsgBox "Format date incompatible. Utiliser le Calendrier"
Me.TxtDate.SetFocus
Cancel = True
Calendrier_Form.Show
Else
'Boite Confirmation
Dim réponse
réponse = MsgBox(" Etes vous sur de vouloir MODIFIER cette fiche ? ",
vbYesNo + vbQuestion, "Validation")
If réponse = vbNo Then Exit Sub
'Trouver le numéro de ligne à partir de l'immatriculation et du
kilométrage
Set c = Feuil2.Range("A65000").End(xlUp)
'Dernière ligne de la base de données
Ligne = c.Row
With LstResultat
Immat = .List(.ListIndex, 1)
Km = .List(.ListIndex, 4)
If Km = "" Then Km = 0
End With
Feuil2.Select
'Calcul de la ligne à supprimer / Modifier
l = Evaluate("sumproduct((B2:B" & Ligne & "=""" & Immat & """)*(E2:E"
& Ligne & "=" & Km & _
")*row(2:" & Ligne & "))")
'la 1ère ligne de la BD est 2 qui correspond à LisIndex=0 donc, décaler
d'autant pour retrouver la ligne
With Feuil2
Var = CDate(TxtDate.Value)
.Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne
.Cells(l, 2) = TxtImmat.Value
.Cells(l, 3) = TxtAlias.Value
.Cells(l, 4) = TxtType.Value
.Cells(l, 10) = CmbPaiement.Value
End With
If TxtKms <> "" Then
With Feuil2.Cells(l, 5)
.NumberFormat = "0" 'Si tu as besoin d'appliquer un format
particulier à cette cellule
.Value = CDbl(Me.TxtKms)
End With
Else
Feuil2.Cells(l, 5) = TxtKms.Value
End If
If TxtMontant <> "" Then
With Feuil2.Cells(l, 6)
.NumberFormat = "0.000 ¤"
.Value = CDbl(Me.TxtMontant)
End With
Else
Feuil2.Cells(l, 6) = TxtMontant.Value
End If
If TxtLitre <> "" Then
With Sheets("HISTOCARBU").Cells(l, 7)
.NumberFormat = "0.000"
.Value = CDbl(Me.TxtLitre)
End With
Else
Feuil2.Cells(l, 7) = TxtLitre.Value
End If
If TxtPrixLitre <> "" Then
With Feuil2.Cells(l, 8)
.NumberFormat = "0.000 ¤"
.Value = CDbl(Me.TxtPrixLitre)
End With
Else
Feuil2.Cells(l, 8) = TxtPrixLitre.Value
End If
If TxtCarteInter <> "" Then
With Feuil2.Cells(l, 9)
.NumberFormat = "0"
.Value = CDbl(Me.TxtCarteInter)
End With
Else
Feuil2.Cells(l, 9) = TxtCarteInter.Value
End If
'recalculer la liste
UserForm_Initialize
End If
End If
End Sub
J'ai ajouté la ligne :
If Km = "" Then Km = 0
Au cas où il peut y avoir deux lignes sélectionnées (même
immatriculation, deux lilométrage non renseigné) il faudrait ajouté un
critère de sélection supplémentaire (la date ?)
Daniel
Bonjour/Bonsoir Daniel
Désoler de revenir sur ce fil
Ci-joint la dernière version de mon projet
http://www.cijoint.fr/cjlink.php?file=cj201001/cijD4UIqGb.xls
Il y a un petit souci.
J'explique en disant la manip.
Ouverture UserForm
Dans le combo Alias, sélectionne "V1"
Nous pouvons voir au dernier enregistrement qu'il manque des informations ce
qui est normal puisqu'on les connaisser pas au moment de la saisie.
Double-Clic dans cette enregistrement et remplissage des TextBox vides.
Clic sur modifier et la "Incompatibilité de type"
sur la ligne .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne dans
CmbModifier_Click
Est-ce qu'il peut y avoir deux lignes avec le kilométrage non renseigné pour le même véhicule ? J'ai mmodifié le code comme suit :
Private Sub CmbModifier_Click()
If TxtDate.Value = "" Then MsgBox "Date OBLIGATOIRE pour continuer" Me.TxtDate.SetFocus Cancel = True Calendrier_Form.Show Else
If Not IsDate(Me.TxtDate.Text) Then MsgBox "Format date incompatible. Utiliser le Calendrier" Me.TxtDate.SetFocus Cancel = True Calendrier_Form.Show Else
'Boite Confirmation Dim réponse réponse = MsgBox(" Etes vous sur de vouloir MODIFIER cette fiche ? ", vbYesNo + vbQuestion, "Validation") If réponse = vbNo Then Exit Sub 'Trouver le numéro de ligne à partir de l'immatriculation et du kilométrage Set c = Feuil2.Range("A65000").End(xlUp) 'Dernière ligne de la base de données Ligne = c.Row With LstResultat Immat = .List(.ListIndex, 1) Km = .List(.ListIndex, 4) If Km = "" Then Km = 0 End With Feuil2.Select 'Calcul de la ligne à supprimer / Modifier l = Evaluate("sumproduct((B2:B" & Ligne & "=""" & Immat & """)*(E2:E" & Ligne & "=" & Km & _ ")*row(2:" & Ligne & "))")
'la 1ère ligne de la BD est 2 qui correspond à LisIndex=0 donc, décaler d'autant pour retrouver la ligne With Feuil2 Var = CDate(TxtDate.Value) .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne .Cells(l, 2) = TxtImmat.Value .Cells(l, 3) = TxtAlias.Value .Cells(l, 4) = TxtType.Value .Cells(l, 10) = CmbPaiement.Value End With
If TxtKms <> "" Then With Feuil2.Cells(l, 5) .NumberFormat = "0" 'Si tu as besoin d'appliquer un format particulier à cette cellule .Value = CDbl(Me.TxtKms) End With Else Feuil2.Cells(l, 5) = TxtKms.Value End If
If TxtMontant <> "" Then With Feuil2.Cells(l, 6) .NumberFormat = "0.000 ¤" .Value = CDbl(Me.TxtMontant) End With Else Feuil2.Cells(l, 6) = TxtMontant.Value End If
If TxtLitre <> "" Then With Sheets("HISTOCARBU").Cells(l, 7) .NumberFormat = "0.000" .Value = CDbl(Me.TxtLitre) End With Else Feuil2.Cells(l, 7) = TxtLitre.Value End If
If TxtPrixLitre <> "" Then With Feuil2.Cells(l, 8) .NumberFormat = "0.000 ¤" .Value = CDbl(Me.TxtPrixLitre) End With Else Feuil2.Cells(l, 8) = TxtPrixLitre.Value End If
If TxtCarteInter <> "" Then With Feuil2.Cells(l, 9) .NumberFormat = "0" .Value = CDbl(Me.TxtCarteInter) End With Else Feuil2.Cells(l, 9) = TxtCarteInter.Value End If
'recalculer la liste UserForm_Initialize
End If End If End Sub
J'ai ajouté la ligne : If Km = "" Then Km = 0
Au cas où il peut y avoir deux lignes sélectionnées (même immatriculation, deux lilométrage non renseigné) il faudrait ajouté un critère de sélection supplémentaire (la date ?) Daniel
Bonjour/Bonsoir Daniel
Désoler de revenir sur ce fil
Ci-joint la dernière version de mon projet http://www.cijoint.fr/cjlink.php?file=cj201001/cijD4UIqGb.xls
Il y a un petit souci.
J'explique en disant la manip.
Ouverture UserForm Dans le combo Alias, sélectionne "V1"
Nous pouvons voir au dernier enregistrement qu'il manque des informations ce qui est normal puisqu'on les connaisser pas au moment de la saisie.
Double-Clic dans cette enregistrement et remplissage des TextBox vides.
Clic sur modifier et la "Incompatibilité de type"
sur la ligne .Cells(l, 1) = CDate(TxtDate.Value) '1 est la colonne dans CmbModifier_Click