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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Activer plusieurs onglets dans une macro

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Activer plusieurs onglets dans une macro

n°1177555
Titoche28
Posté le 17-08-2005 à 09:24:10  profilanswer
 

Bonjour à tous,
 
Comment peut-on sélectionner un ou plusieurs onglet d'un fichier Excel, dans une macro sans passer par une fonction "If ... Sheets(Array("feuil2 ..." .  
En fait, en fonction d'un nombre (entre 1 et 10) que j'indique dans un fichier Excel (par l'intermédiaire d'un UserForm), la macro sélectionne le nombre d'onglet défini, et active l'onglet "feuil1" pour rentrer les données (ce qui me permet de renseigner tout les onglets sélectionnés). (voir l'exemple ci-dessous)
 
   ElseIf Range("R5" ) = 2 Then
        Workbooks.Open Filename:="toto.xls"
        Sheets(Array("feuil2_1", "feuil1_2" )).Select
        Sheets("feuil1_1" ).Activate

 
Le problème et que ma macro est trés longue et j'aimerais savoir si il n'y a pas un moyen plus rapide de définir cette fonction.
J'attends vos idées avec impatience ...
 
Merci d'avance,
 
Titoche28


---------------
Titoche28
mood
Publicité
Posté le 17-08-2005 à 09:24:10  profilanswer
 

n°1180573
jpcheck
Pioupiou
Posté le 21-08-2005 à 12:57:55  profilanswer
 

Titoche28 a écrit :

Bonjour à tous,
 
 
   ElseIf Range("R5" ) = 2 Then
        Workbooks.Open Filename:="toto.xls"
        Sheets(Array("feuil2_1", "feuil1_2" )).Select
        Sheets("feuil1_1" ).Activate



si j'ai bein compris, lorsque tu sélectionnes la valeur dans r5, tu selectionnes les onglets 1_valeur et valeur_1
je te propose ceci :

Code :
  1. Workbooks.Open Filename:="toto.xls"
  2. Sheets(Array("feuil"&range("r5" ).value&"_1", "feuil1_"&range("r5" ).value)).Select
  3. Sheets("feuil1_1" ).Activate


cela correspond à tes attentes?
bon dimanche :hello:  

n°1197695
Titoche28
Posté le 12-09-2005 à 15:34:32  profilanswer
 

Bonjour jpcheck,
 
Merci pour l'info, c'est presque ce que je voulais, j'ai essayé et le seul Hic, est que si dans ma case "r5", j'ai 3, il me sélectionne bien l'onglet 1 et 3, mais pas le 2. Du même coup, si j'ai 5 dans "r5", il me selectionne les onglets 1 et 5, mais pas les 2, 3 et 4. Mais c'est un bon début ...
Je te remercie de ton aide...
 
 :)  
 
@+


---------------
Titoche28
n°1198410
watashi
La démotivation : JAMAIS !
Posté le 13-09-2005 à 12:38:59  profilanswer
 

Salut Titoche,
 
J'ai trouvé une petite astuce pour programmer en VBA ton array sur les feuilles de ton classeur. j'ai pas pris ton exemple de nom de feuilles mais je suis passée par le numérodes feuilles. en l'adaptant tu devrais réussir à faire ta sélection
 
Pour mon exemple j'ai mis en Cellule A5 de la feuille 1 la valeur à écrire, et en B5 de la même feuille le nombre d'onglets à selectioner.
Ce code rempli la cellue B6 des onglets sélectionnés.

Code :
  1. Sub onglet()
  2.      Dim Feuil, i
  3. 'Feuil est le nom de l'array
  4.      Feuil = Array(Sheets(1).Name)
  5. 'redimensioner l'array pour qu'il contienne le nombre de données
  6. 'correspondant au nombre d'onglets voulus
  7. 'Valeur - 1 car array commence à 0
  8.      ReDim Preserve Feuil(Sheets(1).Range("B5" ).Value - 1)
  9. 'Ajout des données dans l'array
  10.      For i = 1 To Sheets(1).Range("B5" ).Value
  11.           Feuil(i - 1) = Sheets(i).Name
  12.      Next i
  13. 'Selection pour remplissage
  14.      Sheets(Feuil).Select
  15.      Sheets(1).Activate
  16.      Range("B6" ).Select
  17.      ActiveCell.Formula = Sheets(1).Range("A5" ).Value
  18. End Sub


 
Bon courage

n°2327454
hmcirta
Posté le 09-01-2019 à 14:27:22  profilanswer
 

Bonjour,  
 
