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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Pertes propriétés Active X lorsque copier-coller

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pertes propriétés Active X lorsque copier-coller

n°2185399
guilty_al
Posté le 11-04-2013 à 16:51:48  profilanswer
 

Bonjour à tous,
 
Je me tourne vers vous pour un problème assez spécial que je n'arrive pas à résoudre bien qu'ayant fait moult recherches sur les forums...
 
Le code suivant me permet de créer une nouvelle feuille excel automatiquement qui copie le contenu d'une autre feuille et initialise les contrôles. La nouvelle feuille prend alors le nom "FP_Ld" & I ; I étant chiffre qui change en fonction du nombre de feuille (première feuille créée = FP_Ld1, 2e feuille crée = FP_Ld2,...).
 

Code :
  1. 'Bouton pour ajouter une feuille
  2. Private Sub CommandButton2_Click()
  3.     Dim I As Integer
  4.         Do
  5.         I = I + 1
  6. ' FeuilleExiste est une fonction créée et présente après ce Sub
  7.         If FeuilleExiste("FP_Ld" & I) = False Then
  8.             Sheets("Feuil8" ).Copy Before:=Sheets("Feuil2" ) 'Feuil8 étant la feuille à copier
  9.             ActiveSheet.Name = "FP_Ld" & I
  10.            
  11.             With Worksheets("FP_Ld" & I) ' Initialisation de paramètres et commandes diverses
  12.             .Activate
  13.            
  14.             .Range("A1" ).Show
  15.             .Label1.Caption = Sheets("Feuil1" ).Label2.Caption
  16.             .Label2.Caption = Sheets("Feuil1" ).Label3.Caption
  17.             .Label3.Caption = Sheets("FP_Ld" & I).Name
  18.            
  19.             .OptionButton1.Value = False
  20.             .OptionButton2.Value = False
  21.             .OptionButton3.Value = False
  22.             .OptionButton4.Value = False
  23.             .OptionButton5.Value = False
  24.             .ComboBox4.Enabled = False
  25.             .ComboBox5.Enabled = False
  26.             .CommandButton16.Enabled = False
  27.             .CommandButton17.Enabled = False
  28.             .TextBox25.Enabled = False
  29.             .TextBox26.Enabled = False
  30.             .TextBox27.Enabled = False
  31.            
  32.             .ComboBox1.ListFillRange = "Feuil6!N93:N162"
  33.             .ComboBox1.ListIndex = -1
  34.            
  35.             L1 = Sheets("Feuil7" ).Range("D1" ).End(xlDown).Row
  36.             .ComboBox2.ListFillRange = "Feuil7!D1:D" & L1
  37.             .ComboBox2.ListIndex = -1
  38.    
  39.             L2 = Sheets("Feuil2" ).Range("A6218" ).End(xlDown).Row
  40.             .ComboBox3.ListFillRange = "Feuil2!A6218:A" & L2
  41.             .ComboBox3.ListIndex = -1
  42.            
  43.             .ComboBox4.ListFillRange = "Feuil3!H2:H3746"
  44.             .ComboBox4.ListIndex = -1
  45.            
  46.             .ComboBox5.ListFillRange = "Feuil2!A36:A6215"
  47.             .ComboBox5.ListIndex = -1
  48.            
  49.             End With
  50.             Exit Do
  51.         End If
  52.         Loop
  53. End Sub
  54. ________________________________________________________________
  55. Function FeuilleExiste(Nom As String) As Boolean
  56.   On Error Resume Next
  57.   FeuilleExiste = Sheets(Nom).Name <> ""
  58.   On Error GoTo 0
  59. End Function


 
Ce code fonctionne très bien pour la première feuille créée. Pour ce qui est de la 2e, le début du script fonctionne bien (copie-colle la feuil8 dans une nouvelle feuille nommée FP_Ld2) mais bug à partir de mon contrôle Optionbutton4 avec comme message d'erreur :  
 

Citation :

Erreur d'exécution '438' :  
Propriété ou méthode d'exécution non gérée par cet objet


 
En me rendant sur FP_Ld2, lorsque je clique droit sur l'Optionbutton en question, je me rends compte que je n'ai plus les onglets "Priorités" et "Visualiser le code" comme dans les contrôles Active X mais bien "Affecter une macro" comme dans les contrôles de formulaires... J'en déduis qu'il y a eu ce changement mais je ne comprends pas pourquoi et cela vaut pour tous les contrôles après cet optionbutton4! Mais ceux d'avant (Label1,2,3 et Optionbutton 1,2,3) restent Active X et fonctionnent à merveille....
 
