Ajout de formule en VBA pour creer une liste de choix excel

marmotte78 Messages postés 8 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 10 mai 2007 - 3 mai 2007 à 11:32
marmotte78 Messages postés 8 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 10 mai 2007 - 3 mai 2007 à 15:38
Bonjour a tous

J'ai un petit souci :

Voici le code concerné, je souhaite rajouter par la ligne de code en rose une plage de cellule dans une liste de choix excel, L'application excel me retourne à l'éxécution une erreur 1004.
 Enfin je 'narrive pas à determiné le problème car le meme code fonctionne sur une autre machine

ElseIf j = 9 Then


    Set plage = Range(Cells(1, 53), Cells(1, 100)).Find(Cells(i, j - 1).Value, LookAt:=xlWhole)
    If Not plage Is Nothing And Cells(i, j - 1).Value <> "" Then


    n = plage.Column
    M = 1
    Do
        M = M + 1
    Loop Until Cells(M, n).Value = ""


    With Cells(i, j).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=" & Range(Cells(2, n), Cells(M - 1, n)).Address
       
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
   
    Else
   
    With Cells(i, j).Validation
              .Delete
            .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
            :=xlBetween
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
          End With
    Cells(i, j).Value = "Sélectionner d'abord le choix 1"
   
    End If

Merci bcp ++

9 réponses

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
3 mai 2007 à 11:43
Ton code est enregistré dans un module, dans la feuille directement ou dans une autre feuille de ton classeur ?

Il est possible qu'il faille préciser en plus du range la feuille sur laquelle tu travailles, et donc remplacer tous tes Range par Worksheets("Feuille 1").Range et Cells par Worksheets("Feuille 1").Cells ...

Autre point, tu as vérifié le contenu de tes variables M et n au moment de l'appel de cette ligne ? Il est possible que le contenu soit faux, si ça contient du texte ou 0 ... Tu as M-1 par ex., ça pourrait remonter une valeur 0 quoi que, à voir ta boucle avant, normalement, pas possible).
Quel type ont ces variables ? Si elles n'ont pas un type numérique, ça peut aussi planter (par habitude, j'ai déclaré une fois une variable en String au lieu d'Integer, une demi-heure pour retrouver mon heure tellement c'était gros et tellement j'étais réveillé ^^).

Voilà quelques pistes

Molenn
0
marmotte78 Messages postés 8 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 10 mai 2007
3 mai 2007 à 12:02
Le code est posé sur la feuil2.


Les variables M et n sont correctement definies.

Je vais tenter de remplacer les ranges et cells comme tu me conseille

MERCI
0
marmotte78 Messages postés 8 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 10 mai 2007
3 mai 2007 à 12:07
J' ai une impression apres certains test, je pense qu'il y a une bourde avec le "xlvalidatelist". car je lui change cette valeur l'erreur n'appairait plus mais la liste aussi snif

Si tu as un avis je suis preneur

thanks
0
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
3 mai 2007 à 12:13
bonjour,
Une cellule ne peut être délete, ni Add, ça marche pour les feuilles , les colonnes entière et les lignes entières.
si tu veux reculer toute la ligne de 1 cellule / Selection.Delete Shift:=xlToLeft
A+
louis
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lermite222 Messages postés 492 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 2 juillet 2012 4
3 mai 2007 à 12:20
après tout, il est possible que je me suis trompé !. Tu met en VBA et dans le forum .net c'est quoi au juste.
louis
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
3 mai 2007 à 14:12
J epense que tu t'es trompé oui ^^ Parce qu'en fait, ce n'est pas un ajout ou une suppression de cellule, mais un .add d'un type à la cellule.
C'est du VBA, cela revient à effectuer dans Excel sur une cellule :
Menu Données\Validation et à coller une liste.
Cela revient à créer un ComboBox dans Excel sans passer par un objet ou un UserForm.

 With Cells(i, j).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=" & Range(Cells(2, n), Cells(M - 1, n)).Address

Pour être sûr, tes variables i et j ne contiennent pas un 0 au moment où ça plante ?

Sinon, moi avec ton code, ça marche nickel (j'ai juste remplacé i et j par des Entiers pour ne pas faire de boucle) : 
   
    n = 1
    M = 1
    Do
        M = M + 1
    Loop Until Cells(M, n).Value = ""



    With Cells(3, 3).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=" & Range(Cells(2, n), Cells(M - 1, n)).Address
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

Tu dis que le code est dans la feuille 2, toutes les données que tu tentes de manipuler sont aussi sur la feuille 2 ? La cellule à laquelle est attachée la liste est aussi dans la feuille 2 ?

De toutes façons, l'erreur '1004', c'est quasiment toujours un pb de Range, c'est à dire que tu définis une adresse de référence à une plage ou une cellule qu'Excel n'arrive pas à interpréter. Le pb est donc forcément soit sur un Cells, soit sur un Range.

Avant la validation, affiche un Debug.Print de toutes tes variables et de l'adresse retournée (ou alors, utilise un espion, mais je ne suis pas doué avec ^^).
POur moi, ça vient obligatoirement de par là.

Molenn.
0
marmotte78 Messages postés 8 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 10 mai 2007
3 mai 2007 à 14:30
Effecetivemment toutes les données sont sur la feuille 2.

Je me doute que cela est du à un pb de range ou cells.
pourtant la variable donnant la plage de cellule à inserer renvoie une valeur correcte.

Je ne connais pas tres bien le range.

Je me demande aussi si cela peut etre du à une mauvaise declaration de variable

Marmotte
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
3 mai 2007 à 15:00
Ton code est le suivant. Insère à l'endroit indiqué en vert le code que je te mets : 
    n = plage.Column
    M = 1
    Do
        M = M + 1
    Loop Until Cells(M, n).Value = ""
Debug.print "Colonne : " & n
Debug.print "Ligne : " & MDebug.print "Boucle : i " & i & "j " & j
Debug.print "Adresse liste : " & Range(Cells(2, n), Cells(M - 1, n)).Address

    With Cells(i, j).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=" & Range(Cells(2, n), Cells(M - 1, n)).Address
       
        .IgnoreBlank = True
        .InCellDropdown = True

Tu fais tourner ton programme, quand il a planté, tu vas dans l'éditeur VBA et tu tapes ctrl+G. Et tu fais un copier/coller de ce que la fenêtre de Debug donne. Peut-être qu'on y verra plus clair.

Sinon, tes variables pour que ton code fonctionne doivent être déclarée ainsi :
Dim Plage as range
Dim i as integer, j as integer, M as integer, n as integer

Molenn
0
marmotte78 Messages postés 8 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 10 mai 2007
3 mai 2007 à 15:38
J'obtient le resultat suivant :

Colonne : 165
Ligne : 9Boucle : i 12j 15
Adresse liste : $FI$2:$FI$8

Toutes les variables sont correctes.
0
Rejoignez-nous