(résolu)Problème code vba

jpp1230

XLDnaute Nouveau
Bonjour à tous,
Je suis novice en la matière et cherche une solution à un petit problème de code.
J'ai récupéré une partie de ce code sur un forum et je coince dans la solution.
Tout ce passe correctement jusqu'a la selection de la feuille, mais je n'arrive pas a coller le tableau.(message d'erreur sur la ligne "selection.paste")
Aprés avoir fait plusieurs essais je viens demander votre aide.
Merci à tous



Private Sub copier_Click()
Dim chemin As String
Dim i As Integer
Dim TopPos As Integer
Dim SheetCount As Integer
Dim PrintDlg As DialogSheet
Dim CurrentSheet, FeuilleDépart As Worksheet
Dim cb As OptionButton

' selectionne le tableau
Workbooks("RAPPORTS.xls").Sheets("production generale").Activate
Sheets("production generale").Range("A4:V59").Select
Sheets("production generale").Range("A4:V59").Copy

' boite de dialogue pour selection du fichier
chemin = "P:\Station Traitement Tri\Service STT\STT PRODUCTION\SIMULATION PROD\Prévision-Réel PROD"
Application.Dialogs(xlDialogOpen).Show (chemin)


Application.ScreenUpdating = False
' Ajoute une feuille de dialogue temporaire
Set CurrentSheet = ActiveSheet
Set FeuilleDépart = ActiveSheet
Set PrintDlg = ActiveWorkbook.DialogSheets.Add
PrintDlg.Visible = xlSheetHidden

SheetCount = 0

' Ajoute les boutons d'option
TopPos = 40
For i = 1 To ActiveWorkbook.Worksheets.Count
Set CurrentSheet = ActiveWorkbook.Worksheets(i)
' Ne tient pas compte des feuilles vide ou masquées
If Application.CountA(CurrentSheet.Cells) <> 0 And _
CurrentSheet.Visible Then
SheetCount = SheetCount + 1
PrintDlg.OptionButtons.Add 78, TopPos, 150, 16.5
PrintDlg.OptionButtons(SheetCount).Text = _
CurrentSheet.Name
If CurrentSheet.Name = FeuilleDépart.Name Then _
PrintDlg.OptionButtons(SheetCount).Value = xlOn
TopPos = TopPos + 13
End If
Next i

' Positionne les boutons OK et Annuler PrintDlg.Buttons.Left = 240

' Dimensionne la hauteur, la largeur et le titre de la bte de dialogue
With PrintDlg.DialogFrame
.Height = Application.Max _
(68, PrintDlg.DialogFrame.Top + TopPos - 34)
.Width = 230
.Caption = "A quelle feuille souhaitez-vous accéder ? "
End With

' Change l'ordre de tabulation des boutons OK et Annuler
' afin de donner le focus au premier bouton d'option

PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront

' Affiche la boîte de dialogue
FeuilleDépart.Activate
Application.ScreenUpdating = True
If SheetCount <> 0 Then
If PrintDlg.Show Then
Application.ScreenUpdating = False
For i = 1 To SheetCount
If PrintDlg.OptionButtons(i).Value = xlOn Then
Worksheets(PrintDlg.OptionButtons(i).Caption).Activate
' colle le tableau
Range("A22").Select
Selection.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save

End If
Next i
End If
Else
MsgBox "Toutes les feuilles sont vides."
End If

' Supprime la feuille de dialogue temporaire (sans message d'avertissement)
Application.DisplayAlerts = False
PrintDlg.Delete

End Sub
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Problème code vba

Bonjour Stefan

Range("A22").Select
Paste
edit: Bonjour Pierrot +- la même chose si je comprend bien.
Pas tout à fait, si tu ne précise pas l'objet sur lequel s'applique la méthode "paste", vba te retournera un message d'erreur... en l'occurence la méthode s'applique à une feuille de calcul (entre autres) mais pas à un objet "range"...

bonne soirée
@+
 

jpp1230

XLDnaute Nouveau
Re : Problème code vba

Salut à tous et merci a vous tous pour vos réponces.
J' ai toujours le même problème 'erreur d'éxécution 1004' la méthode paste de la classe worksheet à échoué
en pointant toujours sur la même ligne qui colle le tableau
 

Pierrot93

XLDnaute Barbatruc
Re : Problème code vba

Bonjour,

quelles lignes de code utilisées ? quel tableau ? sans un tout petit fichier exemple, cela va être difficile de t'aider... tu n'aurais pas des cellules fusionnées des fois ??

bonne journée
@+
 

jpp1230

XLDnaute Nouveau
Re : Problème code vba

