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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème de sélection de feuille VBA

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de sélection de feuille VBA

n°2465173
sebval26
Posté le 01-03-2024 à 11:27:59  profilanswer
 

Bonjour à tous,
 
J'ai un problème avec la sélection de feuille que je n'avais pas avant. En fait j'en ai deux qui me semblent être lié.
 
1/ Jusqu'à il y a quelque jour lorsque je voulais sélectionner une cellule ou une plage dans une feuille différente de celle sélectionner j'utilisais la ligne de commande suivante :
 
Worksheets("XXX" ).Range("B2" ). select
 
Aujourd'hui je suis obligé de le faire en deux lignes :
 
Worksheets("XXX" ).select
 
Range("B2" ).select
 
Si je le fais en une ligne j'obtiens l'erreur 1004 : la méthode sélect de la classe range à échoué.
Quelqu'un saurais ttil m'expliquer le pourquoi du comment?
 
2/ J'ai fait ce code :

Code :
  1. Sub Bouton5_Cliquer()
  2. Dim Effectif_entreprise As Worksheet
  3. Set Effectif_entreprise = Worksheets("Effectif entreprise" )
  4. 'recherche de la colonne contenant les intitulés d'emploi et détermination de la variable correspondant à la cellule
  5. Dim Colonne_Emploi As Range
  6. Set Colonne_Emploi = Effectif_entreprise.UsedRange.Find("Emploi" )
  7. Dim Colonne_Service As Range
  8. Set Colonne_Service = Effectif_entreprise.UsedRange.Find("Service" )
  9. 'Détermination de la plage de cellule correspondant aux intitulés d'emploi
  10. Dim Liste_emploi As Range
  11. Set Liste_emploi = Range(Cells(Colonne_Emploi.Row + 1, Colonne_Emploi.Column), Range(Colonne_Emploi.Address).End(xlDown))
  12. Dim Liste_Service As Range
  13. Set Liste_Service = Range(Cells(Colonne_Service.Row + 1, Colonne_Service.Column), Range(Colonne_Service.Address).End(xlDown))
  14. 'copier les intitulés de service dans la feuilles "effectif service" et supprimer les doublons
  15. Worksheets("effectif entreprise" ).Select
  16. Liste_Service.Copy
  17. Sheets("Effectif service" ).Select
  18. Range("D3" ).PasteSpecial xlPasteValues
  19. ActiveSheet.Range("D3", Range("D3" ).End(xlDown)).RemoveDuplicates Columns:=1, Header:=xlNo
  20. End Sub


Lorsque je teste la macro depuis l'éditeur en étant sur déjà sur la feuille "Effectif entreprise", la macro s’exécute parfaitement. mais lorsque je lance la macro en étant sur une autre feuille, il m'emmène sur la feuille "effectif service", toutes les cellule de la colonne D à partir de D3 sont sélectionnées, mais rien n'as été copié. J'ai l'impression qu'il ignore l'instruction sheets("effectif entreprise" ).select et je ne comprends pas pourquoi.
 
Je vous remercie d'avance de votre aide qui pourrait m'éviter une plus forte calvitie ;-)
 
 

mood
Publicité
Posté le 01-03-2024 à 11:27:59  profilanswer
 

n°2465584
Marc L
Posté le 06-03-2024 à 14:16:01  profilanswer
 

Bonjour !
 
 1/ L'unique ligne de code n'a aucun sens car pour pouvoir activer une cellule il faut d'abord activer la feuille !
Donc les deux lignes de code sont la seule voie à suivre …
 
 2/ Je n'ai pas le temps de décrypter ce code tant il y a de l'inutile et du superflu mais, là encore,
il faut juste se poser la question quelle est la feuille active
lorsque une variable objet Range est attribuée en oubliant de spécifier la feuille !
 
Pour rappel : une bonne procédure VBA n'a pas besoin d'activer ni de sélectionner ni feuille ni cellule,
donc votre code devrait tenir en moins de dix lignes …


Message édité par Marc L le 06-03-2024 à 14:20:36
n°2465590
Marc L
Posté le 06-03-2024 à 14:50:02  profilanswer
 

 Avec cinq minutes de plus que prévu, une démonstration sans l'inutile :
 

Code :
  1. Sub Demo1()
  2.         Dim Rc As Range, V
  3.         Set Rc = Worksheets("Effectif entreprise" ).UsedRange.Find("Service" )
  4.          If Rc Is Nothing Then Beep: Exit Sub
  5.         V = Range(Rc(2), Rc.End(xlDown)).Value
  6.         Set Rc = Nothing
  7.    With Worksheets("Effectif service" ).[D3].Resize(UBound(V))
  8.        .Value = V
  9.        .RemoveDuplicates
  10.    End With
  11. End Sub


 

n°2465593
Marc L
Posté le 06-03-2024 à 15:07:30  profilanswer
 

 
 Une variante :
 

Code :
  1. Sub Demo1v()
  2.         Dim Rg As Range
  3.         Set Rg = Worksheets("Effectif entreprise" ).UsedRange.Find("Service" )
  4.          If Rg Is Nothing Then Beep: Exit Sub
  5.         Set Rg = Range(Rg(2), Rg.End(xlDown))
  6.    With Worksheets("Effectif service" ).[D3].Resize(Rg.Count)
  7.        .Value = Rg.Value
  8.        .RemoveDuplicates
  9.    End With
  10.         Set Rg = Nothing
  11. End Sub


 

n°2465608
Marc L
Posté le 06-03-2024 à 17:46:27  profilanswer
 

 
 A noter avec une en-tête de colonne commune aux deux feuilles la copie des cellules et la suppression des doublons
 peuvent être remplacées par une unique ligne de code juste en utilisant un filtre avancé !
 


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

  Problème de sélection de feuille VBA

 

Sujets relatifs
[PHP] DATE : Problème de formatageVBA /Excel emplacements approuvés
probleme requete sqlVBA word : recopie champs formulaire vers signet
Problème à résoudre (Résolu) VBA Word et suppression de marques de paragraphe (lignes)
Probleme copier/coller entre Excel et WordProblème Curdate et date du serveur sql
Select dans plusieurs BDD avec UNION - Problème de doublons[Nginx] Problème URL rewritting via regex
Plus de sujets relatifs à : Problème de sélection de feuille VBA


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