Sélection d'une plage définie par une variable
Bonjour à tous
J'ai fait une macro qui permet (enfin, devrait permettre) de récupérer une plage de cellules de taille variable et de la copier dans un nouvelle feuille, nommée par la macro, et d'ensuite la sauvegarder dans un nouveau fichier (nommé aussi par la macro).
Tout fonctionnait parfaitement, jusqu'à ce que je veuille améliorer mon code pour me permettre de masquer certaines feuilles (l'utilisateur n'a pas besoin de voir ce qui se passe "derrière").
J'ai donc déclaré "modèlecollecte" (la feuille d'origine des données, idéalement masquée) en tant que feuille pour pouvoir travailler sans la sélectionner.
Bref, voici mon code :
Sub feuille_collecte()
'
' Génère la feuille de collecte pour une semaine donnée (Semaine "S")
'
Dim shcollecte As Worksheet
Dim nbligne As Integer
Dim nomcollecte As String
Dim modèlecollecte As Worksheet
Set modèlecollecte = Worksheets("modèle collecte")
'cette feuille sera masquée
nomcollecte = modèlecollecte.Cells(144, 2).Text
'définit le nom du fichier où sera sauvegardée la nouvelle feuille : collecte Semaine "S"
nbligne = Worksheets("réception échantillons").Cells(6, 11).Value + 14
'définit le nombre de lignes à copier/coller de modèlecollect à shcollecte
Set shcollecte = Sheets.Add(After:=Sheets(Sheets.Count))
shcollecte.Name = Worksheets("réception échantillons").Cells(2, 11)
' crée la nouvelle feuille de collecte des résultats et la nomme : collecte Semaine "S"
modèlecollecte.Range("A1:U12").Copy
shcollecte.Select
ActiveSheet.Pictures.Paste.Select
'copie l'en-tête de la feuille en tant qu'image
Range("a20").Value = nbligne
'j'ai ajouté cette ligne (elle n'a aucune raison d'exister) pour tester que la valeur nbligne était bien correcte : OK
modèlecollecte.Rows("16:nbligne").Copy
'sélectionne les lignes à copier (c'est là que ça coince)
shcollecte.Select
Range("a16").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
Range("a16").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False
'copie les lignes ad hoc dans la nouvelle feuille de collecte
modèlecollecte.Range("A110:n130").Copy
shcollecte.Select
Range(Cells(nbligne + 6, 1), Cells(nbligne + 26, 14)).Select
ActiveSheet.Paste
'copie les lignes de pied de page dans la nouvelle feuille de collecte
shcollecte.Select
shcollecte.Move
ChDir "\\SERVEUR2008\Partage\Public\AIDE - marché analyses"
ActiveWorkbook.SaveAs Filename:=nomcollecte, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
'enregistre la nouvelle feuille de collecte dans un nouveau fichier nommé
End SubCa coince au niveau de
modèlecollecte.Rows("16:nbligne").CopyJ'obtiens une erreur 1004 (La méthode ‘range’ de l’objet ‘_worksheet » a échoué)
Si au lieu de nbligne, je mets un nombre (par exemple 26), ça fonctionne à merveille.
J'ai ajouté une ligne qui copie la valeur "nbligne" dans une cellule quelconque pour voir si la valeur existait bien et ça fonctionne.
D'ailleurs, le même genre de formulation (utilisation de nbligne pour définir un range) est utilisé plus loin dans le code et ça marche.
Je m'arrache les cheveux, là.
Quelqu'un aurait-il une idée? (je précise que j'apprends VBA un peu "sur le tas" et je ne suis pas du tout pro, mon code ci-dessus est d'ailleurs probablement un peu dégueu).
Merci d'avance.
Bonjour frannou,
Une petite erreur de syntaxe.
Essaie comme ça plutôt :
modèlecollecte.Rows("16:" & nbligne).CopyCa fonctionne parfaitement, merci vba-new!