VBA copier/coller valeurs d'une feuille vers nouveau classeur

Fermé
Needhelp - Modifié par pijaku le 30/04/2015 à 14:29
 Needhelp - 30 avril 2015 à 16:33
Bonjour à tous,

Je souhaiterai copier/coller les valeurs d'une feuille d'un fichier source (A1:N10000), vers un nouveau classeur avec une seule feuille, puis l'enregistrer sous un format "entité_date_heure_initiales" au format .csv. Vous l'aurez compris je ne suis pas un expert en VBA.. Grand merci pour votre aide.
Dim WB As Workbook
        Dim Username As String
        Dim BU As Range
        
        
        Sheets("database CSV").Select
        Range("A1:N10000").Select
        'Range("A4").Activate
        Selection.Copy
        WB = Workbooks.Add
        ActiveSheet.Paste
        

        'Demander les initiales de l'utilisateur'
        Username = Application.inputbox(" Vos initiales ? ", Type:=2)
        
        'Reprendre les initiales pour les insérer dans titre de sauvegarde'
        If Username = Empty Then
        MsgBox Prompt:="Vous ne vous êtes pas identifiez"
        End If
        
        
        'Prendre la BU
        BU = Worksheets("JT_CASH_ALLOCATION").Range("A3").Select
        
        
        
        'Enregistrer sous avec format sauvegarde'
        ChDir "C:\Users\...\..."
        WB.SaveAs Filename:="BU" & "_" & Format(Date, "ddmmyyyy") & "_" &   Format(Time, "hhmm") & "_" & Username, FileFormat:=xlCSVMSDOS _
        , CreateBackup:=False
        
        
        'Message de validation de sauvegarde'
        MsgBox "Le document a bien été enrégistré", vbOKOnly


J'imagine que mon code est bourré de faute de syntaxe, je vous remercie pour votre aide.
A voir également:

2 réponses

thev Messages postés 1884 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 17 novembre 2024 691
Modifié par thev le 30/04/2015 à 12:18
Bonjour,

Bon début.

Mes premières remarques :
1- La définition d'objets tels que Workbook ou Range se fait avec l'instruction "set"
set WB = Workbooks.Add
set BU = Worksheets("JT_CASH_ALLOCATION").Range("A3")

2- si ta BU se trouve sur ton classeur de départ, il faut la référencer par rapport à ce classeur et donc le définir au début de ta procédure comme ceci
set Wdépart = ActiveWorkbook
puis
set BU = Wdépart.Worksheets("JT_CASH_ALLOCATION").Range("A3")
et
WB.SaveAs Filename:=BU.Value & ...

3- "Vous ne vous êtes pas identifié"

4- A noter que le nom d'utilisateur est donné par :
nom_utilisateur = application.UserName

--
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
30 avril 2015 à 12:21
Bonjour Needhelp, bonjour le forum,

Ton code légèrement modifié :

Sub Macro1()
Dim CS As Workbook
Dim OS As Worksheet
Dim CD As Workbook
Dim OD As Worksheet
Dim NU As Variant
Dim BU As String

Set CS = ThisWorkbook
Set OS = CS.Sheets("database CSV")
ici:
'Demander les initiales de l'utilisateur'
NU = Application.InputBox(" Vos initiales ? ", Type:=2)
If NU = False Then Exit Sub
'Reprendre les initiales pour les insérer dans titre de sauvegarde'
If NU = "" Then
    MsgBox "Vous ne vous êtes pas identifiez !"
    GoTo ici
End If
Set CD = Workbooks.Add
Set OD = CD.Sheets(1)
OS.Range("A1:N10000").Copy OD.Range("A1")
'Prendre la BU
BU = CS.Worksheets("JT_CASH_ALLOCATION").Range("A3").Value
'Enregistrer sous avec format sauvegarde'
ChDir "C:\Users\...\..."
WB.SaveAs Filename:="BU" & "_" & Format(Date, "ddmmyyyy") & "_" & Format(Time, "hhmm") & "_" & NU, FileFormat:=xlCSVMSDOS _
, CreateBackup:=False
'Message de validation de sauvegarde'
MsgBox "Le document a bien été enrégistré", vbOKOnly
End Sub

0
Ca marche! Merci Thautheme Je te venere ;)
Merci Thev également! 3 jours que je suis deçu résolu en 2h, merci!
0
Encore quelques petites questions.

Dim CS
Dim OS
Dim CD
Dim OD
Dim NU
Dim BU

Peux-tu me donner la signification de tes abréviations? (histoire que je comprennes ce que je fais).

Aussi, existe-t-il une formule afin de ne copier que les lignes dans lesquelles figurent une valeur de mon fichier d'origine (sachant que deux lignes avec valeur peuvent être séparées par de nombreuses lignes sans valeur)?

Et comment supprimer les 2 feuilles inutiles de mon nouveau classeur?

Encore une fois merci pour votre aide
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160 > Needhelp
30 avril 2015 à 15:50
Bonjour NeedHelp, Thev,

Vénérer ?! Non arrête ça va me véner...

Libre à toi de nommer tes variables comme bon te semble. Il est tout de même conseiller d'y mettre une ou plusieurs majuscules (chose que je fais) et de leur donner un nom explicite (chose que je ne fait pas)... Il est aussi plus que déconseiller, même interdit, d'utiliser des mots-clé de Visual basic...

Les Majuscules c'est parce que quand tu édites le code dans l'éditeur (VBE), il faut tout taper en minuscule. Quand tu valides la ligne avec la touche [Entrée], la ou les variables et les mots-clé utilisées dans la ligne prennent la casse (Maj/Min) initiale. Un rapide coup d'oeil permet ainsi d'éviter des fautes de frappe en écrivant le code.

Comme j'ai horreur des noms à rallonge, je nomme mes variables souvent par des initiales. Mais, encore une fois, tu les nommes comme tu veux et comme ça te convient à toi.

CS = Classeur Source
OS = Onglet Source
CD = Classeur Destination
OD = Onglet Destination
NU = Nom Utilisateur
BU = heu ! c'est toi qui l'a nommée celle-la...

Sinon pour supprimer les deux dernières feuilles du classeur destination regarde ce bout de code :

Application.DisplayAlerts = False
CD.Sheets(Array("Feuil2", "Feuil3")).Delete
Application.DisplayAlerts = True


Pour l'autre problème, il faut boucler ligne par ligne en recherchant la valeur. Avec un fichier exemple et des explications plus claires je pourrais t'explique cela...
0
Merci pour la suppression des onglets. Je vais essayer de me débrouiller pour la suppression des lignes vides et reviendrait vers toi si problèmes. Merci encore à vous 2
0