Le fichier "rapports" contient le code sur le bouton copier.
Le problème est que suivant mon tableau, je dois le copier sur une feuille différente a chaque fois dans le fichier "Avril", "Mai" etc...
l'ouverture du fichier et de la feuille choisie marche bien, mais j'ai toujours le message d'erreur au moment de coller le tableau.
Les feuilles étant nommé toujours du même nom dans tous les fichiers.
J'espère que les 2 fichier suffirons a vous aider.
 

Pièces jointes

  • Avril.xls
    183.5 KB · Affichages: 68
  • RAPPORTS.xls
    57 KB · Affichages: 41
  • Avril.xls
    183.5 KB · Affichages: 78
  • Avril.xls
    183.5 KB · Affichages: 67

Pierrot93

XLDnaute Barbatruc
Re : Problème code vba

Re,

tu as pas mal de cellules fusionnées dans tes classeurs... pas top de gérer ça en vba.. en plus plein d'onglets dans tes classeurs, pas trop le temps, n'y l'envie de m'y plonger... le mieux est toujours un seul classeur quitte à éclater en 2 onglets, et de ne présenter que le problème posé....

bon après midi
@+
 

jpp1230

XLDnaute Nouveau
Re : Problème code vba

Problème résolu. merci à Pierrot93 de m'avoir mis sur la voie et au autre d'avoir essayé de m'aider
Je met aussi la correction de mon code, cela pourrait servir à quelqu'un

Private Sub copier_Click()
Dim chemin As String
Dim i As Integer
Dim TopPos As Integer
Dim SheetCount As Integer
Dim PrintDlg As DialogSheet
Dim CurrentSheet, FeuilleDépart As Worksheet
Dim cb As OptionButton


' boite de dialogue pour selection du fichier
chemin = "D:\Documents and Settings\jean-pierre.pedro\Desktop\Nouveau dossier"
Application.Dialogs(xlDialogOpen).Show (chemin)


Application.ScreenUpdating = False
' Ajoute une feuille de dialogue temporaire
Set CurrentSheet = ActiveSheet
Set FeuilleDépart = ActiveSheet
Set PrintDlg = ActiveWorkbook.DialogSheets.Add
PrintDlg.Visible = xlSheetHidden

SheetCount = 0

' Ajoute les boutons d'option
TopPos = 40
For i = 1 To ActiveWorkbook.Worksheets.Count
Set CurrentSheet = ActiveWorkbook.Worksheets(i)
' Ne tient pas compte des feuilles vide ou masquées
If Application.CountA(CurrentSheet.Cells) <> 0 And _
CurrentSheet.Visible Then
SheetCount = SheetCount + 1
PrintDlg.OptionButtons.Add 78, TopPos, 150, 16.5
PrintDlg.OptionButtons(SheetCount).Text = _
CurrentSheet.Name
If CurrentSheet.Name = FeuilleDépart.Name Then _
PrintDlg.OptionButtons(SheetCount).Value = xlOn
TopPos = TopPos + 13
End If
Next i

' Positionne les boutons OK et Annuler
PrintDlg.Buttons.Left = 240

' Dimensionne la hauteur, la largeur et le titre de la bte de dialogue
With PrintDlg.DialogFrame
.Height = Application.Max _
(68, PrintDlg.DialogFrame.Top + TopPos - 34)
.Width = 230
.Caption = "A quelle feuille souhaitez-vous accéder ? "
End With

' Change l'ordre de tabulation des boutons OK et Annuler
' afin de donner le focus au premier bouton d'option
PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront

' Affiche la boîte de dialogue
FeuilleDépart.Activate
Application.ScreenUpdating = True
If SheetCount <> 0 Then
If PrintDlg.Show Then
Application.ScreenUpdating = False
For i = 1 To SheetCount
If PrintDlg.OptionButtons(i).Value = xlOn Then
Worksheets(PrintDlg.OptionButtons(i).Caption).Activate

' colle le tableau
Workbooks("RAPPORTS.xls").Sheets("production generale").Range("A4:V59").Copy Worksheets(PrintDlg.OptionButtons(i).Caption).Range("A22")
Application.CutCopyMode = False



End If
Next i
End If
Else
MsgBox "Toutes les feuilles sont vides."
End If

' Supprime la feuille de dialogue temporaire (sans message d'avertissement)
Application.DisplayAlerts = False
PrintDlg.Delete


ActiveWorkbook.Save

End Sub


")
 

Discussions similaires

Statistiques des forums

Discussions
312 184
Messages
2 086 008
Membres
103 089
dernier inscrit
johnjohn1969