Fanction imputbox

Résolu
mchotard Messages postés 474 Date d'inscription   Statut Membre Dernière intervention   -  
mchotard Messages postés 474 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour
Il y a quelques années j'avais utilisé cette macro ci-dessous pour un fichier.
cela me permettait dans une longue colonne de filtrer les nom en tapant dans la box qui s'ouvrait quelques lettres suivi *
Je pensais pouvoir la recopier tout simplement dans un autre fichier. Mais il me met une erreur à la ligne : nompdt = InputBox("Quel nom ?")
Je ne sais plus comment utiliser cette fonction. Mon nouveau fichier s'appelle "liste des membres"

Sub Filtreb()

Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.AutoFilter
Range("C1").Select '
nompdt = InputBox("Quel nom ?")
'Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="=*" & nompdt & "", Operator:=xlAnd

Merci si vous pouvez m'aider.
End Sub

6 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Avec VBA, il faut éviter d'utiliser .Select et Selection, et plus généralement les objets actifs implicites :
    Option Explicit
    Sub Filtreb()
    Dim nomPdt As Variant
      With Worksheets("Feuil1")  ' adapter le nom de la feuille
        ' s'il y a déjà un filtre sur la feuille, le supprimer
        If Not .AutoFilter Is Nothing Then .AutoFilter.Range.AutoFilter
        With .Range("A1").CurrentRegion
          ' ajouter un filtre automatique sur la plage des données
          .AutoFilter
          ' demander le nom à filtrer
          nomPdt = Application.InputBox(Prompt:="Quel nom ?", Type:=2)
          If Not nomPdt = False Then
            ' filtrer la colonne 3 sur le nom saisi
            .AutoFilter Field:=3, Criteria1:="=*" & nomPdt & "*"
          End If
        End With
      End With
    End Sub


    0
  2. mchotard Messages postés 474 Date d'inscription   Statut Membre Dernière intervention   44
     
    Merci Patrice 33740
    Je viens d'essayer et cela fonctionne bien. Je suis très heureux. Que serai-je sans vous les amis du forum.
    Très cordialement
    Bonne fête de fins d'années même en cette période.
    0
  3. mchotard Messages postés 474 Date d'inscription   Statut Membre Dernière intervention   44
     
    Bonjour Patrice
    Je reviens vers toi pour cette macro qui fonctionne très bien. Je voudrais l'adapter pour faire des recherches non plus par nom, mais par N° de téléphone. Ceux ci se trouve en colonne P de mon tableau et sont au format - "spécial - numéro de téléphone". Peux-tu encore m'aider.
    Je te remercie à l'avance
    0
  4. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Le format "spécial - numéro de téléphone" ne permet pas d'effectuer de recherche de la même façon. Les numéros sont mémorisés en temps que nombre, c'est-à-dire sans espace et sans 0 devant.
    Tu dois utiliser le format texte.

    Une petite macro pour convertir tous les numéros au format texte :
    Sub convNumTel()
    ' Convertit les numéros de téléphone en chaine de caractères
    Dim c As Range
      Application.ScreenUpdating = False
      With Worksheets("Feuil1").Range("A1").CurrentRegion.Columns("P")
        .NumberFormat = "@"
        For Each c In .Cells
          c.Formula = c.Text
        Next c
      End With
    End Sub
    


    Et ensuite la macro pour rechercher :
    Option Explicit
    Sub FiltreP()
    Dim numero As Variant
      With Worksheets("Feuil1")  ' adapter le nom de la feuille
        ' s'il y a déjà un filtre sur la feuille, le supprimer
        If Not .AutoFilter Is Nothing Then .AutoFilter.Range.AutoFilter
        With .Range("A1").CurrentRegion
          ' ajouter un filtre automatique sur la plage des données
          .AutoFilter
          ' demander le numéro à filtrer
          numero = Application.InputBox(Prompt:="Quel numéro de téléphone ?", Type:=2)
          If Not numero = False Then
            ' filtrer la colonne 16 sur le numéro saisi
            .AutoFilter Field:=16, Criteria1:="=*" & numero & "*"
          End If
        End With
      End With
    End Sub

    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Et si ne veux pas saisir les espaces dans les numéros à chercher :
      Sub FiltreP()
      Dim numero As Variant, n As Variant, i As Integer
        With Worksheets("Feuil1")  ' adapter le nom de la feuille
          ' s'il y a déjà un filtre sur la feuille, le supprimer
          If Not .AutoFilter Is Nothing Then .AutoFilter.Range.AutoFilter
          With .Range("A1").CurrentRegion
            ' ajouter un filtre automatique sur la plage des données
            .AutoFilter
            ' demander le nom à filtrer
            numero = Application.InputBox(Prompt:="Quel numéro de téléphone ?", Type:=2)
            If Not numero = False Then
              If numero = Replace(numero, " ", "") Then 'espaces non saisis
                i = 2
                Do While i < Len(numero)
                  numero = Left(numero, i) & " " & Mid(numero, i + 1)
                  i = i + 3
                Loop
              End If
              ' filtrer la colonne 3 sur le numero saisi
              .AutoFilter Field:=16, Criteria1:="=*" & numero & "*"
            End If
          End With
        End With
      End Sub
      0
      1. mchotard Messages postés 474 Date d'inscription   Statut Membre Dernière intervention   44 > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
         
        A nouveau un cordial merci, je me doutais que c'était un problème de format, mais je n'arrivais pas à résoudre mon problème, c'est super sympa.
        meilleurs vœux 2021 et sans masque si possible
        A+
        0
      2. mchotard Messages postés 474 Date d'inscription   Statut Membre Dernière intervention   44 > mchotard Messages postés 474 Date d'inscription   Statut Membre Dernière intervention  
         
        Patrice,
        Je viens de mettre en place ta macro sans espace. Dans la colonne Z j'ai copier les numéro de téléphone de la colonne "P" en les mettant au format texte. Le 06 80 50 60 70 devient donc 680506070
        Quand j'utilise la macro il ne trouve aucune correspondance
        Il y a quelques choses que je loupe
        merci

        Sub FiltreSansEspace()
        Dim numero As Variant, n As Variant, i As Integer
        Sheets("Nouveau").Select
        With Worksheets("Nouveau") ' adapter le nom de la feuille
        ' s'il y a déjà un filtre sur la feuille, le supprimer
        If Not .AutoFilter Is Nothing Then .AutoFilter.Range.AutoFilter
        With .Range("Z1").CurrentRegion
        ' ajouter un filtre automatique sur la plage des données
        .AutoFilter
        ' demander le nom à filtrer
        numero = Application.InputBox(Prompt:="Quel numéro de téléphone ?", Type:=2)
        If Not numero = False Then
        If numero = Replace(numero, " ", "") Then 'espaces non saisis
        i = 2
        Do While i < Len(numero)
        numero = Left(numero, i) & " " & Mid(numero, i + 1)
        i = i + 3
        Loop
        End If
        ' filtrer la colonne 3 sur le numero saisi
        .AutoFilter Field:=26, Criteria1:="=*" & numero & "*"
        End If
        End With
        End With
        End Sub
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Re,

    « Dans la colonne Z j'ai copier les numéro de téléphone de la colonne "P" en les mettant au format texte. Le 06 80 50 60 70 devient donc 680506070 ... Il y a quelques choses que je loupe »
    Effectivement, tu loupes quelque chose, comme expliqué précédemment, les valeurs de la colonne P au format "spécial - numéro de téléphone" sont des nombres.
    Le format de cellule n'est qu'un artifice d'affichage que ne modifie pas le nombre 680506070.

    Avec Excel lorsqu'on copie / colle des valeurs, leur type est conservé, c'est-à-dire que dans ton cas, cela reste des nombres : le fait d'utiliser un autre format de cellule ne modifie pas ces valeurs (et c'est heureux comme ça). Un format de cellule n'agit que sur les nouvelles valeurs saisies (pas copiées).

    Dans une cellule au format texte, si tu saisis 06 80 50 60 70, ça reste 06 80 50 60 70.

    C'est pour cela que je t'ai fourni au post #4 une macro pour convertir les numéros de téléphone au format numérique "spécial - numéro de téléphone" en numéro de téléphone au format texte (avec les espaces et les 0 devant).
    Pour l'utiliser sur la colonne Z, il faut copie/coller les valeurs et les formats des nombres de la colonne P (et dans le code de la macro remplacer "P" par "Z").

    Je ne sais pas quelle mouche a piqué les concepteurs de chez Microsoft lorsqu'ils ont créé tous ces formats numériques spéciaux (code postal, sécurité sociale, téléphone, ...) mais c'est une énorme aberration, un leurre: par définition, numéro qui s'écrit différemment d'un nombre est un texte composé d'une série de chiffres.

    0
  7. mchotard Messages postés 474 Date d'inscription   Statut Membre Dernière intervention   44
     
    parfait, ça marche. Je suis très satisfait e ton aide.
    Merci pour ta patience
    Très cordialement
    Mchotard
    0