Recherche + fonction transfert

Bonjour le forum,

Dans mon fichier j'effectue une recherche dans ma feuille liste à partir de la feuille départ.

Ma recherche fonctionne bien, mais je voudrais l'améliorer.

Exemple : Si je recherche Echelles J'aimerais que dans ma recherche ont m'indique dans quelle zone se trouve mes échelles dans cette forme

Echelles (PARIS ZONE NORD)

Idem pour tous les autres outils.

Mais attention j'effectue des transferts d'outils.

Si je transfert Echelles de PARIS ZONE NORD à PARIS ZONE EST

je dois retrouver dans ma recherche Echelles (PARIS ZONE EST)

Merci de votre aide

Bonne journée à tous

Bonjour,

Voir la ligne indiquée ' < modif ici...

ATTENTION : la listbox de ton exemple n'est pas multicolonne > voir sa propriété ... ColumnCount

Private Sub TextBox1_Change()
ActiveSheet.Unprotect
  Dim R As Range
  With ListBox1
    .Clear
    If TextBox1 = "" Then Exit Sub
    'For Each R In Cells.SpecialCells(xlCellTypeConstants)
   For Each R In Feuil1.Range("B4:IP43")
      If R Like "*" & TextBox1 & "*" Then
       .AddItem R
       .List(.ListCount - 1, 1) = Feuil1.Cells(2, R.Offset(0, -1).Column) ' < modif ici...
      End If
    Next
    If .ListCount = 0 Then
      MsgBox "Aucun article trouvé !!!", vbInformation, "La saisie va être réactualisée..."
      TextBox1 = ""
    End If
  End With
ActiveSheet.Unprotect
End Sub

ric

Bonjour ric,

Merci pour le code.

Mais à la fermeture de l'USF j'ai un message d'erreur.

capture 1

en jaune :

Range(.List(i, 2)).Select
Private Sub CommandButton1_Click()
ActiveSheet.Unprotect
  Dim i As Byte
  With ListBox1
    If .ListCount > 0 Then
      For i = 0 To .ListCount - 1
        If .Selected(i) = True Then Range(.List(i, 2)).Select: Exit For
      Next
    End If
  End With
  Unload Me
ActiveSheet.Unprotect
End Sub

Peu tu m'expliquer comme tu fait pour retrouver les zones

merci

Bonjour,

Comment faire pour retrouver les zones.

   For Each R In Feuil1.Range("B4:IP43")
      If R Like "*" & TextBox1 & "*" Then
       .AddItem R
       .List(.ListCount - 1, 1) = Feuil1.Cells(2, R.Offset(0, -1).Column) ' < modif ici...
      End If
    Next

R trouve une cellule contenant le résultat de la recherche > R.Address donnera l'adresse de la cellule.

Les cellules trouvées sont toujours 1 colonne plus à droite que le début de la plage fusionnée de la Zone > les plages fusionnées des "Zone" sont sur la ligne 2.

Donc, Feuil1.Cells(2,R.Offset(0,-1).Column) veut dire >

La feuille > la cellule de la feuille (Cells) = ligne 2 , et colonne ( R.column ) avec un décalage (offset) de 0 ligne et 1 colonne à gauche ( -1 ) >> ce qui donne le début de la zone.

Pour ton erreur 1004 > c'est le code qui est erroné. Vite de même, je n'ai pas la solution pour sélectionner la cellules de l'élément sélectionné dans la listbox.

Je tricote quelque chose et te revient.

ric

Re,

Merci pour tes explications, elles sont superbes.

Je comprends mieux

Merci de ton aide

Bonjour,

En fait le code Private Sub CommandButton1_Click() est bon > moins que la feuille où range devait référer n'était pas mentionnée.

2e point > pour que Feuil1.Range(.List(i, 2)).Select fonctionne > j'ai ajouté une 3e colonne au listbox > colonne qui donne l'adresse de l'item trouvé lors de la recherche.

Cette 3e colonne peut être masquée en réduisant la largeur de la fenêtre de la listbox > ou affichée ... c'est au goût ...

Private Sub TextBox1_Change()
ActiveSheet.Unprotect
  Dim R As Range
  With ListBox1
    .Clear
    If TextBox1 = "" Then Exit Sub
    'For Each R In Cells.SpecialCells(xlCellTypeConstants)
   For Each R In Feuil1.Range("B4:IP43")
      If R Like "*" & TextBox1 & "*" Then
       .AddItem R
       .List(.ListCount - 1, 1) = Feuil1.Cells(2, R.Offset(0, -1).Column) ' < modif ici...
       .List(.ListCount - 1, 2) = R.Address                               ' < modif ici...
      End If
    Next
    If .ListCount = 0 Then
      MsgBox "Aucun article trouvé !!!", vbInformation, "La saisie va être réactualisée..."
      TextBox1 = ""
    End If
  End With
ActiveSheet.Unprotect
End Sub

Private Sub CommandButton1_Click()
ActiveSheet.Unprotect
  Dim i As Byte
  With ListBox1
    If .ListCount > 0 Then
      For i = 0 To .ListCount - 1
        If .Selected(i) = True Then Feuil1.Range(.List(i, 2)).Select: Exit For ' < modif ici
      Next
    End If
  End With
  Unload Me
ActiveSheet.Unprotect
End Sub

ric

Re,

Super ric, tu es formidable

Une nouvelle fois tu m'as bien aidé.

Une dernière petite question peut être que tu aurais une solution.

J'ai beaucoup de USF qui atterrisse à peu près tous sur la feuille liste

et une fois que je retourne sur la feuille liste il met impossible d'y inscrire mots ou chiffres.

Je suis obligé de passer par la barre de formule pour écrire et après tout va bien

Balance58

Bonjour,

N'y aurait-il pas un Userform que reste ouvert en arrière plan en mode "ShowModal = False" ( une propriété du Userform) ?

ric

Re,

tu as tout à fait raison c'est bien ça.

Je doit bien en avoir 2 ou 3

Le code pour tout fermer est bien Unload Me

Bonjour,

C'est la seule manière que je connaisse pour fermer un userform. Chacun doit être fermé indépendamment.

ric

Bonsoir le forum,

Bonsoir ric,

Merci pour ton aide et tes conseils.

Bonne soirée et bon week-end à toi et au forum.

Balance58

Rechercher des sujets similaires à "recherche fonction transfert"