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 :

Sendkeys et validation de données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Par défaut Sendkeys et validation de données
    Bonjour,

    J'ai un fichier Excel qui est complété par plusieurs utilisateurs. Ce fichier permet de créer un document texte pour un import dans un ERP (Sage X3)
    Je suis limité dans le format des colonnes à compléter, j'ai donc utilisé la validation des données : j'impose un format date au dates, un nombre de caractère maxi pour d'autres informations...
    Tous cela fonctionne très bien.

    Le problème arrive quand des utilisateurs 'colle' des données dans mon tableau.
    1- A ma connaissance, la validation des données ne fonctionne pas dans le cas d'un 'copié/collé', sauf si vous me dite le contraire...
    2- Pour contourner ce problème, j'ai imaginé parcourir mon tableau (40x100) et avec la fonction SendKeys, revalider les informations une à une
    de manière simple voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub Macro2()
            SendKeys "{F2}", 1
            SendKeys "~", 1
    End Sub
    Je l'appel comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub Macro1()
    For c = 1 To 40
        For l = 1 To 100
            Toto.Cells(l, c).Select
            Macro2
        Next
    Next    
    End Sub
    Lorsque j'appel la macro 2, mon fonctionnement est correct.
    Lorsque j'appel la macro 1, je balaye tous le tableau, et après j'entre et sort (F2+Entrer) sur la dernière cellule de ce tableau 4000 fois.
    Je ne comprend pas pourquoi ?

    Pouvez vous m'aider?
    sachant que j'ai plusieurs fichier Excel qui fonctionne sur ce même principe

    Merci d'avance
    Excel 2013
    VBA 7.1

  2. #2
    Membre expérimenté Avatar de lucasgaetan
    Homme Profil pro
    dessinateur BE
    Inscrit en
    Août 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 175
    Par défaut
    bonjour,

    As-tu regardé des sujet similaire:
    https://www.developpez.net/forums/d1...r-f2-p-entree/

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Par défaut
    Bonjour,

    Si vous parlez de cette solution : Cells(i, "A") = Cells(i, "A"), cela ne répond pas à ma question, car on ne réécrit pas le contenu de la cellule et donc ne revalide pas la validation de données

    une autre piste ?

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Bonsoir,
    Je ne comprend pas pourquoi ?
    Moi c'est ce que la Macro est sensé faire que je ne comprends pas!

  5. #5
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonsoir,

    Moi c'est ce que la Macro est sensé faire que je ne comprends pas!

    Ma macro revalide le contenu des cellules, et donc la validation des données

  6. #6
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Par défaut
    Sur mon tableau, j'ai 40 colonnes de 100 lignes
    Sur chaque colonne j'ai des conditions de formats : Les colonnes dates, j'attends une dates. Les colonnes quantités, j'attends un entier, Les colonnes prix, j'attends un décimal. Les colonnes désignations, j'attends un nombre de caractère maxi et vérifie si des caractères interdits ne sont pas utilisé. Les colonnes codes, j'attends un nombre précis de caractères... Bref vous avez surement compris le principe.
    Si un utilisateurs ne renseigne pas correctement les infos attendus, la 'validation de données' lui interdit de valider sa saisie.
    Dans le cas d'un copie/coller, la validation de données ne fonctionne pas.
    Pour détourner ce problème, j'ai imaginé de ressaisir les cellules une à une avec un 'F2'+'Entrer' : j'entre dans la cellules et je la valide --> la 'validation de données' peux alors vérifier si la cellule est conforme.

    Si je lance ma macro 2, le fonctionnement attendu est OK
    Si je lance ma macro 1, cela ne fonctionne pas (elle valide uniquement la dernière cellule)

  7. #7
    Membre expérimenté Avatar de lucasgaetan
    Homme Profil pro
    dessinateur BE
    Inscrit en
    Août 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : dessinateur BE
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 175
    Par défaut
    j'ai imaginé de ressaisir les cellules une à une = Cells(i, "A") = Cells(i, "A") Non?
    si tu veux aller plus loin, tu peux faire un truc du genre:
    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
    Dim monFormat As Variant
    For c = 1 To 40
        monFormat = Cells(1, c).NumberFormat
        For i = 1 To 100 'j'ai changer le l par i, l se confond facilement avec 1
            Select Case monFormat
            Case "dd/mm/yy;@"
                Cells(i, c).Value = Format(Cells(i, c).Value, "dd/mm/yyyy")
    '        Case "blabla" 'La tu ajoutes tous les cas voulu
    '            Cells(i, c).Value = Format(blabla)
            Case "Standard"
                Cells(i, c).Value = Cells(i, c).Value
            Case Else
                Cells(i, c).Value = "Erreur"
            End Select
        Next
    Next

  8. #8
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Par défaut Solution
    Salut,

    Après de nombreuse recherche et essais j'ai trouvé une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    For c = 1 To 40
    For l = 1 To 100
        If Cells(l, c).Value <> "" And Cells(l, c).HasFormula = False Then 'je ne fais pas la vérification sur les cellules vide, ni sur celles qui contiennent des formules
            Cells(l, c).Select
            SendKeys "{F2}~", True
            DoEvents * je suis sûr que le Sendkeys passe
            If Cells(l, c).Validation.Value = False Then ' Si il y a un problème de validation de donnée, j'arrête toutes mes macros
            End
            End If
        End If
    Next
    Next

Discussions similaires

  1. [Excel] Validation de données
    Par ptitsoleil87 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/12/2005, 19h35
  2. Problème de validation de données
    Par loutsky dans le forum Access
    Réponses: 3
    Dernier message: 23/11/2005, 14h11
  3. validation de donnée... et post
    Par sonialem2000 dans le forum Bases de données
    Réponses: 12
    Dernier message: 13/07/2004, 02h34
  4. dbgrid AND validation des données
    Par samlerouge dans le forum Bases de données
    Réponses: 10
    Dernier message: 11/06/2004, 23h08
  5. Validation de données à partir d'un XML Schema
    Par leup dans le forum Valider
    Réponses: 2
    Dernier message: 10/06/2004, 08h30

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