[Résolu] Copier cellules d'un tableau vers une autre feuille par macro

klorane

XLDnaute Occasionnel
Bonsoir à tous,


J'ai un tableau en feuil2 avec des valeurs (voir fichier joint en exemple).

Il faudrait qu'à l'aide d'une macro:

Etape 1):
Feuil2 "C3" se copie en feuil1 "F10"
Feuil2 "D3" se copie en feuil1 "H10"
Feuil2 "E3" se copie en feuil1 "D10"
Feuil2 "F3" se copie en feuil1 "P10"
Feuil2 "G3" se copie en feuil1 "B10"
Feuil2 "H3" se copie en feuil1 "O10"
Feuil2 "I3" se copie en feuil1 "C10"

2)Ensuite : j'appellerai une macro pour effectuer un travail dans la feuil1.

3)Effacement des valeurs en Feuil1 : "F10","H10","D10"....

4) retour étape 1 avec cette fois Copie des valeurs en Feuil2 "Ligne4"

etc. jusqu'à fin du tableau en feuil2.

Merci de votre aide

Klorane.
 

Pièces jointes

  • Classeur1.xlsm
    20.7 KB · Affichages: 71
  • Classeur1.xlsm
    20.7 KB · Affichages: 69
  • Classeur1.xlsm
    20.7 KB · Affichages: 73
Dernière édition:

fabi1joret

XLDnaute Junior
Re : Copier cellules d'un tableau vers une autre feuille par macro

Bonsoir à tous.

Quel type de travail veut tu effectuer. Une simple modification d'une référence ou autre chose?

Je pensait à un userform qui permet d'appeler une référence par liste déroulante pour la modifier. tout se fait dans l'userform. Plus de feuil1, on garde juste la feuil2 comme base de donnée pour les réfs.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Copier cellules d'un tableau vers une autre feuille par macro

Bonsoir Klorane, bonsoir le forum,

Essai comme ça :
Code:
Sub Bouton1_Cliquer()
Module1.Macro1 'lance la procédure "Macro1" du module "Module1"
End Sub
Code:
Sub Macro1()
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim li As Long 'déclare la variable li (LIgne)
Dim col As Byte 'déclare la variable col (COLonne)


With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    Set pl = Application.Union(.Range("F10"), .Range("H10"), .Range("D10"), .Range("P10"), .Range("B10"), .Range("O10"), .Range("C10"))
End With 'fin de la prise en compte de l'onglet "Feuil1"
With Sheets("Feuil2") 'prend en compte l'onglet "Feuil2"
    dl = .Cells(Application.Rows.Count, 3).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 3 (=C)
    For li = 3 To dl 'boucle 1 : des lignes 3 à dl
        col = 3 'initialise la colonne col
        For Each cel In pl 'boucle 2 : sur toutes les cellules cel de la plage pl
            cel.Value = .Cells(li, col) 'atribue à la cellule cel la valeur de la cellule en ligne li, colonne col de l'onglet "Feuil2"
            col = col + 1 'incrémente col
        Next cel 'prochaine cellule de la boucle 2
        'ici tu lanceras la macro de travail (Macro2, 3 lignes en dessous)
        'et supprimeras la ligne  en dessous du MsgBox qui est juste là pour l'exemple
        MsgBox "macro de travail"
        ' Module1.Macro2 'lance la procédure "Macro2" du module "Module1"
        pl.ClearContents 'efface le contenu des cellule de la plage pl
    Next li 'prochaine ligne de la boucle 1
End With 'fin de la prise en compte de l'onglet "Feuil2"
End Sub
Code:
Sub Macro2()
'ici le code de la macro de travail
End Sub

[Édition]
Bonsoir Fabi1Joret on s'est croisé...
 

klorane

XLDnaute Occasionnel
Re : Copier cellules d'un tableau vers une autre feuille par macro

Bonsoir à tous et merci pour votre contribution!

Robert, j'ai testé ta macro. Par contre je rencontre un soucis sur les emplacements

Marque, ref, couleur, quantité c'est bien placé

par contre : Lien se copie dans autre, autre se copie dans nom du produit, nom du produit se copie dans lien.

actuellement

Feuil2 "H." se copie dans feuil1 "C10" alors que feuil2 "H." devrait aller dans feuil1."O10"
Feuil2 "I." se copie dans feuil1 "D10" alors que feuil2 "I." devrait aller dans feuil1."C10"
Feuil2 "E." se copie dans feuil1 "O10" alors que feuil2 "E." devrait aller dans feuil1."D10"

pourtant c'est bien Set pl = Application.Union(.Range("F10"), .Range("H10"), .Range("D10"), ... qui determine l'ordre? si c'est ça l ordre ici est bon.

Je t'ai mis le classeur avec la macro en place pour que tu vois.


Klorane
 

Pièces jointes

  • Classeur1.xlsm
    24.9 KB · Affichages: 54
  • Classeur1.xlsm
    24.9 KB · Affichages: 61
  • Classeur1.xlsm
    24.9 KB · Affichages: 62
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Copier cellules d'un tableau vers une autre feuille par macro

Bonsoir le fil, bonsoir le forum,

En effet Klorane l'ordre d'entrée des cellules avec Application.Union n'est pas respecté. Essaie aolors comme ça :
Code:
Sub Bouton1_Cliquer()
Dim tb As Variant 'déclare le tableau de variables tb (TaBleau)
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim li As Long 'déclare la variable li (LIgne)
Dim col As Byte 'déclare la variable col (COLonne)
Dim pl As Range 'décalre la variable pl

tb = Array("F10", "H10", "D10", "P10", "B10", "O10", "C10")
With Sheets("Feuil2") 'prend en compte l'onglet "Feuil2"
    dl = .Cells(Application.Rows.Count, 3).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 3 (=C)
    For li = 3 To dl 'boucle 1 : des lignes 3 à dl
        col = 3 'initialise la colonne col
        For i = 0 To 5 'boucle 2 : sur les 6 cellules de l'onglet "Feuil1"
            'atribue à la cellule la valeur de la cellule en ligne li, colonne col de l'onglet "Feuil2"
            Sheets("Feuil1").Range(tb(i)).Value = .Cells(li, col)
            col = col + 1 'incrémente col
        Next i 'prochaine cellule de la boucle 2
        'ici tu lanceras la macro de travail (Macro2, 3 lignes en dessous)
        'et supprimeras la ligne  en dessous du MsgBox qui est juste là pour l'exemple
        MsgBox "macro de travail"
        ' Module1.Macro2 'lance la procédure "Macro2" du module "Module1"
        Set pl = Range("F10")
        For i = 1 To 5 'boucle 2 : sur les 6 cellules de l'onglet "Feuil1"
            Set pl = Application.Union(pl, Sheets("Feuil1").Range(tb(i)))
        Next i 'prochaine cellule de la boucle 2
        pl.ClearContents 'efface le contenu des cellules
    Next li 'prochaine ligne de la boucle 1
End With 'fin de la prise en compte de l'onglet "Feuil2"
End Sub
 

Discussions similaires