Ce n'est pas tout, lorsque je crée tout de même une 3e feuille ("FP_Ld3" ), le même bug apparait mais à partir de Label1... Donc tous mes contrôles sont passés de Active X à formulaires...
 
Dans ma feuille8 ce sont pourtant bien des contrôles active X qui doivent être copier-coller (et ça marche dans le premier copier-coller...).
 
Ce problème me perturbe fortement car il est à la base du formulaire que je veux créer...
 
Je vous remercie d'avance pour votre aide, quelle qu’elle soit!

mood
Publicité
Posté le 11-04-2013 à 16:51:48  profilanswer
 

n°2185483
Marc L
Posté le 11-04-2013 à 22:33:02  profilanswer
 

 
 
 
           Tu as déjà posé cette question sur un autre forum, donc inutile de répondre ici …

n°2185512
guilty_al
Posté le 12-04-2013 à 09:02:01  profilanswer
 

Bonjour Marc L,
 
Sauf si la réponse est différente ou si tu sais répondre au bug qui se produit quand j'exécute le code proposé sur l'autre forum?
 
Code proposé :
 

Code :
  1. 'Bouton pour ajouter une feuille
  2. Private Sub CommandButton2_Click()
  3. Dim NewSheet As Worksheet
  4.     Dim I As Integer
  5.         Do
  6.         I = I + 1
  7. ' FeuilleExiste est une fonction créée et présente après ce Sub
  8.         If FeuilleExiste("FP_Ld" & I) = False Then
  9.             Sheets("Feuil8" ).Copy Before:=Sheets("Feuil2" ) 'Feuil8 étant la feuille à copier
  10.             Set NewSheet = Sheets(Sheets("Feuil2" ).Index - 1)
  11.             NewSheet.Name = "FP_Ld" & I
  12.             With NewSheet ' Initialisation de paramètres et commandes diverses
  13.             .Activate
  14.             .Range("A1" ).Show
  15.             .Label1.Caption = Sheets("Feuil1" ).Label2.Caption
  16.             .Label2.Caption = Sheets("Feuil1" ).Label3.Caption
  17.             .Label3.Caption = NewSheet.Name
  18.             .OptionButton1.Value = False
  19.             .OptionButton2.Value = False
  20.             .OptionButton3.Value = False
  21.             .OptionButton4.Value = False
  22.             .OptionButton5.Value = False
  23.             .ComboBox4.Enabled = False
  24.             .ComboBox5.Enabled = False
  25.             .CommandButton16.Enabled = False
  26.             .CommandButton17.Enabled = False
  27.             .TextBox25.Enabled = False
  28.             .TextBox26.Enabled = False
  29.             .TextBox27.Enabled = False
  30.             .ComboBox1.ListFillRange = "Feuil6!N93:N162"
  31.             .ComboBox1.ListIndex = -1
  32.             L1 = Sheets("Feuil7" ).Range("D1" ).End(xlDown).Row
  33.             .ComboBox2.ListFillRange = "Feuil7!D1:D" & L1
  34.             .ComboBox2.ListIndex = -1
  35.             L2 = Sheets("Feuil2" ).Range("A6218" ).End(xlDown).Row
  36.             .ComboBox3.ListFillRange = "Feuil2!A6218:A" & L2
  37.             .ComboBox3.ListIndex = -1
  38.             .ComboBox4.ListFillRange = "Feuil3!H2:H3746"
  39.             .ComboBox4.ListIndex = -1
  40.             .ComboBox5.ListFillRange = "Feuil2!A36:A6215"
  41.             .ComboBox5.ListIndex = -1
  42.             End With
  43.             Exit Do
  44.         End If
  45.         Loop
  46. End Sub


 
Bug lors de l'exécution :
 

Citation :

Erreur de compilation:
Membre de méthode ou de données introuvable


 
Et dans le code il me surligne  
 

Code :
  1. .Label1.Caption = Sheets("Feuil1" ).Label2.Caption


 
Merci!

n°2185529
Marc L
Posté le 12-04-2013 à 10:24:49  profilanswer
 

 
           Le message est clair …   Et puis tu as indiqué avoir la solution sur l'autre forum …

n°2185570
guilty_al
Posté le 12-04-2013 à 11:34:50  profilanswer
 

Oui, cela semble fonctionner
 

