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 - Validation de données [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de Maiden002
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut Code VBA - Validation de données
    Bonjour,

    J'ouvre ce poste pour savoir une chose, est ce possible de modifier une liste déroulante fait grâce a la Validation de Données (Données ==> Validation )


    En faite dans une feuille appelé "Init" j'ai une liste déroulante créer par la Validation de Données, ou j'ai "EN" et "FR" qui en fait permet de traduire mon fichier Excel en anglais ou Français.

    Le truc c'est que je voudrai faire un bouton ajouter une langue par exemple DE pour Allemand.

    Mais mon réel probléme sa serai que quand j'ai crée la langue, je voudrai qu'il la rajoute directement dans ma liste déroulante fait par la Validation de Données


    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Bonjour,

    C'est possible. Cependant, tu ne modifies pas réellement ta liste mais tu la recrées.

    Voilà un exemple :

    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
    Dim temp As String
     
        temp = Range("A1").Validation.Formula1
        temp = Replace(temp, ";", ",")
        With Range("A1").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=temp & ",DE"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
    A+

    EDIT : c'est du bricolage mais ça marche. Tu remarqueras que j'ai ajouté DE en dur dans le code mais tu peux aisément le faire provenir d'où tu veux.

  3. #3
    Membre confirmé Avatar de Maiden002
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut
    Donc si je la recrée sa va m'éffacer les anciennes langue qui avait dessus ??? Sinon on peu lui dire de rajoute une plage de données, par exemple mes "EN", "FR" sont écrit en dure quelque part, je peux dire de prendre ces valeurs la ?

    Disons que "DE" sera une variable appelé Langue car il se pourrai a la volonté de l'utilisateur qu'il ajoute plusieurs langue comme bon lui semble.

    Quand j'aurai cliqué sur mon bouton , il va me sortir une imputbox me demandans qu'elles Langue voulez vous ajouter, soit il dis DE ou IT ou ES , etc

    Pourrai tu m'expliquez un peu ton code s'il te plait. Car j'ai encore un peut de mal avec le VB, sa serai gentil.

    Merci beaucoup

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Le code que je t'ai proposé fait exactement ce que tu souhaites. Crée une liste en A1 avec ce que tu veux. Rajoute mon code dans une procédure VBA et lance-le. Tu verras bien.

    En gros, le code reprend les valeurs de ta liste, les garde en mémoire et recrée une autre liste au même endroit avec ces valeurs plus la nouvelle. C'est du bricolage qui marche.

    Voila le code final avec ton InputBox :

    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
    Sub test()
     
    Dim temp As String
    Dim lang As String
     
        lang = InputBox("Rentrez la langue souhaitée :")
     
        temp = Range("A1").Validation.Formula1
        temp = Replace(temp, ";", ",")
     
        With Range("A1").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=temp & "," & lang
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
     
    End Sub
    A+

  5. #5
    Membre confirmé Avatar de Maiden002
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut
    Re,

    Je viens de le tester, je pense qu'il y a une erreur, car il marche mais il garde pas en mémoire ce que j'avais deja avant.

    J'avais "FR" et "EN" et quand j'ai fais ajouter "DE" il ma supprimer tout les autres et ma bien "DE"

    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
    Sub test()
     
    Dim temp As String
    Dim lang As String
     
        lang = InputBox("Rentrez la langue souhaitée :")
     
        temp = Range("A1").Validation.Formula1
        temp = Replace(temp, ";", ",")
     
        With Range("A1").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=temp & "," & lang
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
     
    End Sub
    N'y aurait t'il pas une erreur sur le .Delete aprés With("A1").Validation

    EDIT : C'est bon sa marche , j'avais oublier de modifier une variable, car je les est modifier selon mon fichier

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Ca fonctionne très bien pour moi et il n'y a aucune erreur...

    Si j'ai FR et EN et que je rajoute DE, je me retrouve bien avec les 3 etc.

    Si tu ne fais pas ta liste dans la cellule A1 il faut que tu modifies dans le code Tu feras gaffe, on retrouve cela à plusieurs endroits dans le code...

  7. #7
    Membre confirmé Avatar de Maiden002
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut
    Oui en faite, je voulai remplacer ta varibale temp par liste et j'avais oublier de modifier un temp et donc enfaite il prenai pas en compte.

    Maintenant c'est bon merci beaucoup a toi

    Par curisosité comment ferai ton pour faire l'inverse ?? c'est a dire supprimer une langue

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    De rien.

    Bonne chance pour la suite et pense au petit

  9. #9
    Membre confirmé Avatar de Maiden002
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut
    Par curisosité comment ferai ton pour faire l'inverse ?? c'est a dire supprimer une langue

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Comme cela pour rester sur le même principe :

    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
    Sub test()
     
    Dim temp As String
    Dim lang As String
     
        lang = InputBox("Rentrez la langue souhaitée à supprimer :")
     
        temp = Range("A1").Validation.Formula1
        temp = Replace(temp, ";", ",")
        temp = Replace(temp, lang, "")
     
        With Range("A1").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=temp
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
     
    End Sub

  11. #11
    Membre confirmé Avatar de Maiden002
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut
    Sa marche nikel.


    Quelque question car je vais mettre des commentaires pour mon code pour savoir précisément ce qui fais.

    Peu tu me dire pourquoi met on A quoi sert ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp = Replace(temp, ";", ",")
    Car comme on dit, vos mieux savoir vraiment ce qu'on, qu'a moitié

    A moins que tu est ton code entiérement commenter sa serai génial

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Efface la liste que tu avais avant dans ta cellule. Comme je te l'ai dit auparavant, ce n'est que du bidouillage : on n'ajoute pas vraiment un champ dans la liste. On la supprime puis on la recrée de 0 avec la valeur à rajouter et les autres valeurs que tu avais à la base et qui sont gardées en mémoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp = Replace(temp, ";", ",")
    Le temp est la variable stockant les anciennes valeurs qui étaient présentes dans ta liste à l'origine. Hors, lorsque tu crées une liste par validation dans Excel "classique", tu as quelque chose de la forme Val1;Val2;...;Valn. Ainsi, lorsque tu définis ta liste les différentes valeurs à rentrer sont les unes à la suite des autres séparées par des ";". Cependant, lorsque tu les rajoutes en VBA dans une liste par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=temp
    cela ne marche pas exactement de la même façon (petit bug du VBA). En effet, il faut les séparer par des "," et non des ";". Bref, cette ligne sert donc à mettre les valeurs directement dans la liste par VBA et cela sous le bon format. Si tu avais écrit Val1;Val2;Val3 dans ton code VBA, tu n'aurais eu qu'une seule valeur dans ta liste qui aurait été "Val1;Val2;Val3". On utilise donc cette ligne pour remplacer les ";" par des "," dans la variable permettant de garder les valeurs de la liste d'origine.

    A+

  13. #13
    Membre confirmé Avatar de Maiden002
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 137
    Par défaut
    Ok d'accord je comprends mieux maintenant, c'est vrai car quand tu veux rajouter en dur une validation de données il faut séparer par des ";" c'est pour sa je comprennais pas pourquoi des virgule, maintenant je comprends ^^.

    Je t'avais demander pour le Delete, car étant données que je savais pas que au dessus il m'était en mémoire, c'est pour sa je me disai, c'est bizarre on supprime et il garde quand même en mémoire ... dés fois on est fou !! xD

    En tout cas, merci beaucoup pour ton aide

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

Discussions similaires

  1. [XL-2010] Générer un reporting Word via un code VBA et des données Excel
    Par scaredof dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/12/2013, 16h35
  2. [AC-2007] Librairie vba validation de données Ms access
    Par jaug_456 dans le forum Access
    Réponses: 4
    Dernier message: 15/07/2012, 00h58
  3. [XL-2007] Code VBA pour lire données d'un tableau dans Excel
    Par PierreL dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/10/2009, 19h31
  4. [XL-2003] Code VBA - Validation de données
    Par Maiden002 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/09/2009, 14h27
  5. Code VBA-Base de données en lecture seule
    Par @lex7020 dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/11/2007, 16h12

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