Chercher une valeur dans un tableau dynamique

Bonjour le forum,

J'ai un problème que je n'arrive pas à résoudre pour la recherche de valeur dans un tableau dynamique.

Mon fichier est ici :

23gestion-stock.xlsm (98.44 Ko)

Mon problème est dans le code du formulaire UserFormConfFle. Lorsque je clic sur le bouton valider le flexible une ligne se créer dans la feuille "flexible" et mon second bur est de mettre à jour les stocks avec cette confirmation. Pour la mise a jour du stock des raccords, je reçois erreur 91, variable objet ou variable de bloc with non définie et je ne comprend pas pourquoi...

D'après le mode pas à pas c'est cette ligne qui poserait problème :

refr1 = raccord.Columns(B).Find(bds.Range("A18"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows).Row

Je commence seulement le vba donc il y a surement qqch que j'utilise mal puisque la source est un tableau...

Et voici le code complet :

Private Sub cmdconffle_Click()
finf = Sheets("flexible").Range("A" & Rows.Count).End(xlUp).Row
Dim bds As Worksheet
Dim tuyau As Worksheet
Dim raccord As Worksheet
Dim douille As Worksheet
Set tuyau = Sheets("tuyau")
Set douille = Sheets("douille")
Set raccort = Sheets("raccord")
Set bds = Sheets("Bon de sortie")
fint = tuyau.Range("A" & Rows.Count).End(xlUp).Row
'finr = raccord.Range("A" & Rows.Count).End(xlUp).Row
Find = douille.Range("A" & Rows.Count).End(xlUp).Row
With Sheets("flexible")
    .Range("A" & finf + 1) = finf
    .Range("B" & finf + 1) = Date
    .Range("C" & finf + 1) = bds.Range("B1")
    .Range("D" & finf + 1) = bds.Range("B2")
    .Range("E" & finf + 1) = "fabriquant"
    .Range("F" & finf + 1) = bds.Range("B5")
    .Range("G" & finf + 1) = bds.Range("B6")
    .Range("H" & finf + 1) = bds.Range("B7")
    .Range("I" & finf + 1) = bds.Range("B13")
    .Range("J" & finf + 1) = bds.Range("A13")
    .Range("K" & finf + 1) = bds.Range("A24")
    .Range("L" & finf + 1) = bds.Range("A18")
    If bds.Range("A19") = "" Then
    .Range("M" & finf + 1) = bds.Range("A18")
    Else: .Range("M" & finf + 1) = bds.Range("A19")
    End If
    .Range("N" & finf + 1) = "En attente Facturation"
End With

reft = tuyau.Range("E2:E" & fint).Find(bds.Range("A13"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows).Row
tuyau.Range("F" & reft) = tuyau.Range("F" & reft) - bds.Range("B13")
refd = douille.Range("A2:E" & Find).Find(bds.Range("A24"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows).Row
douille.Range("G" & refd) = douille.Range("G" & refd) - bds.Range("B24")
refr1 = raccord.Columns(B).Find(bds.Range("A18"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows).Row
raccord.Range("L" & refr1) = raccord.Range("L" & finr1) - bds.Range("A18")
If bds.Range("A19") <> "" Then
    refr2 = raccord.Columns(B).Find(bds.Range("A19"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows).Row
    raccord.Range("L" & refr2) = raccord.Range("L" & finr2) - bds.Range("A19")
End If

Unload UserFormConfFle
End Sub

J'ai vraiment besoin d'utiliser un tableau, cela me permet de faire des recherches rapides en utilisant les filtres. Mon tableau représente un stock et sera à s'allonger dans le temps donc j'aimerais utiliser une fonction qui tienne compte de ca...

qqun aurait il une idée ou la bonne ligne de code pour que je puisse continuer à avancer svp ?

Merci d'avance !

bonjour,

la colonne B n'existe pas !

C'est :

.Columns(2)...

A+

Bonjour Galopin01,

L'instruction columns(2) ne fonctionne pas non plus...

L'erreur tombe toujours sur cette ligne...

refr1 = raccord.Columns(2).Find(bds.Range("A18"), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows).Row

Et je ne trouve pas dans le cours vba ce qui pourrait m'aider...

Merci d'avance pour l'aide !

Bonjour,

refr1 = raccord.Columns("B").Find(bds.Range("A18"), ,xlValues, xlWhole).Row

Cette ligne fonctionne parfaitement (à condition de remplacer B par "B" ou 2 !).

En l'absence de valeur en A18 elle renvoie 301, ligne de la première cellule vide en B.

Il y aura certes une erreur si la valeur en A18 n'est pas trouvée !

NB- Tes "cours VBA" ne semblent pas t'avoir appris qu'une telle utilisation de Find ne te permet pas de contrôler le risque d'erreur inhérent... De même, qu'il ne t'ont pas appris, à avoir une écriture plus simple en passant les arguments par position ou en laissant de côté les paramètres inutiles, à indenter ton code, ou à éviter les énumérations de cellules qui se suivent en utilisant une boucle... Et je laisse de côté l'utilisation de Userforms !

Enfin ! si c'est pas beau à voir, ça fonctionne quand même...

Avez vous donc une idée pourquoi j'obtient cette erreur svp ?

capture

Et concernant les cours de vba, je suis désolé de ne pas encore écrire des codes propres... J'ai commencé le vba il y a 3 semaines en utilisant presque exclusivement les cours Excel-Pratique qui sont bien très simple à comprendre mais qui ne peuvent pas nous donner tout ce que tout le monde à besoin !

J'apprend aussi en consultant les précédents topic et en posant des questions...

Je sais que vous passez beaucoup de temps pour nous aider et je vous remercie !

J'apprécie toujours que quelqu'un essaie de faire mieux...

Sur quelle ligne l'erreur 91 ?

Le but est d'apprendre il faut donc chercher seul avant de demander sinon c'est la facilité !

Justement elle intervient toujours sur la ligne que j'ai m'entionné, même après avoir remplacé le B par un 2...

C'est pour ca que je ne comprend pas l'erreur....

Au besoin mon fichier est dans le premier message !

Merci d'avance

Set raccort = Sheets("raccord")

Tu corriges la ligne ci-dessus à l'origine de l'erreur...

Ta feuille n'étant pas définie, l'erreur 91 est normale !

Cordialement.

Ca marche enfin merci !!

Pour une faute d'orthographe... ^^

vous auriez une idée d'un code qui désactiverai les filtres que l'on a appliqué sur un tableau svp ?

En fait ce qui ce passe c'est que si j'ai appliqué un filtre qui fait disparaitre les valeur que je cherche je recois une erreur...

Merci d'avance !!

j'ai pu trouver par moi même avec ce code

ActiveSheet.ShowAllData

Merci pour votre aide et peut être à bientôt

Tu n'as pas cherché jusqu'au bout (et tu n'as pas testé !)

Si tu te contentes de ça, tu auras une erreur s'il n'y a pas de filtre actif.

Merci de m'avoir prévenu !

Est ce qu'une comparaison avec le nombre maximum de ligne du tableau peut être suffisante ?

Le nombre de lignes ? C'est beaucoup plus aléatoire...

Il faut simplement tester si la feuille est en AutoFilterMode, et si elle l'est tester si elle est en FilterMode, et si oui tu peux lancer ShowAllData.

Rechercher des sujets similaires à "chercher valeur tableau dynamique"