Code :
  1. 'Bouton pour ajouter une feuille
  2. Private Sub CommandButton2_Click()
  3. Dim NewSheet As Worksheet
  4.     Dim I As Integer
  5.         Do
  6.         I = I + 1
  7. ' FeuilleExiste est une fonction créée et présente après ce Sub
  8.         If FeuilleExiste("FP_Ld" & I) = False Then
  9.             Sheets("Feuil8" ).Copy Before:=Sheets("Feuil2" ) 'Feuil8 étant la feuille à copier
  10.             Set NewSheet = Sheets(Sheets("Feuil2" ).Index - 1)
  11.             NewSheet.Name = "FP_Ld" & I
  12.             NewSheet.Activate
  13.             With Worksheets("FP_Ld" & I) ' Initialisation de paramètres et commandes diverses
  14.             .Range("A1" ).Show
  15.             .Label1.Caption = Sheets("Feuil1" ).Label2.Caption
  16.             .Label2.Caption = Sheets("Feuil1" ).Label3.Caption
  17.             .Label3.Caption = NewSheet.Name
  18.             .OptionButton1.Value = False
  19.             .OptionButton2.Value = False
  20.             .OptionButton3.Value = False
  21.             .OptionButton4.Value = False
  22.             .OptionButton5.Value = False
  23.             .ComboBox4.Enabled = False
  24.             .ComboBox5.Enabled = False
  25.             .CommandButton16.Enabled = False
  26.             .CommandButton17.Enabled = False
  27.             .TextBox25.Enabled = False
  28.             .TextBox26.Enabled = False
  29.             .TextBox27.Enabled = False
  30.             .ComboBox1.ListFillRange = "Feuil6!N93:N162"
  31.             .ComboBox1.ListIndex = -1
  32.             L1 = Sheets("Feuil7" ).Range("D1" ).End(xlDown).Row
  33.             .ComboBox2.ListFillRange = "Feuil7!D1:D" & L1
  34.             .ComboBox2.ListIndex = -1
  35.             L2 = Sheets("Feuil2" ).Range("A6218" ).End(xlDown).Row
  36.             .ComboBox3.ListFillRange = "Feuil2!A6218:A" & L2
  37.             .ComboBox3.ListIndex = -1
  38.             .ComboBox4.ListFillRange = "Feuil3!H2:H3746"
  39.             .ComboBox4.ListIndex = -1
  40.             .ComboBox5.ListFillRange = "Feuil2!A36:A6215"
  41.             .ComboBox5.ListIndex = -1
  42.             End With
  43.             Exit Do
  44.         End If
  45.         Loop
  46. End Sub


 
Mais l'erreur survient tout de même de temps en temps (bug d'excel?). Embêtant, peut-être qu'excel est poussé trop loin et il serait mieux de passer sur Access...

n°2185581
Marc L
Posté le 12-04-2013 à 11:57:51  profilanswer
 

 
           Disons qu'il y a une confusion de genre
 
           En fait au moment de l'erreur, il faut vérifier à quoi correspond chaque variable / objet …
 
           Peut-être qu'en précédant chaque référence de feuille avec le classeur la contenant, …
 
           Si c'est le classeur conteneur de la macro :  ThisWorkbook.Worksheets(
 
           Sinon en terme de conception, un UserForm commun aurait été moins consommateur de ressources, non ?
 

n°2185585
Marc L
Posté le 12-04-2013 à 12:08:32  profilanswer
 

 
           Même si cela ne change rien au problème, quand une feuille est copiée, elle est automatiquement activée
           (en tout cas sur ma version) …
 
           Donc la ligne 12 peut se réduire ainsi :     Set NewSheet = ActiveSheet
 
           Et donc la ligne 14 ne sert à rien …
 
           Dès le départ, après la copie, j'essaierai donc avec un   With ActiveSheet   …
 
           Ce qui n'empêche pas de qualifier le classeur de chaque référence à une feuille, juste pour blinder.
 
           Mais pour ce genre de problème, il faut être devant l'ordinateur pour comprendre ce qu'il se passe …


Message édité par Marc L le 12-04-2013 à 12:12:32

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

  Pertes propriétés Active X lorsque copier-coller

 

Sujets relatifs
[MS DOS] copier un dossier sans écraser les fichiers identiquesCopier fichiers .pst dans une arborescence
Copier Coller une plage excel dans PPT en format ImageVBA : Copier/Coller cellule d'un fichier en lecture seule
Supprimer la ligne X d'un fichier txt[Résolu]Copier fichier das un autre avec dossier date et heure
Comment copier coller des données d'un classeur à un autre ? 
Plus de sujets relatifs à : Pertes propriétés Active X lorsque copier-coller


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