Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
722 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème création liste par VBA

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème création liste par VBA

n°2215278
Alighieri_​Dante
Ailleurs
Posté le 07-01-2014 à 21:21:15  profilanswer
 

Bonjour,
 
Voilà j'ai un soucis de programmation sous VBA. Je veux créer de façon automatique sur plusieurs classeurs des listes déroulantes. Là où ça bloque c'est sur la création de cette liste déroulante justement. Ce que je ne comprends pas c'est que je pars d'un bout de code qui fonctionne très bien dans un module test mais ne fonctionne plus du tout quand je le mets dans mon module de travail.
 
Voici le module de test fonctionnel:

Code :
  1. Sub test15()
  2.     Set test1 = Worksheets("Feuil4" )
  3.     ActiveWorkbook.Names.Add Name:="laliste", RefersToR1C1:="=Feuil3!R8C2:R16C2"
  4.     test1.Range("C1" ).Validation.Delete
  5.     test1.Range("C1" ).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=laliste"
  6. End Sub


 
Il fonctionne très bien si je me place sur Feuil1, 2, 3 ou 4. Je vous donne le code complet que j'ai pour mon module de travail.
 
 

Code :
  1. Sub creation()
  2.     'Accélère légèrement l'exécution du programme
  3.     Application.ScreenUpdating = False
  4.    
  5.     'Attribution du mois saisi dans la cellule A2 de la Feuil1 de ce classeur
  6.     MM = ThisWorkbook.Worksheets("Feuil1" ).Range("A2" ).Value
  7.     'Attribution de l'année saisie dans la cellule B2 de la Feuil1 de ce classeur
  8.     AAAA = ThisWorkbook.Worksheets("Feuil1" ).Range("B2" ).Value
  9.    
  10.     'Attribution du chemin d'accès à une variable
  11.     'Le but est que l'outil puisse être déplacé sans soucis pour la suite
  12.     chemin = Workbooks(ThisWorkbook.Name).Path
  13.    
  14.     'Attribution de la feuille France du fichier France Modèle
  15.     Set Modele = Workbooks.Open(Filename:=chemin & "\Modèle FRANCE.xls" ).Worksheets("France" )
  16.    
  17.     'Changement automatique de l'année pour la feuille France du classeur Modèle FRANCE
  18.     Modele.Range("G5" ).Value = "Année " & AAAA
  19.     'Fermeture sans sauvegarder du fichier FRANCEAAAAMM
  20.     Workbooks("Modèle FRANCE.xls" ).Close savechanges:=True
  21.    
  22.     'Attribution de la feuille France du fichier FRANCEAAAAMM avec MM = MM + 1 par rapport à ce lui de l'AVDOR
  23.     Set France = Workbooks.Open(Filename:=chemin & "\FRANCE" & AAAA & MM & ".xls" ).Worksheets("France" )
  24.    
  25.     'Boucle pour servant à la création des fichiers par région
  26.     For k = 61 To 72
  27.    
  28.         'Ouverture du classeur modèle pour la mise en forme
  29.         Workbooks.Open (chemin & "\Modèle FRANCE.xls" )
  30.         'Enregistrement de ce classeur sous un nouveau nom pour son utilisation dans le TMP
  31.         ActiveWorkbook.SaveCopyAs chemin & "\REG" & k & ".xls"
  32.         'Fermeture du classeur modèle sans sauvegarder
  33.         Workbooks("Modèle FRANCE.xls" ).Close savechanges:=False
  34.         'Attribution de la feuille France du fichier REG
  35.         Set REG = Workbooks.Open(Filename:=chemin & "\REG" & k & ".xls" ).Worksheets("France" )
  36.         'Attribution sur a de la dernière ligne remplie de la feuille AVDOR_SAS du fichier AVDOR_SASAAAAMM
  37.         a = France.Range("A" & Rows.Count).End(xlUp).Row
  38.         j = 8
  39.         For i = 8 To a
  40.             If France.Range("B" & i).Value = k Then
  41.                 REG.Rows(j).EntireRow.Value = France.Rows(i).EntireRow.Value
  42.                 j = j + 1
  43.             End If
  44.         Next i
  45.        
  46.         'Renommage de la feuille France
  47.         Worksheets("France" ).Name = "REG" & k
  48.         'Renommage de la feuille Feuil2
  49.         Worksheets("Feuil2" ).Name = "Accueil"
  50.         'Renommage de la feuille Feuil3
  51.         Worksheets("Feuil3" ).Name = "Liste"
  52.         'Création d'une nouvelle feuille pour afficher le choix fait par l'utilisateur
  53.         Sheets.Add.Move After:=Sheets(Sheets.Count)
  54.        
  55.         'Réattribution de la valeur REG à la feuille REG#
  56.         Set REG = Worksheets("REG" & k)
  57.         'Attribution sur b de la dernière ligne remplie de la feuille REG# du fichier REG#
  58.         b = REG.Range("A" & Rows.Count).End(xlUp).Row
  59.        
  60.         'Copie de la feuille REG# sur la feuille selection
  61.         Sheets("REG" & k).Copy After:=Sheets(3)
  62.         'Renommage de la feuille nouvellement créée
  63.         ActiveSheet.Name = "selection"
  64.         'Attribution à la valeur F_selection de la feuille selection
  65.         Set F_selection = Worksheets("selection" )
  66.         'Supression des informations contenues dans la feuille selection
  67.         F_selection.Range("A8:BT" & b).Value = ""
  68.        
  69.         'Attribution à la valeur F_Liste de la feuille Liste
  70.         Set F_Liste = Worksheets("Liste" )
  71.         'Attribution à la valeur F_Accueil de la feuille Accueil
  72.         Set F_Accueil = Worksheets("Accueil" )
  73.        
  74.         'Recherche du numéro maximum de l'inspection comemrciale
  75.         c = Application.WorksheetFunction.Max(REG.Range("B8:B" & b))
  76.         'Création des valeurs utilisables pour la liste des inspections commerciales
  77.         For i = 2 To c
  78.             F_Liste.Range("A" & i).Value = i
  79.         Next i
  80.        
  81.         'Création des valeurs utilisables pour la liste des grades
  82.         F_Liste.Range("B1" ).Value = "TOUS"
  83.         F_Liste.Range("B2" ).Value = "I"
  84.         F_Liste.Range("B3" ).Value = "T"
  85.         F_Liste.Range("B4" ).Value = "C"
  86.        
  87.         'Liste déroulante pour les subdivisions
  88.         ActiveWorkbook.Names.Add Name:="liste1", RefersToR1C1:="=Liste!R1C1:R20C1"
  89.         F_Accueil.Range("A1" ).Validation.Delete
  90.         F_Accueil.Range("A1" ).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=liste1"
  91.         'Liste déroulante pour les grades
  92.         ActiveWorkbook.Names.Add Name:="liste2", RefersToR1C1:="=Liste!R1C2:R4C2"
  93.         F_Accueil.Range("B1" ).Validation.Delete
  94.         F_Accueil.Range("B1" ).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=liste2"
  95.        
  96.         'Supression de la Feuil1
  97.         Application.DisplayAlerts = False
  98.         Sheets("Feuil1" ).Delete
  99.         Application.DisplayAlerts = True
  100.        
  101.         'Repositionnement des différentes feuilles
  102.         F_Accueil.Move Before:=Sheets("REG" & k)
  103.         F_Liste.Move After:=Sheets("selection" )
  104.        
  105.         'Fermeture du fichier REG en sauvegardant
  106.         Workbooks("REG" & k & ".xls" ).Close savechanges:=True
  107.     Next k
  108.     'Fermeture sans sauvegarder du fichier FRANCEAAAAMM
  109.     Workbooks("FRANCE" & AAAA & MM & ".xls" ).Close savechanges:=False
  110.     'Réactivation d'une option désactivé au départ
  111.     Application.ScreenUpdating = True
  112. End Sub


 
