[VBA Exc]Copier rect. de cases avec 1variable

Fermé
Fritz - 6 juin 2008 à 21:33
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 - 7 juin 2008 à 08:42
Bonjour,
j'ai un souci dans mon programme VBA Excel avec lequel je dois editer un facture.

Ma facture est composé de plusieurs ligne, 1 pour chaque produit, et de 4 colonnes (prix, reférence...)

Si j'ai par exemple 3 produits différents (1 dans chaque ligne), et que je supprime le 1er, j'aimerai que les 2 autres montent d'un cran pour ne pas laissé d'espace vide.

Pour cela, j'ai crée une variable MC sur la ligne de la pièce supprimé, dans la colonne la plus à gauche de ma facture.

Cette variable est dans l'exemple sur la ligne la plus haute de mon tableau (A27), mais pourrait aller jusqu'a (A37) dans le cas ou on supprimme la 2eme, 3eme ou 4eme etc. ligne de ma facture.

J'aimerai donc couper un rectangle de cellules à partir de la ligne en dessous de MC jusqu'à E37 (E37 est le coin en bas a droite de ma facture, je l'ai choisis pour déplacer toute ma commande vers le haut et ne pas laissé de ligne vide entre 2 produit), pour déplacer le tout 1 case plus haut.

Mais je ne sais ni comment sélectionner un rectangle de cellules avec une variable et une coordonnée de case
Du type

---Dim variable as range
---Set variable = Range("MC.Offset(1,0);E37") 'ceci ne marche pas

Ou si mon rectangle va de la case MC à E37
---Set variable = Range("MC;E37") 'ceci ne marche pas

ni comment copier,couper et coller un rectangle de cellules avec VBA.

Pouvez vous m'aider?

Merci

Fritz
A voir également:

1 réponse

Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
7 juin 2008 à 08:42
Bonjour Fritz,
une question en retour : pourquoi ne supprimes-tu pas simplement la ligne ? Les lignes suivantes vont automatiquement remonter d'un cran.
MC.EntireRow.Delete

Sinon, pour sélectionner le rectangle de A?? à E37, on peut faire comme suit :
Dim Plage as Range
Set Plage = Range(MC.Offset(1, 0), MC.Offset(37 - MC.Row, 4))
Plage.Select

MC.Offset(1, 0) : ça tu l'avais bien utilisé
MC.Offset(37 - MC.Row, 4) : à partir de MC, on décale de 4 colonnes (A à E) et du nombre de lignes correspondant à la différence entre 37 et le numéro de ligne de MC.
A suivre...
0