Macro pour insérer coller une plage variable d'un onglet à un autre

Bonjour à tous,

je bute sur un bout de macro. je pense que ça vient d'une référence relative que je n'arrive pas à gérer mais je ne suis pas sûr. j'ai essayé de faire en pas à pas avec cmd shift fleche pour faire la selection mais cela ne passe pas. j'ai essayé avec l'enregistrement macro et gpt mais je tombe sur la même erreur.

le but general du fichier est à partir d'un inventaire dynamique de produits (onglet "inventaire"), faire un simili formulaire de vente d'articles minimisant les erreurs de saisie (onglet "formulaire"), validant le panier (partie droite de l'onglet "formulaire"), créant un registre de vente en onglet "ENREGISTRE" qui permettra la mise à jour de l'inventaire initial et les stats de vente.

j'ai déjà fait des bouts de macro pour créer la sélection d'un article (valider article). je dois maintenant réussir à valider le panier complet.

je voudrais donc réussir à faire :

- Dans l’onglet « formulaire », Copie le contenu de la sélection donnée par la formule =DECALER($H$2;1;0;NBVAL(H:H)-3;9). pour faire plus simple, je voudrais sélectionner la plage variable en hauteur contenue dans le tableau

- Dans l’onglet « enregistre », à partir de la cellule $A$3, insérer le bon nombre de lignes vers le bas.

- Coller en valeur la sélection

j'ai une erreur dans la lige rouge:
Sheets("FORMULAIRE").Activate
' Définir la plage à copier avec la formule =DECALER($H$2;1;0;NBVAL(H:H)-3;9)
Set Plage = Range("H2").CurrentRegion.Offset(1, 0).Resize(Range("H2").CurrentRegion.Rows.Count - 3, 9)

Plage.Copy
Sheets("ENREGISTRE").Activate
NbLignes = WorksheetFunction.CountA(Sheets("FORMULAIRE").Range("H:H")) - 3
Range("A3").Resize(NbLignes).EntireRow.Insert
Range("A3").PasteSpecial Paste:=xlPasteValues

une fois que ce sera inséré, je ferai les calculs pour créer le panier (bout de macro faite copier_formule). il doit y avoir plus elegant mais pour l'instant je decompose pour déjà réussir à insérer la sélection.

je mets le fichier en PJ.

merci pour votre aide.

fabien

26inventaire-forum.xlsm (140.53 Ko)

Bonjour,

Set Plage = Range("H2").Offset(1).Resize(Application.CountA(Columns("H")) - 3, 9)

Merci Thev ! solution nickel.

Merci Sébastien pour la création et l'administration du forum.

fabien

@ Thev : je suis preneur de l'explication entre ma ligne et la tienne pour apprendre et pourvoir aider la prochaine fois :).

je vois bien le application.count. mais je ne comprends pas pourquoi le currentregion pose probleme. je pensais que c'est ce qu'il fallait pour s'adapter aux changements.

cette instruction est possible :

Set plage = Range("H2").Offset(1).Resize(Range("H2").CurrentRegion.Rows.Count - 3, 9)

mais ne correspond pas forcément à la formule initiale : =DECALER($H$2;1;0;NBVAL(H:H)-3;9), en particulier si la colonne H contient des cellules vides ou si les colonnes I à P contiennent plus de cellules non vides que la colonne H.

Application.CountA(Columns("H"))

est l'écriture VBA de la fonction : NBVAL(H:H)

@ Thev : merci pour ta réponse. Clair pour moi.

Rechercher des sujets similaires à "macro inserer coller plage variable onglet"