Donc vous avez la ligne problématique en gras (c'est pareil pour la ligne située 4 ou 5 lignes en dessous). Et je comprends pas pourquoi cette ligne ne fonctionne pas. Le message d'erreur est le suivant:
Erreur d'exécution '1004':
Erreur définie par l'application ou par l'objet.
 
Alors que j'écris pratiquement la même chose que dans mon module de test. Du coup, je suis complètement perdu, ne comprenant pas le moins du monde pourquoi ça ne marche. Pour information je suis sous Excel 2002.
 
Merci d'avance pour vos réponses.


Message édité par Alighieri_Dante le 08-01-2014 à 21:31:23
mood
Publicité
Posté le 07-01-2014 à 21:21:15  profilanswer
 

n°2215818
Marc L
Posté le 11-01-2014 à 12:44:45  profilanswer
 

 
           Bonjour,
 
           sans voir les classeurs, je ne vois (pas grand chose !) que la ligne n°88 pouvant causer le souci
 
           si dans le classeur actif il n'y a pas de feuille "Liste" …
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème création liste par VBA

 

Sujets relatifs
problème de résolutionAvis pour création de site internet "complexe"
[c] Probleme afficher valeur correcte tableau[Rés]Incrémentation, redimenssionnement, valeur d'une liste modifiable
VBA : erreur d'exécution 13problème insertion images site web
Probleme de comptage (SQL Oracle)Module Commun VBA pour plusieurs classeurs
problème d'excécution 13Case à cocher code VBA
Plus de sujets relatifs à : Problème création liste par VBA


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR