Comment déterminer la valeur d'une cellule dont la ligne est variablee

Bonjour,

J'essaie de déterminer la valeur "Quantité" associée à une référence dans un tableau excel. La référence en question est recherchée dans l'interface, je détermine sa valeur de façon suivante:

MaRecherche = form.search.Value

Ensuite, je parcours la colonne B de mon excel pour déterminer la cellule correspondante:

 Dim o As Object
                     Set o = Worksheets(Ws.Name).Range("B4:B900").Find(MaRecherche)

Ensuite, je détermine la ligne de cette cellule:

 Dim therow As Integer
                     therow = o.Row

Enfin, je cherche à déterminer la valeur Quantité située à la ligne therow en colonne K:

 cell = "K" & "therow"
                     Range(cell).Value = Quantite

Cependant, à l'exécution, le dernier Range ne fonctionne pas.

Pouvez-vous m'aider svp??

Bonjour dorothee,

essaye :

Sub Essai()
  Dim MaRecherche$, celX As Range, Quantite%
  MaRecherche = form.search.Value 'repris tel quel, sera peut-être à adapter
  Set celX = Worksheets(Ws.Name).[B4:B900].Find MaRecherche, , xlValues, xlWhole
  If Not celX Is Nothing Then Quantite = Cells(celX.Row, "K")
End Sub

c'est p't'être pas exactement ça, mais ça doit s'en approcher ; j'ai pas bien compris c'qu'est ton form.search.Value (j'l'ai juste repris tel quel) ; attention : si tu veux chercher une partie d'une cellule, tu devras remplacer xlWhole par xlPart.

note bien que si la recherche n'a rien trouvé, Quantité vaut : 0

dhany

Bonjour, merci beaucoup pour ton aide. Je parviens désormais à faire tourner l'interface, mais elle me renvoie des résultats faux. Comme j'ai ajouté une nouvelle variable "Quantité" , je pense que c'est à l'affichage que ça pose des problèmes,, car je n'ai pas compris comment ça fonctionnait avec form. et result .

Sur le fichier initial, il y avait le code suivant, qui permet d'afficher d'autres paramètres.

 'Ici on remet les valeurs à 0 ou on modifie avec ce qu'on a ajouté
    form.result4 = Emplacement  'adresse'
    form.result6 = Message6    'historique d'entrée'
    form.result7 = Message7     'historique de sortie'
    form.result8 = Prix         'prix

    

J'ai décidé d'ajouter cette ligne, mais j'ai mis result3 au hasard, je ne sais pas comment l'afficher:

form.result3=Quantite

En tout cas, j'obtiens désormais des résultats incohérents...

Bonjour,

form représente probablement un objet, mais lequel ?

search un objet dépendant, mais lequel ? et quel est son type ?

De même pour les divers resultx...

Il faudrait peut-être commencer par là pour savoir sur quoi on travaille !

Cordialement.

Bonjour dorothee,

j'suis content qu't'arrives à faire tourner ton interface, mais évidemment, si ça retourne des résultats faux, c'est pas encore bon !

tu m'as toujours pas expliqué ce qu'est form ; est-ce une feuille dont le CodeName est "form" ? ou un nom défini pour autre chose tel que par exemple une forme Shape nommée "form" ? non, attends, j'crois qu'c'est plutôt l'nom d'ton UserForm !

dans c'dernier cas, tes 4 objets qui en dépendent doivent être 4 TextBox : result4 ; result6 ; result7 ; result8 ; exact ?

pour afficher par exemple le contenu d'ta TextBox nommée "result8", tu peux faire (au choix) :

1) MsgBox form.result8

2) MsgBox Me!result8 (si ce code est dans l'module du UserForm nommé "form")

3) MsgBox result8 (idem)

4) Worksheets(Ws.Name).[A1] = result8 (affectation à la cellule A1 de la feuille de nom Ws.Name)

5) [A1] = result8 (affectation à la cellule A1 de la feuille active)

dans les 5 cas, ça doit t'retourner le prix (de la variable Prix).


pour afficher le contenu d'ta variable Quantite tu peux simplement faire MsgBox Quantite

t'es pas obligée d'l'affecter à une TextBox ; ça dépend de c'que tu veux faire, à toi d'nous l'indiquer.


pour la suite, ça serait mieux avec ton fichier ! (sans données confidentielles)

dhany

Bonjour, merci beaucoup pour ces précisions, je comprends mieux!

Je joins le fichier. La macro sur laquelle je travailler est "AjouterValeur", la deuxième. Le code est 2017.

Le premier onglet permet d'effectuer une recherche, par exemple en entrant la référence 1594. Le second correspond au tableau excel.

En fait il y a encore une erreur d'exécution, à la ligne suivante, il me dit:

Loop While Not c Is Nothing And c.Address <> firstAddress And c.Offset(0, 7) <> form.result6

L'erreur est: "Variable objet ou variable bloc With non définie"

