Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

ouoverture fichier-copier, coller

  • Initiateur de la discussion bracq
  • Date de début
B

bracq

Guest
Bonjour a tous,
Apres avoir ouvrir un classeur a partir d une macro, je dois copier une feuille de ce fichier et la coller dans le classeur ou se trouve ma macro principale. Voila le bout de prog que j ai ecrit mais il ne veut pas copier la feuille que je demande.

Sub ouverturefichier()
Dim wk1, wk2 As Workbook
Set wk1 = ActiveWorkbook

1
Fichier = Application.GetOpenFilename("Excel fichiers (*.xls), *.xls", , "SELECTIONNER LE FICHIER")
On Error GoTo sortie
If Fichier <> False Then
Workbooks.Open (CStr(Fichier))
Set wk2 = ActiveWorkbook
UserForm1.TextBox1.Value = Fichier
Else: reponse = MsgBox("Il y a erreur", vbOKCancel, "ERREUR de FICHIER")
End If
If reponse = vbOK Then
GoTo 1
Else: GoTo sortie
End If
sortie:
'wk1.Activate

If FeuilleExiste3 = True Then
ActiveWorbook.Select
ActiveSheets.Select
Selection.Copy
ActiveWindows.Close
Workbooks("energy removed.xls").Activate
Sheets.Add
Selection.Paste
Else: MsgBox ("Check the file;" & Chr(10) & "choose another file! ")
On Error GoTo aus:

End If
aus:

UserForm1.Show
End Sub
 
D

DJN90

Guest
Bonjour,

Tu peux essayer ceci à la place des instructions "ActiveSheets. select" et "Selection copy":

Sheets("Feuil2").select (selection de la feuille à copier)
Sheets("Feuil2").Copy (copie de la feuille vers un nouveau classeur)

Feuil2 est la sheet que tu veux copier.

Dan
 
B

bracq

Guest
le soucis est que je ne connais pas le nom de la feuille que j veux ouvrir. Le programme doit ouvrir un fichier compose d une seule feuille non vierge. Mon prog doit selectionner cette feuille pour la copier et la coller dans le fichier contenant ma macro...
 
S

sousou

Guest
Bonjour à tous,
Si j'ai compris, Wk2 étant le classeur venant d'être ouvert, wk1 étant le classeur principal, ceci devrait pouvoir t'aider.

(Si tu veux utiliser la propriété select, du dois faire activesheet.usedrange.select)

with wk2
activesheet.copy after:=wk1.activesheet
end with


bonne chance
 
B

bracq

Guest
merci pour ta reponse mais mon prog continue a n en faire qu a sa tete... mais j suis tetu aussi


j vois encore 2 problemes:

1- J ouvre un nouveau fichier de une seule feuille a partir d un userform. Le prog deroule jusqu a la sub routine initialize ou il rencontre une instruction se referant a un feuille appellee "input". Mais cette feuille est dans le prog principal et pas dans le fichier que j viens d ouvrir.

2-Lorsque j rajoute une feuille fictive (appellee "input") dans le prog que j viens d ouvrir le prog deroule fait un copier-coller du prog que j viens d ouvrir vers le prog principal mais il copie la feuille "input"....

pour l instant j vois seulement ces deux pbs...
 
Z

Zon

Guest
Bonsoir à tous,


Bracq moi je remplacerais le code suivant, d'aprés ce que j'ai compris tu voudrais copier la feuilleexiste3 dans ton fichier principal..

If FeuilleExiste3 = True Then
ActiveWorbook.Select
ActiveSheets.Select
Selection.Copy
ActiveWindows.Close
Workbooks("energy removed.xls").Activate
Sheets.Add
Selection.Paste
Else: MsgBox ("Check the file;" & Chr(10) & "choose another file! ")
On Error GoTo aus:


par
dim K as byte, Test as Boolean ' à mettre dans la déclaration de variable
Test=false
For K=1 to sheets.count
if sheets(i).name="Feuilleexist3" then
sheets(i).copy after:=wk1.sheets(sheets.count)
Test=true
end if
next K

If Test=false then MsgBox ("Check the file;" & Chr(10) & "choose another file! ")

A+++


PS Comme disait Thierry dans un post d'aujourd'hui il faut éviter les select...
 
B

bracq

Guest
Merci Zon,
j ai bien compris ta boucle et j l ai un peu modifie. En effet le classeur que j ouvre grace a mon userform ne doit contenir que 2 feuilles dont une qui s appelle input et l autre dont on ne connait pas le nom (mais c est cette feuille que l on doit copier dans le classeur principal).
j ai donc rajoute un set au debut de la boucle pour lui signifie ou il devait travaille (mais en faisant tourner le prog il travaille par defaut dans ce classeur) et j ai incremente a i+1 la recherche de la feuille a copier.
malheureusement il s arrete sur: If Sheets(i).Name = "input"
A+++

Set wk2 = ActiveWorkbook

Test = False
For K = 1 To Sheets.count
If Sheets(i).Name = "input" Then
Sheets(i + 1).Copy after:=wk1.Sheets(Sheets.count)
Test = True
End If
Next K

If Test = False Then MsgBox ("Check the file;" & Chr(10) & "choose another file! ")
 
Z

Zon

Guest
Bonjour à tous,



Désolé Bracq, j'utilise i dans ma boucle au lieu de K,


il fallait lire sheets(K).name="input"....


K renvoyant un index, attention si ta feuille "input" est en dernère position, il va y avoir un bogue:


If sheets(K).name<>"input then ...



A+++
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…