IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ligne de commande avec critère [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Par défaut Ligne de commande avec critère
    Bonjour,

    Dans mon code j'ai l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveSheet.Range("$A$1:$AY$" & derniere_ligne).AutoFilter Field:=22, Criteria1:= _
            "=**Report**", Operator:=xlAnd
    Je souhaiterais que le critère se situe dans la cellule A1 (par exemple), c'est à dire mettre dans la cellule A1 "*Report*" ou tout autre texte. Quelle est la syntaxe à adopter dans la ligne de commande SVP ?

    Merci par avance.

    Cdlt.
    Jérôme.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("$A$1:$AY$" & derniere_ligne).AutoFilter Field:=22, Criteria1:="=" & Range("A1"), Operator:=xlAnd

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Par défaut
    Merci Menhir !!

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Par défaut
    (Re)bonjour,

    J'ai rajouté également un Range pour la partie "Autofilter" et j' ai un message d'erreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("$A$1:$AY$" & derniere_ligne).AutoFilter Field:="=" & Range("D10"), Criteria1:="=" & Range("C12"), Operator:=xlAnd

    Message d'erreur :

    Nom : Capture.JPG
Affichages : 327
Taille : 10,8 Ko

    En D10 j'ai une valeur comprise entre 1 et 51 issue d'une liste de validation.

    Cdlt.
    Jérôme.

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Regarde cette option dans ta version de base et dans celle que tu as transformé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Field:="=" & Range("D10")
    Il n'y a pas un truc qui gêne ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Par défaut
    Euuhhhh....

    Peut-être ?? :


  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    bonjour
    Citation Envoyé par licpegpon Voir le message
    Bonjour,

    Dans mon code j'ai l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveSheet.Range("$A$1:$AY$" & derniere_ligne).AutoFilter Field:=22, Criteria1:= _
            "=**Report**", Operator:=xlAnd
    Je souhaiterais que le critère se situe dans la cellule A1 (par exemple), c'est à dire mettre dans la cellule A1 "*Report*" ou tout autre texte. Quelle est la syntaxe à adopter dans la ligne de commande SVP ?

    Merci par avance.

    Cdlt.
    Jérôme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With ActiveSheet
        With .Range("$A$1:$AY$" & derniere_ligne)
            .AutoFilter Field:=22, Criteria1:="=*" & .Range("A1").Value & "*"
            MsgBox .SpecialCells(xlVisible).Address
        End With
    End With
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Par défaut
    Bonjour Patrick Toulon,

    Sur tes conseils j'ai utilisé l'enregistreur de macro pour générer le code. Effectivement c'est beaucoup plus simple.

    J'en ai profité pour rajouter une variable à Autofilter (toto) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    toto = Range("D10").Value
     
    ActiveSheet.Range("$A$1:$AY$" & derniere_ligne).AutoFilter Field:=toto, Criteria1:="=" & Range("C12"), Operator:=xlAnd
    J'ai déclaré toto comme entier. Voici la procédure complète ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    Sub Extract()
    '
    Dim derniere_ligne As Long
    Dim i As Long
    Dim Dossier_racine As String
    Dim Tab() As Variant
    Dim toto As Integer
    '
    '
    If MsgBox("Has the data base already been cleaned ?", vbYesNo, "Confirmation Request") = vbNo Then
     
    'MsgBox ("On est dans le cas : La base n'a pas encore été nettoyée")
    'Saisie du dossier racine (valeur par défaut "P:\EXPORT\TEMP"
    Dossier_racine = InputBox("Select the folder where the initial database is located", "Data base folder", "P:\EXPORT\TEMP")
    '
    MsgBox ("WARNING : The cleaning of the file will start" & Chr(10) & Chr(10) & "Thank you for waiting")
    '
    '------ ON OUVRE LE FICHIER "schema.xml_temporary.xlsx" ET ON VA DANS L'ONGLET "schema.xml_temporary" ------
    '
    Workbooks.Open Filename:=Dossier_racine & "\" & "schema.xml_temporary.xlsx"
    Sheets("schema.xml_temporary").Activate
    '
    'Recherche du numéro de la dernière ligne
    '
    derniere_ligne = Range("A" & Rows.Count).End(xlUp).Row
    '
    'Suppression des formules éventuelles contenues dans ce fichier (on remplace les "=" par des "-")
    '
    Range("A2:AY" & derniere_ligne).Select
        Selection.Replace What:="=", Replacement:="-", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    '
    Range("A2").Select
    '
    MsgBox ("The Data base has been cleaned" & Chr(10) & Chr(10) & "WARNING : The initial file will be updated !!")
    '
    'Enregistrement de la data base (ATTENTION : l'ancienne version est écrasée)
    '
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:="schema.xml_temporary.xlsx"
    Application.DisplayAlerts = True 'Remettre absolument ensuite
     
    MsgBox ("The Data base has been cleaned and saved (overwritten file)" & Chr(10) & Chr(10) & "Data extraction will begin")
     
    Else
     
    Dossier_racine = InputBox("Select the folder where the database is located", "Data base folder", "P:\EXPORT\TEMP")
    Workbooks.Open Filename:=Dossier_racine & "\" & "schema.xml_temporary.xlsx"
    Sheets("schema.xml_temporary").Activate
    derniere_ligne = Range("A" & Rows.Count).End(xlUp).Row
    MsgBox ("Data extraction will begin")
     
    End If
     
    'Extraction des données
    '
    'Mise en place des filtres dans le fichier nettoyé "schema.xml_temporary.xlsx"
    Range("A1:AY1").Select
    Selection.AutoFilter
    '
    'Critères de tri
    '
    toto = Range("D10").Value
     
    ActiveSheet.Range("$A$1:$AY$" & derniere_ligne).AutoFilter Field:=toto, Criteria1:="=" & Range("C12"), Operator:=xlAnd
     
    Range("A1").Select
    '
    MsgBox ("Data extraction completed")
    '
    Call SaveFile
    '
    End Sub
     
     
    Sub SaveFile()
      Dim Filename As String
     
      If MsgBox("Do you want to save 'schema.xml_temporary.xlsx' on your local drive ?", vbQuestion + vbYesNo, "Confirmation Request") = vbYes Then
        Filename = "schema.xml_temporary_" & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss") & ".xlsx"
        With Application.FileDialog(msoFileDialogSaveAs)
          .Title = "Save File as"
          .InitialFileName = Filename
          .FilterIndex = 1 ' 1 = xlsx, 2 = xlsm, 3 = xlsb
          .Show
          .Execute
        End With
      End If
    End Sub
    Lorsque j'exécute la procédure j'ai une erreur d'execution de type '13' : incompatibilité de type....

    L'erreur se situe à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toto = Range("D10").Value
    Cdlt.
    Jérôme.

  9. #9
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Par défaut
    (Re)bonjour,

    Voici ce que me sort l'enregistreur de macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
        ChDir "C:\export\temp"
        Workbooks.Open Filename:= _
            "C:\export\temp\schema.xml_temporary.xlsx"
     
        Range("A1:AY1").Select
        Selection.AutoFilter
     
        ActiveWindow.SmallScroll ToRight:=19
        ActiveSheet.Range("$A$1:$AY$397634").AutoFilter Field:=22, Criteria1:= _
            "=**report**", Operator:=xlAnd
     
        Range("A1").Select
    End Sub
    Je voudrais que l' AutoFilter Field prenne la valeur indiquée en celllule D10. Cette valeur provient d'une rechercheV comme indiqué dans la copie d'écran ci-dessous :

    Nom : Capture.JPG