Quant à la fin du fichier, je ne suis pas sûre de ma ligne suivante rajoutée pour afficher "Quantité":

form.result3 = Quantite

Tout le reste en vert sont mes autres tentatives, je préfère les garder au cas où.

Voilà! j'ai aussi anoté les lignes que j'avais rajoutées.

désolé : j'suis pas habilité à ouvrir ton fichier :

screen

dhany

ajout : j'espère qu'Antonio PEREIRA voudra bien indiquer son mot de passe à la demoiselle en détresse dorothee !

et que dorothee pourra m'retourner son fichier non protégé par un mot de passe, pour accéder au code VBA.

dhany

Le mot de passe est 2017

d'accord, merci beaucoup !

je te retourne ton fichier Excel :

* l'image de ta 1ère feuille est vraiment superbe ! ça donne envie d'aller faire du ski !!!

j'ai enlevé les entêtes de lignes et colonnes, comme ça l'image se voit mieux !

* pour le code VBA, j'ai modifié uniquement la 2ème sub AjouterValeur()

j'ai tout ré-indenté correctement, et fait c'qu'il faut pour qu'y'ait plus ton erreur de compilation

ton instruction form.result3 = Quantite me semble ok ; à toi de tout vérifier !

merci de me donner ton avis.

dhany

Merci beaucoup! En effet l'image est plus jolie comme ça ^^

J'ai testé le fichier, il m'affiche la même erreur d'exécution que précédemment à cette ligne-là:

Loop While Not c Is Nothing And c.Address <> firstAddress And c.Offset(0, 7) <> form.result6

Erreur: "Variable objet ou variable du bloc With non définie"

Par ailleurs, quand je mets en commentaire les deux lignes suivantes:

'Set celX = Worksheets(Ws.Name).[B4:B900].Find(What:=MaRecherche, LookIn:=xlValues, LookAt:=xlWhole) 'RAJOUTE
            'If Not celX Is Nothing Then Quantite = Cells(celX.Row, "K") 'RAJOUTE

Le problème d'exécution disparaît (mais j'obtiens des résultats complètement loufoques).

donc je pense que le problème vient de là (peut-être de celX ?)

Dernier update:

J'ai finalement conservé ma première version pour déterminer la valeur du stock initiale; je n'ai pas d'erreur d'exécution, et les valeurs de l'historique d'entrée et de sortie sont correctes. En revanche, l'onglet Quantité me renvoie à la première itération le nombre Entrée ajouté, puis les itérations suivantes, il me renvoie 0...

Je joins le fichier.

Bonjour dorothee,

bravo pour avoir résolu ton erreur d'exécution !

* pour l'instant, sur la 1ère feuille "Recherche", je clique sur le gros bouton vert et le formulaire s'affiche

* mais après, que fais-tu pour aboutir à tes résultats incohérents ?

il faut que je puisse reproduire ta manip et voir les même résultats que toi pour tenter d'y remédier.


attention : sur ton formulaire "Recherche stock atelier Flaine", y'a aucun onglet "Quantité" !

je suppose que tu veux parler de la grande case verticale pour Qté.

c'est une TextBox nommée "result3", mais j'vois pas bien à quoi ça sert

d'avoir une grande case verticale juste pour saisir une quantité.

idem pour les autres grandes cases verticales ; c'est une déformation professionnelle ?

pour que les mots puissent chuter de haut en bas comme pour une descente de ski ?

(ou c'est p't'être un nouveau jeu Tetris ?)

dhany

Oui en effet ce que j'appelle Quantité correspond bien à la grande case verticale Qté.

Une fois avoir appuyé sur le gros bouton vert, l'interface apparaît. Ensuite, tu saisis une référence dans la barre de recherche "Saisir votre recherche". La liste des références se situe dans la feuille excel. Par exemple, tu saisis PF8213197 puis tu cliques sur "Rechercher". S'affichent alors la remontée correspondante, son prix, son adresse dans le magasin, Qté est la quantité stockée actuellement, historique d'entrée et de sortie sont les historiques depuis la création de l'excel (il y avait des stocks initiaux, ce qui explique pourquoi Quantité n'est pas forcément égale à Entrée-Sortie).

Ensuite, pour modifier l'inventaire, on entre dans les barres nouveau prix, nouvelle adresse, Entrée et Sortie. Puis, tu cliques sur Ajouter (tu ignores la fenêtre Quelle remontée juste appuie sur ok). Après la msgBox C'est ajouté, on remarque que les historiques, la nouvelle adresse et le nouveau prix s'actualisent directement, alors que pour avoir la quantité actualisée il faut cliquer sur Rechercher à nouveau.

Maintenant que j'ai modifié le fichier, Quantité affiche la valeur de l'entrée rentrée puis 0, bizarre ^^

Voilà j'espère avoir été assez précise

Rechercher des sujets similaires à "comment determiner valeur ligne variablee"