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 :

Mettre en pause une macro lors d'un Userform non modal


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Par défaut Mettre en pause une macro lors d'un Userform non modal
    Bonjour,

    Je réalise une macro VBA. Avant de faire des traitements, je souhaite verifier que mon fichier de Data est en bon ordre.
    (la personne qui envoie le fichier de data ne sais pas qu'il va être utilisé par une macro. Ce fichier peut donc être modifié).
    Je souhaite notamment vérifier si les colonnes sont dans le même ordre que celui que j'attends.

    On va dire,
    colonne A : Nom
    Colonne B : Prénom
    Colonne C : Matricule
    Colonne D : Valeur

    voila l'ordre que j'attends.

    Je ne peux pas faire de vérification automatique de l'ordre des colonnes car les titre des colonne ne sont pas vraiment normé. Par exemple la Colonne C : "Matricule" pourrais être remplacé par "Mat".
    Donc j'ai pensé que l'utilisateur pourrais faire la vérification lui même.
    Il faudrait que s'affiche un message :
    "Vérifiez que l'ordre des colonnes est bien,
    colonne A : Nom
    Colonne B : Prénom
    Colonne C : Matricule
    Colonne D : Valeur
    Corrigez si nécessaire"

    Mais Si je fait un simple messagebox, il est impossible de faire de modification sur le fichier en même temps.
    J'ai donc pensé à un Userform en mode non modal.
    Mais le problème c'est que le code ne s'arrête pas en mode non modal. La macro va continuer sans attendre que l'utilisateur ait cliqué sur le bouton continuer.
    Comment résoudre ce problème ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Par défaut
    Salut,

    Tu peux t'en sortir sans trop de difficultés.

    Tu crées un useform avec 1 liste déroulantes,

    Avec des chiffres de 1 à 4 et une textbox que tu rempliras au fur et à mesure avec le nom des colonnes que tu veux,

    Dans un module tu crées une fonction,
    Tu boucles en demandant à l'utilisateur de dire en quelle colonne se situe actuellement la première données,

    Si elle n'est pas bien située, tu fais un couper la colonne puis insérer.

  3. #3
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Par défaut
    On est donc bien d'accord que l'utilisateur doit pouvoir avoir accès au fichier pour voir quel est le nom des colonnes. Or si on ne peu pas a cause Dun userform modal qui empêche de scroller ca bloque tout. C'est pour ca que je voulais pouvoir laisser a l'utilisateur la possibilité d'agir sur le fichier.

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    il te faut faire une boucle ... conditionnée par exemple par la visibilité de ton userform :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Bouton1_Cliquer()
        If UserForm1.Visible Then
           UserForm1.Hide
        Else
            UserForm1.Show 0
            While UserForm1.Visible
                DoEvents
            Wend
        End If
     
    End Sub

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    si tes colonne existe toute dans ton fichier Excel, tu peux avec un [Dictionary] repairer l'ordre de tes colonne! ainsi tu écris dans ta colonne en l'appelant par son nom sens te poser de question sur l'ordre des colonnes!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
    Dim dico As Object, R As Range, C As Integer
    Set dico = CreateObject("Scripting.Dictionary")
    Set R = ActiveSheet.UsedRange
    For C = 1 To R.Columns.Count
        If dico.exists(Trim("" & R(1, C))) = False Then dico.Add Trim("" & R(1, C)), C
    Next
    Cells(12, dico.Item("System Exploitation")) = "toto" 'ici on place le nom de la colonne!
    End Sub
    si tu effectue un traitement similaire sur la source et la cible!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(12, dicoCible.Item("System Exploitation")) =Cells(12, dicoSource.Item("System Exploitation"))
    la source peut ce trouvé en colonne 4 et la cible en colonne 2 ça n'a aucune espèce d’importance!
    Dernière modification par Invité ; 12/10/2015 à 14h22.

  6. #6
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Par défaut
    j'ai résolu mon problème de colonne.
    Par contre je suis très intéressé par ce qu'a dis ddil sur la boucle. Mais je n'ai pas compris le fonctionnement.
    Dans la suite de ma macro, je verifie une liste de nom a par rapport a une autre. Si il y a des nom que je ne trouve pas je les affiche en rouge, et quand j'ai parcouru toute la liste, j'affiche un userform qui dis a l'utilisateur de corriger les case en rouge.
    J'avais pensé faire quelque chose comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Urf_ErreurNom.Show vbModeless
        Do
        Loop While Urf_ErreurNom.Visible
    En gros j'affiche mon userform en mode non modal.(je laisse donc la possibilité a l'utilisateur de faire des corrections sur la feuille)
    Mais j'empeche la macro d'aller plus loin en faisant une boucle infini tant que le userform n'est pas caché.
    Sur ce userform j'ai justement un bouton qui quand je clique dessus est sensé caché le userform

    dans le userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub CommandButton_Suivant_Click()
        Me.Hide
    End Sub
    une fois le userform caché ça peux continuer.

    Malheureusement ça plante. (application de réponds pas) j'ai la fenêtre de userform qui s'ouvre. mais elle est vierge. il semblerais que ça bloque avant de charger le message et le bouton.

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

Discussions similaires

  1. mettre en pause une macro
    Par moimemessssssssss dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/04/2011, 22h23
  2. [XL-2000] Mettre en pause une macro concernant un userform en mode non-modal
    Par toteuf dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 13/11/2009, 17h18
  3. VB5 Comment mettre en pause une boucle?
    Par geof dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/04/2008, 13h08
  4. Comment mettre en pause une application c#
    Par Contrec dans le forum C#
    Réponses: 2
    Dernier message: 17/09/2007, 11h42
  5. Lancer une macro lors de la modif d'une case excel
    Par frevale dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/08/2006, 13h19

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