Probleme de selection de données

  • Auteur de la discussion steph_20
  • Date de début

steph_20

Nouveau membre
Bonjour
Je cherche à réaliser une macro capable de selectionner une plage de cellules(Données_facture réorganisées dans la feuille "Retraitement_relevé") et les copier dans une feuille bien précise et ensuite imprimer la facture.

Voici ce que j'ai trouvé:

[cpp]Sub Impression_Facture()
'
' Macro1 Macro
'
' Touche de raccourci du clavier: Ctrl+Maj+Z

Sheets("Retraitement_relevé").Select
Range("A6:E6").Select
Selection.Copy
Select Case Range("B3").Value
Case 1
'Num_Facture correspond au N° de facture à traiter
Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
Sheets("00001").Select
' Définition de la plage a regarder
Dim MaPlage As Range
Set MaPlage = Range("Liste_N°_facture")
' Boucle + Test si Facture existe déjà
For Each Cell In MaPlage
ValeurCellule = Cell.Value
'Si Facture trouvée.. on affiche "ATTENTION!!! Ce N°_Facture existe déja!" et on sort du programme
If Cell.Value = Num_Facture Then
Application.CutCopyMode = False
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
MsgBox "ATTENTION !!! Ce N°_ Facture existe déja ! Pour une nouvelle facture : Saisir le N°_FACTURE affiché ci-dessus!"
Exit Sub
End If

Next
ActiveSheet.Unprotect ("1608")
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Protect ("1608")
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=2
Case 2
'Num_Facture correspond au N° de facture à traiter
Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
Sheets("00002").Select
' Définition de la plage a regarder
Set MaPlage = Range("Liste_N°_facture")
' Boucle + Test si Facture existe déjà
For Each Cell In MaPlage
ValeurCellule = Cell.Value
'Si Facture trouvée.. on sort du programme
If Cell.Value = Num_Facture Then
Application.CutCopyMode = False
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
MsgBox "ATTENTION !!! Ce N°_ Facture existe déja ! Pour une nouvelle facture : Saisir le N°_FACTURE affiché ci-dessus!"
Exit Sub
End If

Next
ActiveSheet.Unprotect ("1608")
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Protect ("1608")
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=2
Case 3
'Num_Facture correspond au N° de facture à traiter
Num_Facture = Sheets("Retraitement_relevé").Range("C6").Value
Sheets("00003").Select
' Définition de la plage a regarder
Set MaPlage = Range("Liste_N°_facture")
' Boucle + Test si Facture existe déjà
For Each Cell In MaPlage
ValeurCellule = Cell.Value
'Si Facture trouvée.. on sort du programme
If Cell.Value = Num_Facture Then
Application.CutCopyMode = False
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
MsgBox "ATTENTION !!! Ce N°_ Facture existe déja ! Pour une nouvelle facture : Saisir le N°_FACTURE affiché ci-dessus!"
Exit Sub
End If

Next
ActiveSheet.Unprotect ("1608")
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Protect ("1608")
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=2
End Select
End Sub[/cpp]
Mon code marche mais j'ai un probleme:C'est que quand j'exécute la macro,elle marche une fois sur deux;c'est à dire que:

-Premier lancement de la macro : elle marche sans probleme,
-Deuxieme lancement de la macro : elle ne marche pas,mais les évenements suivants se produisent:Le message d'erreur suivant apparait:"Erreur d'exécution '1004',La méthode PasteSpécial de la classe Range a échoué.";ensuite dans la feuille de destination la cellule active est décalée d'une ligne vers le bas.

-Au troisiemme lancement : elle marche comme au premier lancement
-Au quatrieme lancement : elle ne marche pas comme au deuxieme lancement

-Au cinquieme lancement : elle marche comme au premier lancement
-Au sixieme lancement : elle ne marche pas comme au deuxieme lancement

Et ainsi de suite.

Comment éviter le probleme au deuxieme lancement ,pour que la macro marche sans probleme chaque fois qu'on la lance?

Merci de m'aider.
 

