User form sur excel et recherche de valeurs

Signaler
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
-
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
-
bonjour tt le monde voila mon problème
j'ai un tableau excel ou sont remplis divers champs à l'aide d'un userform
seulement quand les valeurs rentrées sont incomplètes je voudrais avec à effectuer une recherche par un paramètre et affecter les valeurs manquantes par un userform.
Sous vb je présente les choses de la manière suivante:

Private Sub OK2_Click()
''en cliquant sur un bouton
MousePointer = 1
""à partir de la 6ème ligne
i = 6
Do While Worksheets("Factures_2K7").Cells(i, 4) <> factnum2.Value
""factnum2 est une valeur rentrée que l'on recherche sur le fichier
i = i + 1
Loop
    Factures_2K7.Cells(8, i) = litige2.Value
""litige2.value la valeur à rentrer dans le fichier excel à une case correspondante
End Sub

J'ai une erreur que je ne comprends pas "erreur définie par l'application ou l'objet"???

Si quelqu'un peut m'aider sur ce petit programme qui m'a pourri l'aprem!!!!

Merci d'av!!

Penny05

15 réponses

Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Salut penny05,

merci pour tes voeux MP, bonne année à toi aussi

elle arrive sur quelle ligne ton erreur?
y a-t-il bien une valeur dans litige2.value?
Factures_2K7.Cells(8, i) pointe-t-elle sur une cellule fusionnée?
et pourquoi une fois tu écris "Worksheets("Factures_2K7").Cells(i, 4)" et une autre tu écris "Factures_2K7.Cells(8, i)"?

à+

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Messages postés
266
Date d'inscription
mardi 7 septembre 2004
Statut
Membre
Dernière intervention
30 avril 2009
1
je connais bien ce type d'erreur, cela
viens de la façon dont tu déclares la sheet, utilise
sheet(nom_de_la_sheet) et evite d'utiliser cells(x,y) qui génère
souvent des erreurs à la place

active une cellule range("A1").activate par exemple puis pour te déplacer, activecell.offset(x,y)


ton problème relève plus du bug d'office que d'autre chose


slts!

Tout sur la prog en VB6

API @ la Loupe http://xav.prog.power.free.fr
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
alors merci de vos réponses

D'abord petite erreur quand j'ai écrit Factures_2K7.Cells(8, i) il s'agit plutot de Worksheets("Factures_2K7").Rows(i).Columns(9) = litige2.Value

l'erreur intervient à la ligne
Do While Worksheets("Factures_2K7").Cells(i, 4) <> factnum2.Value
""factnum2 est une valeur rentrée que l'on recherche sur le fichier

de plus il y'a une valeur dans litige2.value entrée et Factures_2K7.Cells(9, i)  n'est pas sur une cellule fusionée pour répondre aux questions.
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Valeur de i?

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
i=6 est la premiere valeur ce qui correspond a la ligne 6 et colonne 4 pour commencer la recherche.
ensuite on reste sur la ligne et on affecte litige2.value à la colonne 8 de la ligne6

Voila
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Quand je lis ton code, on commence à la ligne 6, colonne 4, et tant que gnagnagna, on incrémente i.
Enfin, quand on sort de la boucle, on écrit ligne 8, colonne i.

Quand l'erreur survient, i vaut combien?

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
quand y'a l'erreur i atteint apperement son max i = environ 657.. comme s'il parcourait toutes les cases suivantes jusqu'au max
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
voilà la réponse à ton problème!

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
t'expliques un peu stp?????
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Je te charie, tu me connais un peu, moi, des réponses brèves?

