penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 2007
-
17 janv. 2007 à 17:29
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 2012
-
18 janv. 2007 à 11:15
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!!!!
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>
zavier666
Messages postés266Date d'inscriptionmardi 7 septembre 2004StatutMembreDernière intervention30 avril 20091 17 janv. 2007 à 18:06
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
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 17 janv. 2007 à 18:17
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.
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 17 janv. 2007 à 18:39
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
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 17 janv. 2007 à 18:47
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>
rvblog
Messages postés792Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention12 juin 20127 17 janv. 2007 à 19:16
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>
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 18 janv. 2007 à 00:37
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
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 18 janv. 2007 à 11:02
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
penny05
Messages postés105Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention18 janvier 20072 18 janv. 2007 à 11:07
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
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>