zeb

Modérateur
Salut,

Comme vu dans un autre topic, vire tout ce qui concerne la sélection des objets, aussi bien les feuilles que les cellules et n'utilise pas le presse-papier. Je t'aiderai à réviser le code ainsi produit.
 

steph_20

Nouveau membre

Bonjour,

Je voudrais vous remercier pour votre aide.J'ai réussi à simplifier ma macro.Mais comment virer(remplacer par autre chose) tout ce qui concerne la sélection des objets, aussi bien les feuilles que les cellules et ne pas utiliser le presse papier?

Je vais vous "decevoir" mais j'ai essayé le code que vous m'avez donné :

Code :

1. Dim col As Long
2. Dim nom_f As Worksheet
3. Dim feuille As Worksheet
4.
5. nom_f = Worksheets("Retraitement_relevé" ).Range("B3" ).Text
6. Set feuille = Worksheets(nom_f)
7.
8. For col = 1 to 5 ' // A = colonne 1, E = Colonne 5
9. feuille.Cells(6, col).Value = Worksheets("Retraitement_relevé" ).Cells(6, col + 5).Value
10. Next


ça ne marche pas ou alors je ne sait comment l'appliquer à mon code pour qu'il marche.

Voici quelques informations pour vous permettre de mieux comprendre mon code:

la ligne : ActiveCell.Offset(1, 0).Select s'applique à la feuille de destination("Relevé" & CStr) dans la plage [A17:E41]:En réalité je veux que les informations soient coller dans la premiere ligne vide de cette plage à compter de la ligne 17.
la plage "Liste_N°_facture" se trouve dans le meme classeur mais dans la feuille "Num_facture".

Voici ce que j'ai trouvé:

[cpp]Sub Macro2()
'
' Macro2 Macro

Dim MaPlage As Range, Cell As Range
' Touche de raccourci du clavier: Ctrl+Maj+Z
With Sheets("Retraitement_relevé")
.Range("A6:E6").Copy
Sheets("Relevé" & CStr(.Range("B3").Value)).Select
'Num_Facture correspond au N° de facture à traiter
Num_Facture = .Range("C6").Value
' Définition de la plage a regarder
Set MaPlage = Range("Liste_N°_facture")
' Boucle + Test si Facture existe déjà
For Each Cell In MaPlage
ValeurCellule = Cell.Value
'Si Facture trouvée.. on affiche "ATTENTION!!! Ce N°_Facture existe déja!" et on sort du programme
If Cell.Value = Num_Facture Then
Application.CutCopyMode = False
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Activate
MsgBox "ATTENTION !!! Ce N°_ Facture existe déja ! Pour une nouvelle facture : Saisir le N°_FACTURE affiché ci-dessus!"
Exit Sub
End If
Next
End With
ActiveSheet.Unprotect ("1608")
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Protect ("1608")
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Facture").Activate
ActiveWindow.SelectedSheets.PrintOut Copies:=2



End Sub[/cpp]La macro marche mais je rencontre toujours les memes problemes à savoir:

Elle marche une fois sur deux;c'est à dire que:

-Premier lancement de la macro : elle marche sans probleme,
-Deuxieme lancement de la macro : elle ne marche pas,mais les évenements suivants se produisent:Le message d'erreur suivant apparait:"Erreur d'exécution '1004',La méthode PasteSpécial de la classe Range a échoué.";ensuite dans la feuille de destination la cellule active est décalée d'une ligne vers le bas.

-Au troisiemme lancement : elle marche comme au premier lancement
-Au quatrieme lancement : elle ne marche pas comme au deuxieme lancement

-Au cinquieme lancement : elle marche comme au premier lancement
-Au sixieme lancement : elle ne marche pas comme au deuxieme lancement

Et ainsi de suite.

Comment éviter le probleme au deuxieme lancement ,pour que la macro marche sans probleme chaque fois qu'on la lance?

Merci de m'aider.

 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 852
Membres
1 586 375
Dernier membre
talmo
Partager cette page
Haut