userform VB

  • Initiateur de la discussion Cass
  • Date de début
C

Cass

Guest
Bonjour le forum,

J'ai un petit probleme j'ai unseform avec lequel je crée de nouveau produit dans une feuille excel, comment pourrais je faire pour ne pas créer 2 fois la meme réference ?

Merci d'avance

@+++
 
A

Arnaud

Guest
salut,
tu peux utiliser la fonction de recherche d'excel pour rechercher si ton produit existe déja.

exemple avec comme nom de produit : "MonProduit"

dim trouve As Variant

Set trouve = Cells.Find(What:="MonProduit", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate

If Not trouve Is Nothing Then Msgbox "produit déja existant":exit sub


A toi d'adapter aux mieux dans ta macro.
bonne chance.
 
A

Arnaud

Guest
en fait, quand tu récupère la valeur saisie comme nom de nouveau produit, tu la place dans une variable que l'on va appeller Buffer. Ensuite tu utilise la fonction de recherche sur ton classeur en cherchant ce produit.
Si la fonction de recherche te retourne quelque chose, la variable trouve ne sera pas vide donc le produit existe déja.

Dim trouve As Variant
Dim Buffer as String

Buffer = "MonProduit" ' ici tu remplace par la valeur que tu récupère a partir de ta Form

Set trouve = Cells.Find(What:=Buffer , After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate

'si trouve n'est pas vide c que le produit existe déja.
If Not trouve Is Nothing Then Msgbox "produit déja existant":exit sub
 
C

Cass

Guest
Re Arnaud,

Est ce que je pourrais t'envoyer mon fichier excel pour que tu regarde un petit coup ?

@+++

Le petit probleme est que je ne peux pas le mettre sur le forum car il fait plus de 50 Ko :(
 
@

@+Thierry

Guest
Bonjour Cass, Re Bonjour Arnaud, le Forum

Si Cass souhaite un exemple d'appli avec suppression/detection de doublon basée (entre autres) sur Find il peut regarder cette démo toute récente :

Fichier téléchargeable => Lien supprimé (36ko)

Fil de Discussion => Lien supprimé (28-02-04 20:45)

Bon Travail et bonne découverte
@+Thierry
 
L

LaurentTBT

Guest
Bonsoir à tous.

Pour l'erreur, cela vient peut-être d'une p'tite erreur de syntaxe d'Arnaud:
Set trouve=cells.find... permet de remplir la variable Objet Trouve par la cellule trouvée par la méthode Find (et donc éventuellement lui assigner la valeur nothing si la recherche ne trouve rien.
Il faut donc définir Trouve comme variable objet, soit par
Dim Trouve as Object (au lieu de variant), ou ici plus précisément par
Dim Trouve as Range (car on sait que cette objet sera une cellule)

D'autre part, à la fin de la méthode Find, on obtient une cellule, il ne faut donc pas l'activer. En fait, la ligne de code d'Arnaud reviendrait à dire: Rentre en variable Trouve la cellule trouvée par la méthode de recherche et active là, mais c'est trop demander: on ne peut pas faire les 2 à la fois.

Il faut donc simplement supprimer le .Activate qu est en trop.

Voilà, bonne soirée.
 
L

LaurentTBT

Guest
J'ai bien reçu le fichier.

Le revoici, avec les données et les couleurs en moins, et là, ça fait tout juste moins de 50k zippé et ça doit passer

Pour le problème de doublons de référence, c'est réglé. Ce que l'on cherche dans les références existantes, c'est le contenu de ta TextBox nommé Refer. Ceci en VBA ne se traduit pas par "Refer", mes par Refer.Value, ou encore Refer tout court (Value étant la propriété par défaut d'une Textbox qui peut être omise). Il y avait les guillemets en trop.

Ensuite, un petit piège dans la méthode Find, c'était XlPart à remplacer par XlWhole:
Imaginons que tu entres un nouvelle référence 10. Si tu as un produit déjà rentré qui a pour référence 100, Excel va trouver 10 (dans la chaîne 100, il y a 10). Si tu mets XlWhole, il ne prendra pas en compte ce résultat. La recherche ne sera concluante que si elle correspond au contenu complet de la cellule.

Dernier détail important, il faut limiter la recherche à ta colonne de références, car si tu entres une référence 200, et que tu as un produit déjà enregistré dont la quantité est 200, alors la recherche aboutira et considérera qu'il y a un doublon!
Pour cela, remplace Cell.Find par Columns(3).Find...


Pour ta dernière question dans ma BAL,
"J'ai également un autre probleme, j'aurais bien que quand je
valide ma feuille facturation les quantités facturés soient
déduite directement des stocks ?"
Je n'ai pas trop le temps maintenant. J'essayerai de voir cela plus tard. Mais c'est bien sûr faisable.

@+
 

Pièces jointes

  • facturation8b.zip
    49.3 KB · Affichages: 57
C

cass

Guest
RE Laurent, Arnaud et le forum,

Merci beaucoup pour votre aide, c vraiment sympa.
Je viens de relire ma seconde question que je t'ai mis dans ta boite, ça me surprend presque que tu l'ai compris vu comme je l'ai ecrit ;). Se serait génial si tu pouvait me filer un coup de main sur mon pb.
Merci encore
@+++

Olivier
 
@

@+Thierry

Guest
Re Cass, Laurent, Arnaud, Le Forum


Pour le deduction des Stock regarde cette démo et le fil explicatif çà devrait te donner des bases :

=> Fichier Téléchargeable Lien supprimé

=> Fil Explicatif Lien supprimé

Bonne Soirée
@+Thierry
 
@

@+Thierry

Guest
PS j'imagine que Cass est sous Office XP (2002 ou 2003) ? comme Laurent

Car ici sous 2000 :

Le Sort avec :
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal

Plante... (on est de plus en plus dans la mouise avec toutes ces différences de versions !!)

Bon à savoir !!
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 354
Messages
2 087 548
Membres
103 586
dernier inscrit
julie30620