steven_tpnd
Messages postés34Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention23 mars 2007
-
12 mars 2007 à 08:28
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
15 mars 2007 à 10:58
Bonjour à toutes et a tous!
Voila je vous explique mon souci : Je veux ajouter dans mon programme un code permettant de me prévenir par un message box s'il existe 2 fois le même numéros de fiche dans une colonne!
moi g mis ceci mais il ne se passe rien :
For j = 1 To nbcolonne
If TextBox1.Text = Range("A13").Cells(j + 1, 1).Value And TextBox1.Text <> "" Then
MsgBox "code deja existant", , ["Erreur code"]
Alim.Show
Else
Alim.Hide
End If
Next
Donc comme je débute sous visual basic je me demandais si quelqu'un pouvais m'aider!
Voila a+ et merci d'avance.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 14 mars 2007 à 16:01
Ce serait donc quelque chose comme ceci
Dim Recherche as Range
'vérifier si Textbox1 est vide
If Textbox1 = "" then Exit sub ' on sort si le textbox est vide ... à toi de voir
'Recherche dans la première feuille la valeur de textbox1
Set Recherche = Sheets("suivi alim").Columns("A:A").Find(Textbox1.Text)
If Not Recherche Is Nothing Then ' trouvé
msgbox "Le code a été trouvé à cette adresse: " & recherche.address
' ...............................
Else
' l'item n'a pas été trouvé et la recherche se fera sur la feuille suivante
Set Recherche = Sheets("suivi moyens électriques").Columns("A:A").Find(Textbox1.Text)
If Not Recherche Is Nothing Then ' trouvé
msgbox "Le code a été trouvé à cette adresse: " & recherche.address
Else
' l'item n'a pas été trouvé et la recherche se fera sur la feuille suivante
Set Recherche = Sheets("suivi moyens mécaniques").Columns("A:A").Find(Textbox1.Text)
If Not Recherche Is Nothing Then ' trouvé
msgbox "Le code a été trouvé à cette adresse: " & recherche.address
Else
'Le code n'existe pas
End If ' Fin 3e IF
End If 'Fin 2e IF
End if 'Fin 1er IF
steven_tpnd
Messages postés34Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention23 mars 2007 12 mars 2007 à 09:01
Slt!
g fait les modif ktu ma di donc le code me donne ceci :
For j = 1 To nbcolonne
If TextBox1.Text <> "" And TextBox1.Text = Cells(j + 1, 1).Value Then
MsgBox "code deja existant", ["Erreur code"]
Alim.Show
Else
Alim.Hide
End If
Next
mais le souci c'est que je ne sait pas si j'utilise ce code correctement!
Pour cells(j+1, 1) ce n'est pas pour incrémenter dans chaque cellule de la colonne??
Et pour l'autre c'est car je veu qu'une petite fenêtre s'ouvre avec un message box si le code existe déja afin de me prévenir!
Mais je ne sait pa tro si c la bonne méthode car sa fè 1 semaine que jme met à visual basic!jdébute é c cho par moment!
Voila A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 12 mars 2007 à 09:41
Tu as une valeur dans la textbox?
If IsEmpty(TextBox1.Value) = False Then
For j = 1 To nbcolonne
If TextBox1.Text = Cells(j , 1).Value Then
MsgBox "code deja existant", ["Erreur code"]
Alim.Show
Else
Alim.Hide
End If
Next
End If
Drikce 06
Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 12 mars 2007 à 09:53
Essaie avec Find
Dim Recherche as Range
If Textbox1 = "" then Exit sub ' on sort si le textbox est vide ... à toi de voir
'Recherche dans la colonne A
Set Recherche = Activesheet.Columns("A:A").Find(Textbox1.Text)
If Not Recherche Is Nothing Then 'trouvé
Alim.SHow
Else
' inexistant
Alim.Hide
End if
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 12 mars 2007 à 22:55
Ben j'ai pas très bien compris ton idée non plus...
On est donc deux
D'après ce que je peux voir de ton code, tu veux entrer un item, disons, mais tu veux vérifier si cet item inscrit dans Textbox1 existe déjà, c'est bien ça ?
Dim Recherche as Range
'vérifier si Textbox1 est vide
If Textbox1 = "" then Exit sub ' on sort si le textbox est vide ... à toi de voir
'Recherche dans la colonne A la valeur de textbox1
Set Recherche = Activesheet.Columns("A:A").Find(Textbox1.Text)
If Not Recherche Is Nothing Then ' trouvé
msgbox "Le code a été trouvé à cette adresse: " & recherche.address
' et là tu fais ce que tu veux si l'item est déjà là
Else
' l'item n'a pas été trouvé et tu sais mieux que moi quoi faire
End if
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 12 mars 2007 à 23:02
Ceci étant dit, si ton problème est de trouver des doublons dans une liste,
le mieux est de trier la liste sur la colonne contenant une valeur unique ou supposée unique
Une fois la liste triée, tu boucles à partir de la fin et tu remontes (si tu veux éliminer des lignes)
Si tu ne veux pas éliminer de lignes , tu pars dans le sens que tu veux
exemple pour trouver des doublons dans la colonne A, après tri
For i = nbLignes to 2 step - 1
If range("A" & i ) = Range("A" & i - 1) then
' il y a doublon aux lignes i et i-1
end if
steven_tpnd
Messages postés34Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention23 mars 2007 13 mars 2007 à 10:36
Bjr MPi
Ben en faite se que je recherche c'est de voir si dans la colonne A il existe déja le numéro de fiche que je rentre dans la cellule A13!
Le code que tu m'as donné est très bien et cela marche mais seuleument pour la feuille nommé "suivi alim" et moi je voudrais étendre se code à 2 autres feuilles "suivi moyens mécaniques" et "suivi moyens électriques" et dans la même colonne A afin de voir si il n'y a pas 2 fois le même numéro de fiche dans les 3 feuilles différentes.
Donc ba j'espère que je suis clair dans mais explication et ktu vas mieu comprendre se que je recheche!!
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 13 mars 2007 à 10:40
Concernant le bout de code que tu as mis en début de message:
If TextBox1.Text = Range("A13").Cells(j + 1, 1).Value
Tu dois modifier ceci (Range("A13").Cells(j + 1, 1))
par
Range("A13"). Offset (j + 1, 0)
ou
Cells(j + 1, 0) ' sachant que J > = 13
Le zéro est pour demeurer dans la colonne A
Si tu mets 1, la lecture se fera dans la colonne B
Avec des formules Excel (sur une feuille), c'est un peu différent, puisque 1 est l'index de la ligne ou de la colonne où on se trouve... mais en VBA, c'est 0
steven_tpnd
Messages postés34Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention23 mars 2007 13 mars 2007 à 10:50
Ba moi g changé totalement le code du début car g pri ta solution avec FIND!!
Maintenant g cela :
Dim Recherche As Range
If TextBox1 = "" Then Exit Sub 'on sort si le textbox est vide
'Recherche dans la colonne A
Set Recherche = ActiveSheet.Columns("A:A").Find(TextBox1.Text)
If Not Recherche Is Nothing Then
'trouvé
MsgBox "Fiche de vie déja utilisée" & Recherche.Address
Else
'inexistant
MsgBox "Fiche de vie non utilisée"
End If
Mais je veux que se code se fasse dans "suivi alim" colonne A et aussi dans "suivi moyens mécaniques" colonne A et "suivi moyens électriques" colonne A!
Voila A+
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 13 mars 2007 à 23:22
Tu n'as plus qu'à changer Activesheet par le nom de la feuille où tu veux faire la recherche
Set Recherche = Sheets("suivi alim").Columns("A:A").Find(TextBox1.Text)
et tu refais une autre recherche avec le nom d'une autre feuille, et ainsi de suite.
ou bien, avant de faire la recherche, tu actives la feuille - Sheets("suivi alim").Activate - dans laquelle tu fais la recherche et tu continues d'utiliser ActiveSheet...
et si ta recherche doit se faire dans une autre colonne, change Columns("A:A") pour celle où la recherche doit être faite.
steven_tpnd
Messages postés34Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention23 mars 2007 14 mars 2007 à 08:05
Re.
Oui c très clair mais j'ai toujours un souci car je recherche dans trois feuilles différentes et mon programme marche bien pour 2 mais pas les trois c'est bizarre!!
Mon code est le suivant :
Dim Recherche As Range
If TextBox1 = "" Then Exit Sub 'on sort si le textbox est vide
'Recherche dans la colonne A :
Set Recherche = Sheets("suivi alim").Columns("A:A").Find(TextBox1.Text)
Set Recherche = Sheets("suivi moyens électriques").Columns("A:A").Find(TextBox1.Text)
Set Recherche = Sheets("suivi moyens mécaniques").Columns("A:A").Find(TextBox1.Text)
If Not Recherche Is Nothing Then
'trouvé :
MsgBox "Fiche de vie déja utilisée" & Recherche.Address
Else ........
Il marche pour "suivi alim" et "suivi moyens mécaniques" mais pour la suivante donc "suivi moyens électriques" il ne trouve pas et fait l'instruction comme si il ne trouvait pas de fiche de vie éxistante!
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 14 mars 2007 à 13:34
Non, non, non
Ce que je t'expliquais, c'est de faire une recherche "complète" sur sur une feuille, ensuite faire une autre recherche sur une autre feuille....
Explique plus précisément la raison de ces 3 recherches.
Est-ce que tu cherches à savoir si la valeur de textbox1 se trouve dans une des trois feuilles ou dans chacune des trois feuilles ... ?
Dans un ou l'autre des cas, explique ce que tu dois faire si la valeur est trouvée et/ou non trouvée.
La façon dont tu procèdes ne fonctionnera que sur la dernière feuille (suivi moyens mécaniques)
En faisant:
set recherche = ... recherche de feuille 1
set recherche = ... écrase la première recherche
set recherche = ... écrase la deuxième recherche
If Not recherche is nothing <= ici recherche ne concerne que le dernier appel
Tu dois soit mettre des else si la recherche ne trouve rien ou stocker des valeurs Vrai/Faux si la recherche est fructueuse, selon le cas. Et c'est pourquoi je demande plus de précisions sur tes besoins.