Problème création liste par VBA

Problème création liste par VBA - VB/VBA/VBS - Programmation

Marsh Posté le 07-01-2014 à 21:21:15    

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
Reply

Marsh Posté le 07-01-2014 à 21:21:15   

Reply

Marsh Posté le 11-01-2014 à 12:44:45    

 
           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" …
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed