Visual basic (pb)

Résolu
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007 - 12 mars 2007 à 08:28
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 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.

23 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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

MPi
3
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 mars 2007 à 08:35
Salut pourquoi cells(j+1,1)? et pourquoi And TextBox1.Text <> "" mais cette condition avant au moins tu ne fais la boucle si la textbox est vide!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 mars 2007 à 08:36
TextBox1.Text = Cells(j + 1, 1).Value Sans le range c'est mieux aussi!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 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+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 mars 2007 à 09:10
j est déjà incrémenté par For ... Next

If TextBox1.Text <> ""  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:
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
12 mars 2007 à 09:13
Sinon pourquoi:

If condition Then

'Soit elle n'est pas affiché tu veux l'afficher
Form.Show

Else

'si elle est pas affichée pas besoin de la cachée, elle l'est déjà
Form.Hide

End If

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
12 mars 2007 à 09:34
RE:

Cela ne fonctionne tjr pas et quand je fais une execution pas à pas il ne rentre même pas dans la boucle for!

pourtant je met déja une valeur éxistante de la colonne A!

donc il saute la boucle for et continu l'execution!

voila a+
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
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:
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
12 mars 2007 à 09:46
Re!
Je voudrais savoir se que la condition If TextBox1.Text <> ""  exige car cela correspond a quoi TextBox1.Text??

C'est le message que l'on veu mettre dans la fenètre de message box??

ou complètement autre chose?

A+
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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

MPi
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
12 mars 2007 à 09:54
J'aurais pu ajouter
If Not Recherche Is Nothing Then  'trouvé
msgbox "Valeur trouvée en " & Recherche.Address

MPi
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
12 mars 2007 à 10:05
Bjr MPi.

ba écoute jveu bien essayer ta solution ya aucun souci!

Mais g pa tout tout saisi ta solution car tu veu ajouter koi??

Ton code final donnerais koi?Avec les deux bouts réuni?

A+
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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

MPi
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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

MPi
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 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!!

A+
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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

MPi
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 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+
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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.

Est-ce que c'est plus clair ?

MPi
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 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!
                   
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
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.

MPi
0
Rejoignez-nous