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 :

Code VBA Instr ne fonctionne pas [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 192
    Par défaut Code VBA Instr ne fonctionne pas
    Bonjour,

    j'ai créé un fichier comportant entre autres 13 feuilles (1 récapitulative appelée "Souffrances", et 12 autres comportant des données de commandes en cours).

    La feuille "Souffrances" comporte un code VBA repris ci-dessous permettant de reprendre les données des autres feuilles de commandes et ensuite d'effectuer un tri via un module afin d'obtenir les commandes non complètes. (ce module fonctionne).

    Je dois avoir un soucis de code dans ma condition If InStr("Souffrances| Feuil25| Feuil26|", ws.Name & "|") = 0 Then. en effet, je n'arrive pas à reprendre toutes les feuilles que je désire mais simplement quelques unes.
    J'avoue être débutant en VBA et ne comprend pas trop bien le fonctionnement de cette ligne de code, donc j'ai du mal à la corriger pour quelle fonctionne.

    Pourriez-vous m'aider dans cette commande vba.

    Merci

    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
    Private Sub Worksheet_Activate()
    'Début de la procédure
    Dim LastLig As Long, NewLig As Long
    'Déclaration des variables de type numérique,Nombre entier de - 2'147'483'648 à 2'147'483'647 (long)
    Dim ws As Worksheet
    'déclaration variable ws comme feuille de calcul
    Application.ScreenUpdating = False
    'demande une mise à jour de la feuille suivant conditions ci-dessous
    With Worksheets("Souffrances")
    'Concerne l'onglet souffrances
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        'Prendre dernière ligne remplie
        If LastLig > 1 Then .Rows(2 & ":" & LastLig).Clear
        'efface toutes les lignes remplies jusqu'à la deuxième ligne (garde le titre de l'onglet
        NewLig = 2
        'Place le début des nouvelles lignes pour copier les données à partir de la ligne 2 (toujours pour garder les titres)
        For Each ws In ThisWorkbook.Worksheets
        'Prend en considération tout les onglets du fichier (sauf voir condition if instr ci-dessous)
            If InStr("Souffrances| Feuil25| Feuil26|", ws.Name & "|") = 0 Then
            'Condition permettant de ne pas prendre en compte certains onglets (plaçés entre "" et séparés par |)
                LastLig = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
                'va chercher la derniere ligne remplie de l'onglet à traiter
                ws.Rows("2:" & LastLig).Copy .Range("A" & NewLig)
                'Recopie les données à partir de la ligne 2 vers la feuille active afin d'éviter le doublon des titres
                NewLig = NewLig + LastLig - 1
                'Passe à la ligne suivante ainsi de suite
            End If
            'fin de la condition de ne pas prendre en compte certains onglets
        Next ws
        'passage à l'onglet suivant jusqu'à ce tout les onglets soient exécutés
    End With
    'Fin de l'instruction demandant de travailler sur l'onglet souffrances
    Application.Run "'commandes 2018 final.xlsm'!tri"
    'exécute la macro de tri pour filter les différents etats (se trouve dans le module 2)
    End Sub
    'Fin de l'instruction(Sub)VBA

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne suis pas certain que vos expliquez bien le problème que vous rencontrez car la ligne d'instruction If InStr("Souffrances| Feuil25| Feuil26|", ws.Name & "|") = 0 Then ne traite que les feuilles qui ne font pas partie de "Souffrances| Feuil25| Feuil26|"

    Si c'est que vous cherchez et qu'une partie des feuilles seulement est traitée alors peut-être avez vous un problème de casse. Si c'est le cas , je vous invite à lire ma réponse dans une discussion sur le même sujet https://www.developpez.net/forums/d2.../#post11794492
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 192
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Je ne suis pas certain que vos expliquez bien le problème que vous rencontrez car la ligne d'instruction If InStr("Souffrances| Feuil25| Feuil26|", ws.Name & "|") = 0 Then ne traite que les feuilles qui ne font pas partie de "Souffrances| Feuil25| Feuil26|"

    Si c'est que vous cherchez et qu'une partie des feuilles seulement est traitée alors peut-être avez vous un problème de casse. Si c'est le cas , je vous invite à lire ma réponse dans une discussion sur le même sujet https://www.developpez.net/forums/d2.../#post11794492
    alors, je ne comprend pas pourquoi qu'une seule partie des 12 autres feuilles ne soient traitées. juste les 4 premières..???

  4. #4
    Membre confirmé
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 192
    Par défaut solutionné
    Merci de votre réponse, je vines de me rendre compte que c'est dans le module de tri qu'il y avait un soucis.

    Encore merci de la réflexion

  5. #5
    Membre confirmé
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 192
    Par défaut
    Citation Envoyé par trouvaille Voir le message
    alors, je ne comprend pas pourquoi qu'une seule partie des 12 autres feuilles ne soient traitées. juste les 4 premières..???
    pour info et sécurité, si je veux exclure plusieurs feuilles avec la fonction instr, quelle syntaxe utiliser avec le nom des feuilles entre virgules, quel place pour les guillemets ou puis-je aussi mettre les feuille numérotés ou mélanger les deux comme dans l'exemple;

    Merci de me précisez la syntaxe

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 235
    Par défaut
    hello,
    pour sélectionner des feuilles dans l'ensemble des feuilles, tu peux aussi utilise Select Case ou Filter.

    Exemple avec Select Case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub SelectionFeuillesAvecCase()
     Dim ws
     For Each ws In ThisWorkbook.Worksheets
       Select Case ws.Name
         Case "Souffrances", "Feuil25" To "Feuil26"
             Debug.Print ws.Name
       End Select
     Next ws
    End Sub
    Pour inverser le test il faut utiliser un Case Else.

    Exemple avec Filter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub SelectionFeuillesAvecFilter()
     Dim ws
     Dim myarray As Variant
     myarray = Array("Souffrances", "Feuil25", "Feuil26")
     For Each ws In ThisWorkbook.Worksheets
     If UBound(Filter(myarray, ws.Name)) <> -1 Then
         Debug.Print ws.Name
     End If
     Next ws
    End Sub


    Pour inverser le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If UBound(Filter(myarray, ws.Name)) = -1 Then

    Ami calmant, J.P

  7. #7
    Membre confirmé
    Homme Profil pro
    Logisitique
    Inscrit en
    Janvier 2018
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : Janvier 2018
    Messages : 192
    Par défaut
    Super et précis.

    Je pense que je vais utiliser cette fonction qui me parait plus facile à comprendre...

    Merci beaucoup de l'aide apportée

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

Discussions similaires

  1. [AC-2013] Code VBA sélection ne fonctionne pas
    Par maringot dans le forum IHM
    Réponses: 3
    Dernier message: 08/03/2019, 15h09
  2. Code VBA qui ne fonctionne pas
    Par DJOUFOU dans le forum VBA Access
    Réponses: 9
    Dernier message: 10/11/2016, 10h56
  3. Code VBA qui ne fonctionne pas et ne retourne pas d erreurs
    Par Eddy95500 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/10/2015, 12h51
  4. Réponses: 6
    Dernier message: 23/12/2006, 12h46
  5. probleme code vba ne s'execute pas apres instruction sql
    Par arnogef dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 29/12/2005, 12h34

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