Problème avec mon code

Bonjour,

J'ai un projet à faire dans lequel il demande de comparer deux colonnes de mots, la colonne A qui contient un texte (provenant d'un fichier Word) et la colonne B qui contient une liste de mot. Pour mon programme je dois mettre dans une autre colonne (C par ex) les mots de la colonne A qui ne sont pas contenus dans la colonne B.

Il faut ensuite permettre à l'utilisateur d'entrer une valeur, si la valeur est trouvée, le programme annonce la ligne de la valeur, si la valeur n'existe pas, le programme doit placer la valeur dans la liste (colonne A).

Le problème dans le code (ci-dessous) c'est qu'il ne reconnait pas bien les valeurs qui existent déjà dans la colonne et les ajoute dans la colonne (alors que la valeur existe déjà…). Je suis novice dans la matière et j'aurais besoin de votre aide pour trouver mon erreur.

sub chercher ()

Dim pligne, dligne, ligne As Double

Dim valeurcherchee As String

pligne = 0

dligne = Cells(Rows.Count, 1).End(xlUp).Row

valeurcherchee = InputBox("valeur cherch?e")

While pligne <> dligne - 1

ligne = Int((pligne + dligne) / 2)

Range("A" & ligne).Select

If Selection = valeurcherchee Then

MsgBox ("trouvee en " + CStr(ligne))

Exit Sub

Else

If Selection > valeurcherchee Then

dligne = ligne

Else

pligne = ligne

End If

End If

Wend

If Range("A" & pligne).Value = valeurcherchee Then

MsgBox ("trouv? en " + pligne)

Else

If Range("A" & dligne).Value = valeurcherchee Then

MsgBox ("trouv? en " + dligne)

Else

'check < than first

If Range("A2").Value > valeurcherchee Then

pligne = 1

End If

' check > last

If Range("A" & dligne).Value < valeurcherchee Then

pligne = dligne

End If

'general case :insertion just after premligne

Cells(pligne + 1, 1).Select

Selection.EntireRow.Insert

Cells(pligne + 1, 1) = valeurcherchee

' MsgBox ("Non trouv?")

End If

End If

End Sub

Merci d'avance pour vos réponses!

Tiff

Bonjour

Voilà mon fichier :

8tiff-projet.xlsm (21.09 Ko)

Tiff

Dans ton code ci-dessus (qui ne figure pas dans ton fichier !), tu utilises la dichotomie

    While pligne <> dligne - 1
        ligne = Int((pligne + dligne) / 2)
        Range("A" & ligne).Select
        If Selection = valeurcherchee Then
            MsgBox ("trouvee en " + CStr(ligne))
            Exit Sub
        Else
            If Selection > valeurcherchee Then
                dligne = ligne
            Else
                pligne = ligne
            End If
        End If
    Wend

mais celle-ci ne fonctionne que si ta liste est triée !

Et en effet, après tri de la colonne A cela fonctionne !

Si tu ne peux pas faire de tri, utilise en VBA la fonction find https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.find

Merci de m'avoir répondu!

Le code ci-dessus est dans le fichier (Public Sub CommandButton3_Click() ) mais le nom des variables n'est pas le même (vrmt désolé je me suis trompée de version mais il y a que le nom qui est différent).

Oui l'idéal c'est que l'utilisateur n'ait pas à trier la colonne lui même, il faut que j'intègre un code pour le trier. En utilisant la fonction find je suppose.

Où dois-je placer la fonction find? Avant valeurcherchee = inputbox("valeur cherchée")?

Public Sub CommandButton3_Click()

Dim premligne, derligne, lireligne As Double

Dim valeurcherchee As String

premligne = 0

derligne = Cells(Rows.Count, 1).End(xlUp).Row

valeurcherchee = InputBox("valeur cherch?e")

While premligne <> derligne - 1

lireligne = Int((premligne + derligne) / 2)

Range("A" & lireligne).Select

If Selection = valeurcherchee Then

MsgBox ("trouvee en " + CStr(lireligne))

Exit Sub

Else

If Selection > valeurcherchee Then

derligne = lireligne

Else

premligne = lireligne

End If

End If

Wend

If Range("A" & premligne).Value = valeurcherchee Then

MsgBox ("trouv? en " + premligne)

Else

If Range("A" & derligne).Value = valeurcherchee Then

MsgBox ("trouv? en " + derligne)

Else

'check < than first

If Range("A2").Value > valeurcherchee Then

premligne = 1

End If

' check > last

If Range("A" & derligne).Value < valeurcherchee Then

premligne = derligne

End If

'general case :insertion just after premligne

Cells(premligne + 1, 1).Select

Selection.EntireRow.Insert

Cells(premligne + 1, 1) = valeurcherchee

' MsgBox ("Non trouv?")

End If

End If

End Sub

Utilise la balise </> qui se trouve au dessus du rectangle de réponse, sinon ton code n'est pas lisible.

Et indente le. Ou alors donne le fichier avec ce bout de code.

Du reste, je ne vois pas ce qui a de changé.

Compte tenu de ton pseudo, je t'ai donné le lien vers le mode d'emploi.

Public Sub CommandButton3_Click()
Dim colonne1 As Range, trouve As Range, valeurcherchee As String
 valeurcherchee = InputBox("valeur cherchée")

 Set colonne1 = Range(("A1"), Range("A1").End(xlDown))
 Set trouve = colonne1.Find(valeurcherchee)
 If trouve Is Nothing Then
    MsgBox "pas trouvé !"
 Else
    trouve.Select
 End If

Me.Hide

End Sub
2tiff-projet-1.xlsm (23.25 Ko)

Bonjour,

J'ai ajouté dans mon ancien code :

Columns("A:A").Select

Selection.Sort key1:=Range("A1")

pour trier le texte et mon code fonctionne bien avec

Je viens d'essayer ton programme et il marche niquel, il est même beaucoup moins compliqué que l'original! Merci beaucoup de m'avoir aidé!!

Tiff

Rechercher des sujets similaires à "probleme mon code"