Si tu veux, écris plutôt comme ça (à l'avenir ça peut servir):

    i = 1
    'ça se lit comme ça "tant que lue est <> de cherchée et pas max"
    'ça se documente comme ça "arrêt quand lue = cherchée ou max"
    While (Worksheets("Factures_2K7").Cells(i, 4) <> factnum2.Value) _
    And (i < 65536)
       'incrémente
       i = i + 1
    Wend
    If i = 65536 Then
        'on est au max
    Else
        'on a la valeur
    End If

Il faut toujours une condition d'arrêt supplémentaire (un indice max, un timeout,...) qui te permet de fixer les bornes de ton algo. Là, en l'occurence, c'est la propriété Cells qui définit une borne, l'indice ne peut pas dépasser 65536, au dela Cells renvoie une erreur.
J'attire aussi ton attention sur le fait qu'à la fin, tu vas écrire à la colonne d'indice i, et le nombre de colonnes est encore plus limité, environ 255.

Ceci dit, ça n'explique pas pourquoi tu ne trouve pas ta valeur, mais pourquoi tu as une erreur.
Mets aussi un traitement d'erreur pour y voir plus clair.

à+

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Tu écris ceci
Do While Worksheets("Factures_2K7").Cells(i, 4) <> factnum2.Value
""factnum2 est une valeur rentrée que l'on recherche sur le fichier
i = i + 1
Loop
    Factures_2K7.Cells(8, i) = litige2.Value
""litige2.value la valeur à rentrer dans le fichier excel à une case correspondante
End Sub

Donc, tu boucles la colonne D, ligne par ligne jusqu'à ce que la condition soit vraie
Ensuite, tu prends la valeur i, soit la ligne trouvée et tu t'en sers comme colonne...
Je pense qu'il y a une petite erreur là...

Je pense que le mieux pour trouver une valeur est d'utiliser la fonction FIND
Dim Recherche as range
Set Recherche = Worksheets("Factures_2K7").Columns("D:D").Find(factnum2.value)
If Not Recherche is nothing then 'trouvé
msgbox Recherche.Address
'Tu peux aussi utiliser Row pour connaître la ligne de la cellule trouvée
'et tu peux utiliser Offset pour te déplacer dans la direction que tu veux à partir de cette cellule
else
msgbox "Valeur non trouvée"
end if

MPi
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
Bonjour !!!

Je pense que le problème se pose à la boucle while.
Apparemment il ne trouve jamais la valeur quand on a

While (Worksheets("Factures_2K7").Cells(i, 4) <> factnum2.Value) _
    And (i < 65536)

Alors que je fais des tests de valeur dans le fichier!!!!

Pour info factnum2 que je rentre dans le userform est un numéro ex 14255

Et dansd le fichier colonne D à partir de la ligne 6 Numfact est aussi un numéro ex : 4573

Et j'ai pas d'erreur d'incompatibilité de type trop bizarre!
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
bon à ma grande surprise il s'agit d'une incompatibilité de type je pense
en effet à la place de rentrer des chiffres comme prévu j'ai mis du texte a la place et ca marche donc il fautt absolument convert en string pour que ca marche
Messages postés
105
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
18 janvier 2007
1
Et donc le programme qui marche pour cette application en se basant sur vos notes:

Private Sub OK2_Click()
MousePointer = 1
 i = 1
    'ça se lit comme ça "tant que lue est <> de cherchée et pas max"
    'ça se documente comme ça "arrêt quand lue = cherchée ou max"
    While (Worksheets("Factures_2K7").Cells(i, 4) <> CStr(factnum2.Value)) _
    And (i < 65536)
       'incrémente
       i = i + 1
    Wend
    If i = 65536 Then
    MsgBox ("PAS DE FACTURER CORRESPONDANTE")
        'on est au max
    Else
    Worksheets("Factures_2K7").Cells(i, 9) = recherchelitige.Value
        'on a la valeur
    End If
End Sub

Thanks rvblog and others!!!!
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Salut penny05, salut à tous,

de rien, ce fût un plaisir!

au fait, n'oublies pas d'écrire "Worksheets("Factures_2K7").Cells(i, 4).valueil faut savoir renoncer aux facilités du langage, et donc, à l'utilisation des propriétés par défaut, qui réservent bien des surprises).

c'était la dernière couche, à bientôt.

rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>