Affichages : 301
Taille : 104,7 Ko

    Merci.

    Cdlt.
    Jérôme

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour
    ben ma fois qu'Est ce qu'il y a dans la cellule si c'est un nombre c'est pas toto "as integer" mais toto "as long" ou "as double"
    si c'est du texte c'est "as string"
    si ca peut être les deux c'est "as variant"
    c'est la base
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre éclairé
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Par défaut
    (Re)bonjour,

    J'ai essayé :
    dim toto as long
    dim toto as double

    J'obtiens le même message d'erreur (incompatibilité de type).
    Je ne comprends pas car la valeur de la cellule D10 peut prendre les valeurs 1 à 51. J'ai rentré les valeurs des cellules N9 à N59 manuellement. La cellule D10 est le résultat de la rechercheV (voir copie d'écran ci-dessous) :

    Nom : Capture.JPG
Affichages : 289
Taille : 104,7 Ko

    Cdlt.
    Jérôme

  12. #12
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Bonjour,

    Selon l'éditeur VBA, c'est quoi la valeur de Range("D10") ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Ligne de commande avec un chemin avec espaces
    Par Oluha dans le forum Scripts/Batch
    Réponses: 17
    Dernier message: 11/10/2018, 11h36
  2. Réponses: 3
    Dernier message: 25/02/2007, 00h07
  3. [RCP] generation du rcp en ligne de commande avec ant
    Par albeau dans le forum Eclipse Platform
    Réponses: 5
    Dernier message: 01/09/2006, 18h34
  4. compiler en ligne de commandes avec dev-cpp
    Par yashiro dans le forum Dev-C++
    Réponses: 8
    Dernier message: 30/03/2006, 20h14
  5. [DEBUTANT] Ligne de commande avec ShellExecute()
    Par alainpeniche dans le forum Windows
    Réponses: 3
    Dernier message: 22/08/2005, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo