XL 2019 Copier-coller une plage de cellule fixe sur une autre feuille

Pieerre69

XLDnaute Junior
Bonjour à tous,


J'ai un soucis que les codes glanés sur les différents forums Excel ne parviennent pas à resoudre..
Je cherche un copier-coller une plage de cellule fixe d'une feuille, sur une autre feuille.
Le hic c'est que l'autre feuille sert de base de données qui s'incrémente, donc l'endroit où se collent les données copiées change à chaque lancement de l'application par exemple.

Je bloque sur l'avant dernière ligne du code, c'est-à-dire le moment où il faut juste copier-coller quoi.. J'ai essayé pas mal de solution mais soit ça ne fonctionne pas, soit je n'arrivais pas à paramétrer.

Merci d'avance à ceux qui se pencheront sur la question !
-----------------------------------------------------------
Ci-joint le code, et le fichier pour ceux qui le souhaitent.
VB:
Sub collecte_donnees()

Dim nbligne As Long
Dim i As Integer
Dim der_ligne As Long
Dim NbCol As Integer
Dim NbRow As Integer
Dim CopyRange As Range
Dim PasteRange As Range

der_ligne = Sheets("MAGASIN 6").Range("A1").CurrentRegion.End(xlDown).Row
nbligne = Application.WorksheetFunction.CountA(Feuil2.Range("A21:A40"))

    For i = 0 To nbligne - 1
   
        ' n° anomalie
        Sheets("MAGASIN 6").Range("A" & der_ligne).Offset(rowoffset:=i, columnoffset:=0).Value = Sheets("feuil2").Range("E13").Value
       
        'n° OF
        Sheets("MAGASIN 6").Range("B" & der_ligne).Offset(rowoffset:=i, columnoffset:=0).Value = Sheets("feuil2").Range("E11:H12").Value
           
        'chantier
        Sheets("MAGASIN 6").Range("C" & der_ligne).Offset(rowoffset:=i, columnoffset:=0).Value = Sheets("feuil2").Range("E15:H16").Value
           
        'chalet
        Sheets("MAGASIN 6").Range("D" & der_ligne).Offset(rowoffset:=i, columnoffset:=0).Value = Sheets("feuil2").Range("E17:H18").Value
           
        'date constat
        Sheets("MAGASIN 6").Range("E" & der_ligne).Offset(rowoffset:=i, columnoffset:=0).Value = Sheets("feuil2").Range("E5:H7").Value
           
        'date cloture
        Sheets("MAGASIN 6").Range("F" & der_ligne).Offset(rowoffset:=i, columnoffset:=0).Value = Sheets("feuil2").Range("E41:h43").Value
   
    Next
   
    'code_art
    Call code_art
               
    'designation
    Call designation
       
    'quantité
    Call qte_manque
   
    'copier - coller du tableau de données
    Sheets("bin").Range(Cells(1, 1), Cells(nbligne, 3)).copy Sheets("MAGASIN6").Range(Cells(der_lign, 7))
 
End Sub

et le code d'une des macros appelés, ils sont quasiment identiques entres eux.

Code:
Sub qte_manque()

Dim numligne As Long
Dim nbligne As Long
Dim qte As Long
Dim j As Integer
Dim k As Integer

k = 0
numligne = nbligne * (3 / 2)

For j = 0 To numligne
   
    qte = Sheets("feuil2").Range("f21:h22").Offset(rowoffset:=j, columnoffset:=0)
   
    If qte <> 0 Then
           
        Sheets("bin").Range("c1").Offset(rowoffset:=k, columnoffset:=0) = qte
        k = k + 1
           
        Else
               
    End If
           
Next

End Sub
 

Pièces jointes

  • Classeur1.xlsm
    36.8 KB · Affichages: 5
Solution
Bonjour Pieerre,
Si le Module1 ne vous sert pas, comment mon code peut il vous être utile ?
J'ai essayé de répondre à votre besoin, c'est à dire de remplir la base Magasin avec les données présentes dans Feuill2.
J'ai fait ce que j'avais compris de votre premier post.
Comme ce n'était pas précisé, tout est sur la même ligne.
Il suffit de changer la fin du code pour l'écriture des données.
Dészolé d'avaoir répondu de travers.
VB:
Sub Macro1()
' Calcul de la première ligne libre de la feuille Magasin
    DerLig = (ThisWorkbook.Sheets("MAGASIN 6").Cells(65536, 1).End(xlUp).Row) + 1
' Récupération des infos de Feuil2 et rangement dans Magasin en dernière ligne
    Sheets("MAGASIN 6").Cells(DerLig, 1) = Sheets("Feuil2").Range("E13")    ' N°...

Pieerre69

XLDnaute Junior
Ah et oui, j'ai oublié de préciser plusieurs choses autant pour moi...
Ce que je souhaite, c'est que (Feuil2) les données code article, désignation et qté manquante soit inscrite dans les colonnes qui suivent. L'important, c'est que si on a plusieurs code article/désign/qté, c'est que ça créé une ligne supplémentaire dans "MAGASIN 6".

Exemple à partir de mon fichier :

La fiche de déclaration indique 6 codes articles manquants (avec leur désignation et quantité).

En lancant le programme, on ne doit pas écraser les données existantes (qui sont les lignes de la feuille MAGASIN 6), mais on doit écrire 6 lignes, avec chacunes les mêmes date constat, n°anomalie, OF etc etc (ça, c'est bon, j'ai géré cette partie) mais avec les 6 différents codes articles/désignation/qté.

J'ai réussi à extraire les 6 code art/désign/qté dans une feuille à part pour tester (feuille "bin") mais je n'arrive pas à les recopier dans la feuille "MAGASIN 6" qui me servira de base de données

J'espère que c'est assez clair pour vous !
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Pieerre,
Si le Module1 ne vous sert pas, comment mon code peut il vous être utile ?
J'ai essayé de répondre à votre besoin, c'est à dire de remplir la base Magasin avec les données présentes dans Feuill2.
J'ai fait ce que j'avais compris de votre premier post.
Comme ce n'était pas précisé, tout est sur la même ligne.
Il suffit de changer la fin du code pour l'écriture des données.
Dészolé d'avaoir répondu de travers.
VB:
Sub Macro1()
' Calcul de la première ligne libre de la feuille Magasin
    DerLig = (ThisWorkbook.Sheets("MAGASIN 6").Cells(65536, 1).End(xlUp).Row) + 1
' Récupération des infos de Feuil2 et rangement dans Magasin en dernière ligne
    Sheets("MAGASIN 6").Cells(DerLig, 1) = Sheets("Feuil2").Range("E13")    ' N° anomalie
    Sheets("MAGASIN 6").Cells(DerLig, 2) = Sheets("Feuil2").Range("E11")    ' N° OF
    Sheets("MAGASIN 6").Cells(DerLig, 3) = Sheets("Feuil2").Range("E15")    ' N° chantier
    Sheets("MAGASIN 6").Cells(DerLig, 4) = Sheets("Feuil2").Range("E17")    ' Modele chalet
    Sheets("MAGASIN 6").Cells(DerLig, 5) = Sheets("Feuil2").Range("E5")     ' Date du constat
    Sheets("MAGASIN 6").Cells(DerLig, 6) = Sheets("Feuil2").Range("E41")    ' Date de cloture
' Récupération de la matrice Feuill2 Article,designation,Qte manquante
' Et collage des infos dans la base Magasin.
    DerCol = 4
    For i = 21 To 40 Step 2     ' De la ligne 21 à 40
        DerCol = DerCol + 3
        Sheets("MAGASIN 6").Cells(DerLig, DerCol + 0) = Sheets("Feuil2").Range("A" & i) ' Code article
        Sheets("MAGASIN 6").Cells(DerLig, DerCol + 1) = Sheets("Feuil2").Range("C" & i) ' Designation
        Sheets("MAGASIN 6").Cells(DerLig, DerCol + 2) = Sheets("Feuil2").Range("F" & i) ' Qte manquante
    Next i
End Sub
 

Pieerre69

XLDnaute Junior
Bonjour Pieerre,
Si le Module1 ne vous sert pas, comment mon code peut il vous être utile ?
J'ai essayé de répondre à votre besoin, c'est à dire de remplir la base Magasin avec les données présentes dans Feuill2.
J'ai fait ce que j'avais compris de votre premier post.
Comme ce n'était pas précisé, tout est sur la même ligne.
Il suffit de changer la fin du code pour l'écriture des données.
Dészolé d'avaoir répondu de travers.
VB:
Sub Macro1()
' Calcul de la première ligne libre de la feuille Magasin
    DerLig = (ThisWorkbook.Sheets("MAGASIN 6").Cells(65536, 1).End(xlUp).Row) + 1
' Récupération des infos de Feuil2 et rangement dans Magasin en dernière ligne
    Sheets("MAGASIN 6").Cells(DerLig, 1) = Sheets("Feuil2").Range("E13")    ' N° anomalie
    Sheets("MAGASIN 6").Cells(DerLig, 2) = Sheets("Feuil2").Range("E11")    ' N° OF
    Sheets("MAGASIN 6").Cells(DerLig, 3) = Sheets("Feuil2").Range("E15")    ' N° chantier
    Sheets("MAGASIN 6").Cells(DerLig, 4) = Sheets("Feuil2").Range("E17")    ' Modele chalet
    Sheets("MAGASIN 6").Cells(DerLig, 5) = Sheets("Feuil2").Range("E5")     ' Date du constat
    Sheets("MAGASIN 6").Cells(DerLig, 6) = Sheets("Feuil2").Range("E41")    ' Date de cloture
' Récupération de la matrice Feuill2 Article,designation,Qte manquante
' Et collage des infos dans la base Magasin.
    DerCol = 4
    For i = 21 To 40 Step 2     ' De la ligne 21 à 40
        DerCol = DerCol + 3
        Sheets("MAGASIN 6").Cells(DerLig, DerCol + 0) = Sheets("Feuil2").Range("A" & i) ' Code article
        Sheets("MAGASIN 6").Cells(DerLig, DerCol + 1) = Sheets("Feuil2").Range("C" & i) ' Designation
        Sheets("MAGASIN 6").Cells(DerLig, DerCol + 2) = Sheets("Feuil2").Range("F" & i) ' Qte manquante
    Next i
End Sub


Tu n'as pas répondu de travers, tu as répondu avec les infos que je t'ai donné, donc autant pour moi !

Donc je dois juste modifié les lignes après ton "For" pour qu'au lieu de se coller sur la même ligne, elles se collent sur des lignes différentes ?
 

Pieerre69

XLDnaute Junior
Bon, j'ai adapté ton code pour coller au mieux à mon besoin ! Ta solution (et ton code) fonctionne très bien, je te remercie pour ton aide.

Je met à dispo le code modifié si un jour il peut servir à quelqu'un de passage.

Merci Sylvanu :)

----------------------------------------------------------
VB:
Sub collecte_de_données()
' Calcul du nombre d'articles manquants
    nbligne = Application.WorksheetFunction.CountA(Feuil2.Range("A21:A40"))
' Calcul du numéro de cellule correspondant à la derniere ligne des articles manquants
    lignemax = 19 + 2 * nbligne
' Calcul de la première ligne libre de la feuille Magasin
    DerLig = (ThisWorkbook.Sheets("MAGASIN 6").Cells(65536, 1).End(xlUp).Row) + 1
' Récupération des infos de Feuil2 et rangement dans Magasin en dernière ligne
    For k = 0 To nbligne - 1
    Sheets("MAGASIN 6").Cells(DerLig + k, 1) = Sheets("Feuil2").Range("E13")  ' N° anomalie
    Sheets("MAGASIN 6").Cells(DerLig + k, 2) = Sheets("Feuil2").Range("E11")  ' N° OF
    Sheets("MAGASIN 6").Cells(DerLig + k, 3) = Sheets("Feuil2").Range("E15")  ' N° chantier
    Sheets("MAGASIN 6").Cells(DerLig + k, 4) = Sheets("Feuil2").Range("E17")  ' Modele chalet
    Sheets("MAGASIN 6").Cells(DerLig + k, 5) = Sheets("Feuil2").Range("E5")   ' Date du constat
    Sheets("MAGASIN 6").Cells(DerLig + k, 6) = Sheets("Feuil2").Range("E41")  ' Date de cloture
' Récupération de la matrice Feuill2 Article,designation,Qte manquante
' Et collage des infos dans la base Magasin.
    Next
    DerCol = 7
    For i = 21 To lignemax Step 2     ' De la ligne 21 à 40
        
        Sheets("MAGASIN 6").Cells(DerLig + j, DerCol + 0) = Sheets("Feuil2").Range("A" & i) ' Code article
        Sheets("MAGASIN 6").Cells(DerLig + j, DerCol + 1) = Sheets("Feuil2").Range("C" & i) ' Designation
        Sheets("MAGASIN 6").Cells(DerLig + j, DerCol + 2) = Sheets("Feuil2").Range("F" & i) ' Qte manquante
        j = j + 1
    Next i
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 721
Messages
2 081 928
Membres
101 842
dernier inscrit
seb0390