je reprends ce poste car il s'adapte presque à ce que je veux faire.
 

Citation :

Salut Titoche,
 
J'ai trouvé une petite astuce pour programmer en VBA ton array sur les feuilles de ton classeur. j'ai pas pris ton exemple de nom de feuilles mais je suis passée par le numérodes feuilles. en l'adaptant tu devrais réussir à faire ta sélection
 
Pour mon exemple j'ai mis en Cellule A5 de la feuille 1 la valeur à écrire, et en B5 de la même feuille le nombre d'onglets à selectioner.
Ce code rempli la cellue B6 des onglets sélectionnés.
 
Code :
 
    Sub onglet()
         Dim Feuil, i
    'Feuil est le nom de l'array
         Feuil = Array(Sheets(1).Name)
    'redimensioner l'array pour qu'il contienne le nombre de données
    'correspondant au nombre d'onglets voulus
    'Valeur - 1 car array commence à 0
         ReDim Preserve Feuil(Sheets(1).Range("B5" ).Value - 1)
    'Ajout des données dans l'array
         For i = 1 To Sheets(1).Range("B5" ).Value
              Feuil(i - 1) = Sheets(i).Name
         Next i
    'Selection pour remplissage
         Sheets(Feuil).Select
         Sheets(1).Activate
         Range("B6" ).Select
         ActiveCell.Formula = Sheets(1).Range("A5" ).Value
    End Sub
 
 
 
Bon courage


 
 
Dans ce code les feuilles sélectionnées sont la feuilles d'index 1 jusqu'à la feuille d'index contenu dans la cellule B5 de la feuille Feuil1.
 
Qu'en est-il si on veut sélectionner par exemple la feuille d'index 4 à la feuille d'index 9 par exemple ? Ces valeurs (4 et 9) seront contenues dans des cellules de la feuille Feuil1 par exemple.
 
Merci de votre réponse


Message édité par hmcirta le 09-01-2019 à 14:36:08
n°2327455
MaybeEijOr​Not
but someone at least
Posté le 09-01-2019 à 14:35:19  profilanswer
 

Bonjour,
 
Et tu veux faire quoi ? Parce que là ça a l'air d'être du grand n'importe quoi ce que je vois...


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2327456
hmcirta
Posté le 09-01-2019 à 15:19:42  profilanswer
 

Bonjour Maybe
 
Merci pour votre reponse.
 
Ce que je veux faire au fait c'est consolider avec VBA via Consolidate Sources:= une plage de cellules d'un nombre de feuilles qui peut être différent à chaque fois, sachant que les feuilles à consolider sont successives.
 
Merci de votre aide


Message édité par hmcirta le 09-01-2019 à 15:24:45
n°2327458
MaybeEijOr​Not
but someone at least
Posté le 09-01-2019 à 16:29:16  profilanswer
 

Ah ok ce serait pour ça l'intérêt d'utiliser un tableau, mais bon les "select" et "active" sont quand même inutiles.

 

Voici un exemple fonctionnel :

Code :
  1. Sub ConsolidateMacro()
  2.     Dim myMasterSheet As String
  3.     Dim myTarget As Range
  4.     Dim myArray() As String
  5.     Dim i As Integer
  6.     Dim myRange As String
  7.     With ThisWorkbook
  8.         myMasterSheet = Application.ActiveSheet.Name
  9.         Set myTarget = .Sheets(myMasterSheet).Range("A1" )
  10.    
  11.         ReDim myArray(.Windows(1).SelectedSheets.Count - 2)
  12.    
  13.         myRange = "!R1C1:R11C1"
  14.    
  15.         i = 0
  16.         For Each mySheet In .Windows(1).SelectedSheets
  17.             If mySheet.Name <> myMasterSheet Then
  18.                 myArray(i) = mySheet.Name & myRange
  19.                 i = i + 1
  20.             End If
  21.         Next
  22.    
  23.         myTarget.Consolidate _
  24.          Sources:=myArray, _
  25.          Function:=xlSum
  26.     End With
  27. End Sub


