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 Sub

Ca coince au niveau de

modèlecollecte.Rows("16:nbligne").Copy

J'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).Copy

Ca fonctionne parfaitement, merci vba-new!

Rechercher des sujets similaires à "selection plage definie variable"