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 :

ValidateList depuis une autre page en supprimant les cellules vides


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Par défaut ValidateList depuis une autre page en supprimant les cellules vides
    Bonjour,

    j'ai trouvé des dizaines de posts sur le web à propos de problèmes similaires au mien, mais jusqu'à présent, rien ne m'a permis de le résoudre... Mon faible niveau en vba y est probablement pour quelque chose.

    Voilà mon code:

    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
    Set Cel1 = Range("C7")
    Dim i As Integer
     
    For i = 0 To 30 Step 3
    If Cel1.Offset(i, 2) = "Equip. Dest." Or Cel1.Offset(i, 2) = "Equipement" Then
    If Cel1.Offset(i + 1, 2) = Empty Then
    Cel1.Offset(i + 1, 2).Clear
    Cel1.Offset(i + 1, 2).Select
            With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Range(Worksheets("BaseDeDonnees").Cells(2, 26), Worksheets("BaseDeDonnees").Cells(2, 26).End(xlDown))"
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
           End With
    Range("A1:AA200").Select
    Cel1.Offset(i + 1, 2).Select
    End If
    End If
    Next
    Mon but est de faire afficher des menus déroulants dans les cases en dessous de "Equip. Dest." ou "Destination". Le contenu du menu déroulant doit être constitué de la plage allant sur la cellule Z2 de la page "BaseDeDonnees" à la dernière cellule non vide de cette colonne.

    La ligne qui pose problème est lorsque je déclare ma liste de validation. J'ai essayé avec Address à la fin, avec et sans les "" , mais je n'y arrive pas.

    Si quelqu'un pouvait m'aider, et surtout m'expliquer ce que je fais mal, ce serait génial.

    Par avance merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Je pense que tu vas devoir nommer la plage de référence et l'utiliser dans ta macro. On ne peut faire référence à une autre feuille dans une liste de validation.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Par défaut
    J'ai essayé aussi, mais là encore, j'ai eu des "erreur 401" à chaque tentative...

    Et le problème est toujours localisé au niveau de ma déclaration de liste

    Euhh... Et puis je crois qu'on peut faire référence à une autre feuille sans problème; je l'ai fait à un autre endroit de mon code et cela fonctionne très bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cel3.Offset(i + 1).Validation.Add Type:=xlValidateList, Operator:=xlBetween, Formula1:="=BaseDeDonnees!$A$2:$A$16"

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Si cette partie de code est dans la feuille BaseDeDonnees, ça se peut, mais autrement, ça ne devrait pas fonctionner.
    Tu peux l'essayer manuellement et tu verras...

    Donc, tu crées des noms pour tes plages et tu t'en sers dans le code de Validation.

    Dans le code qui suit, je fais référence à une liste qui porte le nom "Liste" et qui se trouve sur Feuil2. Ça fonctionne très bien comme ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Sheets("Feuil1").Range("A1:A10").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=Liste"
    End With

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Par défaut
    Merci quand même Parmi, mais j'ai finalement trouvé ma solution. Je la poste car cela peut servir à quelqu'un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim plage As String
    plage = "=indirect(""BaseDeDonnees!" & Worksheets("BaseDeDonnees").Range("Z2:Z" & Worksheets("BaseDeDonnees").Range("Z200").End(xlUp).Row).Address & """)"
     
    ....
     
    Selection.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=plage
    Voilà cela fonctionne parfaitement. Il me manquait l'utilisation de la méthode "Indirect" dans ma plage, car celle-ci se trouve sur une autre feuille de calcul. La syntaxe particulière de cette ligne me manquait également.

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 09/06/2015, 15h02
  2. [Débutant] Supprimer le contenu d'une frame depuis une autre page
    Par faitor1 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 01/06/2014, 10h21
  3. Declenchement d'un javascript depuis une autre page
    Par mcrbe dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/03/2006, 11h30
  4. fermer une popup depuis une autre page que l'opener
    Par totoche dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/12/2005, 14h31
  5. valeur d'un champ de formulaire ajouté depuis une autre page
    Par manaboko dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/12/2005, 09h29

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