1- se mettre sur la feuille maitre
2- sélectionner en plus les feuilles à ajouter dans la consolidation (à l'aide de Ctrl ou Maj.)
3- exécuter la macro

 

Après on peut ajouter des étapes en fonction des besoins pour déterminer la cellule cible et la plage qui sont des paramètres rentrés en dur dans la macro.


Message édité par MaybeEijOrNot le 09-01-2019 à 16:30:15

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2327468
hmcirta
Posté le 09-01-2019 à 18:20:38  profilanswer
 

Après plusieurs tests ça marche impeccable sur un nouveau classeur (je fais un copier/coller de ma plage de cellules de l'un de mes fichier sur un nouveau classeur au même endroit que sur mes fichiers), mais quand je fait ça sur un exemple concret (sur mes fichiers) en adaptant myRange à ma plage de cellules (M13:U45 en R13C13:R45C21) j'ai un soucis sur la ligne  myArray(i) = mySheet.Name & myRange.


Message édité par hmcirta le 09-01-2019 à 18:44:17
n°2327491
MaybeEijOr​Not
but someone at least
Posté le 09-01-2019 à 22:53:58  profilanswer
 

Tu n'as pas oublié le point d’exclamation ?
Tu te places bien sur la feuille "maître" ?
 
Quelle est l'erreur ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
mood
Publicité
Posté le 09-01-2019 à 22:53:58  profilanswer
 

n°2327504
hmcirta
Posté le 10-01-2019 à 09:43:26  profilanswer
 

Oui le point d'exclamation est là, et je me place bien sur la feuille maitre.
 
Et en faisant des tests ce matin la ligne ou ça bloque maintenant est : ReDim myArray(.Windows(1).SelectedSheets.Count - 2)
 
 
   

n°2327505
MaybeEijOr​Not
but someone at least
Posté le 10-01-2019 à 09:56:54  profilanswer
 

MaybeEijOrNot a écrit :

Quelle est l'erreur ?



---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2327512
hmcirta
Posté le 10-01-2019 à 16:22:32  profilanswer
 

Il m'affiche
 
erreur d’exécution '9'
L'indice n'appartient pas à la sélection

 
 
 
Mais j'ai trouvé la source du problème ... il fallait créer un module dans mon fichier et non pas dans un autre classeur.
 
Donc il faut créer un module dans chaque classeur où doit se faire la consolidation.

n°2327516
MaybeEijOr​Not
but someone at least
Posté le 10-01-2019 à 20:11:19  profilanswer
 

Oui, je ne suis pas assez expert dans la portée du VBA, cela doit être possible de faire ça dans un seul fichier et de l’exécuter dans les autres mais de toute manière ça demanderait surement de complexifier le script.

 

Là je proposais une solution assez généraliste, évidemment en fonction de la structure des classeurs, et notamment des noms ou de l’agencement des onglets il y a possibilité de faire plus simple et/ou efficace.


Message édité par MaybeEijOrNot le 10-01-2019 à 20:12:57

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2327539
hmcirta
Posté le 11-01-2019 à 10:20:11  profilanswer
 

Bonjour,  
 

Citation :

Oui, je ne suis pas assez expert dans la portée du VBA


En tout cas votre solution je la cherchais depuis un bon moment déjà sans avoir obtenu satisfaction.
 
 
Votre solution est vraiment très satisfaisante et elle est flexible pour sélectionner les feuilles désirées.... Elle répond très bien à mes besoins.
 
Il reste plus qu'à peaufiner le tout dans une table de correspondance et ça sera parfait.
 
Merci de votre aide, et merci surtout d'avoir trouver une solution à mon problème. Ça va me faire gagner un temps énorme.
 
Merci encore.

n°2327591
hmcirta
Posté le 13-01-2019 à 14:42:10  profilanswer
 

Bonjour,  
 
Encore une petite chose .... Comment désélectionner les autres feuilles pour ne laisser que le feuille "Maitre" active ??

n°2327592
MaybeEijOr​Not
but someone at least
Posté le 13-01-2019 à 15:08:55  profilanswer
 

Je pense qu'il suffit de resélectionner la feuille maître.
Avant la fin du With, placer :

Code :
  1. .sheets(myMasterSheet).select


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2327593
hmcirta
Posté le 13-01-2019 à 15:40:26  profilanswer
 

Impeccable  !!
 
 
Merci


Message édité par hmcirta le 13-01-2019 à 15:41:00

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

  Activer plusieurs onglets dans une macro

 

Sujets relatifs
Somme d'un nbre évolutif d'elmts &ref à une feuille cree ds la macroComment faire cette macro?
[perl] récupéré le code source de plusieurs pagescommande sur plusieurs lignes pour question de lisibilité
MACRO inopérante si déplacer[VBA - Word]: Lancer une macro en mode console
probleme de Boucle avec une macro!!!!Macro Excel --> Ajouter un caractère
Plusieurs instances de debug sous IIS[Résolu] Menu type onglets en CSS
Plus de sujets relatifs à : Activer plusieurs onglets dans une macro


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