Copie de plage de cellules (variables) en VBA

Macpoy

XLDnaute Impliqué
bonsoir le forum,
présentation du décors:
j'ai un classeur de facturation dans lequel je compile (sur une feuille "vente") des données pour les recopier dans un classeur de comptabilité.
j'ai pour le moment créer une macro qui (depuis le classeur facturation):
- me permet d'ouvrir le classeur de comptabilité,
- crée une copie de la feuille vente et la place dans le classeur compta
- transfert les données utiles de cette copie vers la véritable feuille du classeur compta.
mais la ou j'ai besoin des excelliens de ce site, c'est que j'ai 2 impératifs pour cette copie de données : - si elle occupe plus de 83 lignes alors je dois insérer autant de lignes nécessaires dans la feuille de destination(au dessus de la ligne 83).
- les données ne doivent concerner que celles du mois précèdent.
pour plus de compréhension, je joint un classeur exemple ou la feuille venant du classeur facturation est déjà transférée dans le classeur de destination. j'ai mis des commentaires dans les macros pour vous aiguiller un peu. seules les zones vertes sont concernées par la copie des données.
je ne pense pas avoir donner toutes les infos, mais déjà avec ça je vous souhaite de comprendre mon PB;
merci par avance de l'aide que vous m'apporterez.
 

Pièces jointes

  • Classeur exemple.zip
    31.8 KB · Affichages: 54
  • Classeur exemple.zip
    31.8 KB · Affichages: 51
  • Classeur exemple.zip
    31.8 KB · Affichages: 56

Macpoy

XLDnaute Impliqué
Re : Copie de plage de cellules (variables) en VBA

Re le forum,
je viens de corriger une petite erreur dans le fonctionnement de la macro recopie2.
ci-joint le classeur modifié.
 

Pièces jointes

  • Classeur exemple.zip
    32.1 KB · Affichages: 66
  • Classeur exemple.zip
    32.1 KB · Affichages: 66
  • Classeur exemple.zip
    32.1 KB · Affichages: 65
Dernière édition:

Macpoy

XLDnaute Impliqué
Re : Copie de plage de cellules (variables) en VBA

Bonjour le forum,
avec cette macro légèrement retravaillé, j'obtiens le résultat souhaité.
elle rame un peu en exécution mais bon.

Sub Recopie()
'Thierry's Demo sur Excel Downloads - Accueil, December 2002
'adaptée pour mes besoins
Dim cell As Range
Dim MaPlage As Range
Dim i As Integer
Dim iF2 As Integer
Dim ZoneA() As String, ZoneB() As String, ZoneC() As String, ZoneD() As String, ZoneE() As String
Dim ZoneF() As String, ZoneG() As String, ZoneH() As String, ZoneI() As String

Filtre = InputBox("Filtrez un mois !")
Sheets("Ventes(2)").Select

Sheets("Ventes(2)").Range("L1").Select

Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=Filtre



iF2 = 2

Set MaPlage = Vente.Range("A2", Range("A200").End(xlUp).Address)
Set MaPlage = MaPlage.SpecialCells(xlCellTypeVisible)

ReDim ZoneA(0 To MaPlage.Count - 1)
ReDim ZoneB(0 To MaPlage.Count - 1)
ReDim ZoneC(0 To MaPlage.Count - 1)
ReDim ZoneD(0 To MaPlage.Count - 1)
ReDim ZoneE(0 To MaPlage.Count - 1)
ReDim ZoneF(0 To MaPlage.Count - 1)
ReDim ZoneG(0 To MaPlage.Count - 1)
ReDim ZoneH(0 To MaPlage.Count - 1)
ReDim ZoneI(0 To MaPlage.Count - 1)
For Each cell In MaPlage
ZoneA(i) = cell.Value
Test.Range("A" & iF2) = ZoneA(i)
ZoneB(i) = cell.Offset(0, 1)
Test.Range("B" & iF2) = ZoneB(i)
ZoneC(i) = cell.Offset(0, 2)
Test.Range("C" & iF2) = ZoneC(i)
ZoneD(i) = cell.Offset(0, 3)
Test.Range("D" & iF2) = ZoneD(i)
ZoneE(i) = cell.Offset(0, 4)
Test.Range("E" & iF2) = ZoneE(i)
ZoneF(i) = cell.Offset(0, 5)
Test.Range("F" & iF2) = ZoneF(i)
ZoneG(i) = cell.Offset(0, 6)
Test.Range("G" & iF2) = ZoneG(i)
ZoneH(i) = cell.Offset(0, 7)
Test.Range("H" & iF2) = ZoneH(i)
ZoneI(i) = cell.Offset(0, 8)
Test.Range("I" & iF2) = ZoneI(i)
i = i + 1
iF2 = iF2 + 1
Next cell


End Sub

bonne journée.
 

Statistiques des forums

Discussions
314 486
Messages
2 110 107
Membres
110 666
dernier inscrit
Yaya123