Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/11/2011, 00h38   #1
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Par défaut question de sélections multiples aléatoire

Bonjour est il possible de sélectionner plusieurs feuilles afin de les copier et de les enregistrer dans un classeur?

Je m'explique j'ai un classeur avec différentes feuilles dans l'ordre :
"Menu", "Devis", "Fichier_client", Base_Produit", "Position".

De temps en temps, il m'arrive d'ajouter d'autres onglets après "devis" appelés "Détail 1", "Détail 2", "Détail n+1" etc...

Mon code pour sauver la feuille Devis était :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
repertoire = Sheets("Menu").Range("C9").Value
            Num_Fact = Range("F19").Value
        Nom_client = Range("J13").Value
    ActiveSheet.Copy
Cells.Copy
  Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,       SkipBlanks:=False, Transpose:=False
Range("A1").Select
Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=repertoire & Num_Fact & " " & Nom_client & ".xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
        Application.Goto Reference:="Sousdetail"        
ActiveWorkbook.Close
Je voudrais savoir comment remplacer le Pour qu'à la fois les feuilles "Devis" et les feuilles "Détail 1" 2 3 etc. si elles existent soient enregistrées.

J'ai ce bout de code
Code :
Sheets(Array("Devis", "Détail  1", "Détail  2")).Select
Mais je ne sais pas comment déclarer les variables ou quelles instructions utiliser pour faire en sorte que quelque soit le nombre de feuilles "détails" elles soient prises en compte dans
Code :
Sheets(Array("Devis", "variable")).Select
merci aux patients qui répondront.
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 20/11/2011, 11h42   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Essaie :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub test3()
    Dim Sh As Worksheet, Tabl() As String, Ctr As Long
    ReDim Tabl(0)
    Ctr = -1
    For Each Sh In Worksheets
        If Sh.Name = "Devis" Or Left(Sh.Name, 6) = "détail" Then
            Ctr = Ctr + 1
            ReDim Preserve Tabl(Ctr)
            Tabl(Ctr) = Sh.Name
        End If
    Next
    Sheets(Tabl()).Copy
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 20/11/2011, 11h47   #3
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub Test()
Dim Rep As String, NumFact As String, Client As String, Tb() As String
Dim Sh As Worksheet
Dim j As Byte
 
Application.ScreenUpdating = False
'Initialisation variables
Rep = Worksheets("Menu").Range("C9").Value
With Worksheets("Devis")
    NumFact = .Range("F19").Value
    Client = .Range("J13").Value
End With
 
'Recherche des feuilles à enregistrer
ReDim Tb(0)
Tb(0) = "Devis"
For Each Sh In ThisWorkbook.Worksheets
    If InStr(Sh.Name, "Détail") > 0 Then
        j = j + 1
        ReDim Preserve Tb(0 To j)
        Tb(j) = Sh.Name
    End If
Next Sh
 
'enregistrement des feuilles trouvées
Worksheets(Tb).Copy
With ActiveWorkbook
    For Each Sh In .Worksheets
        Sh.UsedRange.Value = Sh.UsedRange.Value
    Next Sh
    Application.DisplayAlerts = False
    .SaveAs Filename:=Rep & NumFact & " " & Client & ".xls", FileFormat:=xlExcel8
    .Close False
    Application.DisplayAlerts = True
End With
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 20/11/2011, 12h04   #4
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Par défaut oK merci tout le monde

D'accord merci pour votre temps.
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h30.


 
 
 
 
Partenaires

Hébergement Web