Copie de données

bonjour le forum,

je continue ma découverte des macros grace à vous (GMB et Thau theme pour ne citer que vous !).

alors j'ai un usf qui me remplit un tableau de données dans la feuille SAISIE.

je souhaite récupérer dans un tableau dans une feuilles nommées PAYS les données des colonnes A, B,C, D, E et F de la feuille SAISIE.

donc j'ai créé un bouton dans mon usf qui quand je clique dessus devrait d'abord m'effacer toutes les données existantes dans le tableau de la feuille PAYS et faire tout ceci ensuite.

Mon code est :

M= sheets("PAYS").range("a100").end(xlup).row +1

L= sheets("SAISIE").range("A100").end(xlup).row+1

sheets("PAYS").range("a:f").select

selection.clearcontents

sheets("Pays").range("a"&m).value = sheets("SAISIE").range("A"&L).value

Et la mystère il de ne se passe rien o:(

si je souhaite faire cela, c'est qu'à tout moment grace à du code que m'a expliqué GMB je pouvais modifié les enregistrements de données.

si un(ou une) gentil internaute pouvait m'aiguiller ce serait super sympa

merci à l'avance

anna

Bonjour Anna, bonjour le forum,

Ton code actuel commenté :

m = Sheets("PAYS").Range("a100").End(xlUp).Row + 1 'tu définis la première ligne vide m de la colonne A de l'onglet "PAYS"
L = Sheets("SAISIE").Range("A100").End(xlUp).Row + 1 'tu définis la première ligne VIDE L de la colonne A de l'onglet "SAISIE"
Sheets("PAYS").Range("a:f").Select 'tu sélectionnes les colonnes A à F de l'onglet PAYS
Selection.ClearContents 'tu effaces le contenu de ces colonnes
'tu récupères dans la ligne m (pourquoi dans cette ligne et pas dans la ligne 1 ? ) de la colonne A de l'onglet "PAYS" la valeur de la colonne A, ligne L de l'onglet "SAISIE" (qui est forcément vide !)
Sheets("Pays").Range("a" & m).Value = Sheets("SAISIE").Range("A" & L).Value

Ce que je te propose mais je suis pas sûr que ce soit ça que tu veux :

Dim L As Integer 'déclare la variable L (Ligne)

L = Sheets("SAISIE").Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée L de la colonne 1 (=A) del'onglet "Saisie"
Sheets("PAYS").Range("a:f").ClearContents ' efface le contenue des colonnes A à F de l'onglet "PAYS"
'récupère dans la cellule A1 de l'onglet "PAYS" la valeur de la dernière cellule éditée en colonne A de l'onglet "SAISIE"
Sheets("PAYS").Range("A1").Value = Sheets("SAISIE").Cells(L, 1).Value 

bonjour Thau Thème,

Merci encore une fois de ton aide et surtout de ton explication. Effectivement si je voulais récupérer des données VIDES je n'aurai pas mieux fait !!!!.

On n'est pas loin du compte.

en vrai je veux récupérer toutes les cellules remplies de la colonne A de SAISIE dans la colonne A de Pays et non uniquement la dernière cellule remplie.

anna

Bonjour Anna, bonjour le forum,

Alors essaie comme ça :

Dim L As Integer 'déclare la variable L (Ligne)

L = Sheets("SAISIE").Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée L de la colonne 1 (=A) del'onglet "Saisie)
Sheets("PAYS").Range("a:f").ClearContents ' efface le contenue des colonnes A à F de l'onglet "PAYS"
'récupère dans la cellule A1 de l'onglet "PAYS" la valeur de la derniere cellule éditée en colonne A de l'onglet "SAISIE"
Sheets("SAISIE").Range("A1:A" & L).Copy Sheets("PAYS").Range("A1")

re thau theme,

c'est excellent mais pas tout à fait ce que je souhaite. Je vais essayer d'expliquer

je souhaite copier la premiere cellule remplie en A dans SAISIE dans la cinquieme ligne de la colonne A de PAYS, la seconde cellule remplie de saisie dans la 10me ligne de pays, etc

donc un décallage de 5 ligne entre chaque copie.

peut être une boucle du style

pour chaque cellule remplie la coller dans la cinquieme cellule libre après la dernière remplie ?

qu'en penses tu ?

merci

anna

Bonjour Anna, bonjour le forum,

Essaie ce code :

Sub Macro1()
Dim L As Integer 'déclare la variable L (Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim DEST As Range 'déclare la variablwe DEST (cellule de DESTination)

L = Sheets("SAISIE").Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée L de la colonne 1 (=A) del'onglet "Saisie)
Set PL = Sheets("SAISIE").Range("A1:A" & L)
Sheets("PAYS").Range("a:f").ClearContents ' efface le contenue des colonnes A à F de l'onglet "PAYS"
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
    'définit la cellule de destination DEST (A5 si A5 est vide, sinon la cellule 5 lignes en dessous la dernière ligne éditée de la colonne A)
    Set DEST = IIf(Sheets("PAYS").Range("A5").Value = "", Sheets("PAYS").Range("A5"), Sheets("PAYS").Cells(Application.Rows.Count, 1).End(xlUp).Offset(5, 0))
    CEL.Copy DEST 'copie la cellule CEL dans DEST
Next CEL 'prochaine cellule de la boucle
End Sub

re re bonjour le forum,

OYE OYE OYE

voilà un internaute formidable ! il a trouvé la solution à mon problème !

MERCI THAU THEME de ton aide et je suis certaine que cela aidera d'autres internautes.

j'aurai pus chercher dans tous les sens je n'aurai jamais trouver sans ta logique excellienne.

Si bien que j'ai plus l'adapter à d'autres plage de cellules.

en attendant je te remercie encore vivement pour ton aide très précieuse.

Lorsque j'aurai fini mon projet je le publierai sur ce site pour tous.

Dans ce projet, je tiens également à remercier GMB qui m'a beaucoup orienté sur dans mes USF.

bises à toutes et à tous,

anna

Bonjour Anna, bonjour le forum,

Arf ! Mort de rire... Mais je confirme, gmb c'est la grande classe !

bonjour le forum,

j'espère que vous avez passé un bon week end. Moi j'ai travaillé tout le w.e sur mon fichier.

Alors je reviens vers vous pour la suite des événements :

Pour rappel :

j'ai une ligne avec des données en A, B, C, D, E et F

grace aux codes de Thau theme et GMB reporter les élements de la colonnes A du classeur SAISIEtoutes les 5 lignes dans la colonne A du classeur PAYS.

Par contre je souhaite coller dans la colonne C, 1ere ligne du classeur PAYS la valeur de C, ligne x du classeur SAISIE

C, 2me ligne du classeur PAYS la valeur de D, ligne x du classeur SAISIE

C, 3me ligne du classeur PAYS la Valeur de E, ligne x du classeur SAISIE

ensuite je boucle sur le code précédente à la ligne suivante

je vous joint un petit fichier en exemple pour essayer de me faire comprendre :

17exemple.xls (13.50 Ko)

en vous remerciant de votre aide, guide à l'avance

anna

re bonjour forum,

un petit up car j'essaie de comprendre une petite chose

avec ce code je comprends que la cellule de destination sera decalée de 5 après la dernière ligne editée

For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL

'définit la cellule de destination DEST (A5 si A5 est vide, sinon la cellule 5 lignes en dessous la dernière ligne éditée de la colonne A)

Set DEST = IIf(Sheets("PAYS").Range("C3").Value = "", Sheets("PAYS").Range("C3"), Sheets("PAYS").Cells(Application.Rows.Count, 3).End(xlUp).Offset(5, 0))

CEL.Copy DEST 'copie la cellule CEL dans DEST

or moi ce que je souhaite ce n'est pas la dernière ligne éditée mais la 5 lignes après c3;

Donc j'ai codé comme ceci :

For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL

'définit la cellule de destination DEST (A5 si A5 est vide, sinon la cellule 5 lignes en dessous la dernière ligne éditée de la colonne A)

Set DEST = IIf(Sheets("PAYS").Range("c3").Value = "", Sheets("PAYS").Range("c3"), Sheets("PAYS").Cells(3, 3).Offset(5, 0))

CEL.Copy DEST 'copie la cellule CEL dans DEST

et la MISERE il ne me copie que la premiere cellule qu'il trouve et non toutes les cellules

help please

merci à l'avance

anna

Bonsoir Anna, bonsoir le forum,

Le code ci-dessous complètement adapté à ton exemple. Si tu changes tout le temps tu vas avoir du mal à t'y retrouver...

Sub Macro1()
Dim S As Object 'déclare la variable S (onglet Saisie)
Dim P As Object 'déclare la variable S (onglet Pays)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim dest As Range 'déclare la variable DEST (cellul de DESTination)
Dim K As Integer 'déclare la variable K (incrément)

Set S = Sheets("SAISIE") 'définit l'onglet S
Set P = Sheets("PAYS") 'définit l'onglet P
DL = S.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet S
TC = S.Range("A1:G" & DL) 'définit le tableau de cellules TC
For I = 1 To UBound(TC, 1) 'boucle 1 : sur toutes les lignes du tableau TC
    J = 1 'initialise la variabel J
    'définit la cellule de destination DEST (B1, si B1 est vide, sinon la première cellule vide de la colonne B de l'onglet P)
    Set dest = IIf(P.Range("B1").Value = "", P.Range("B1"), P.Cells(Application.Rows.Count, 2).End(xlUp).Offset(1, 0))
    dest.Offset(0, -1).Value = TC(I, 1) 'place le pays dans la cellule, à gauche de DEST
    For K = 0 To 2 'boucle 2 : de 0 à 2
        'place la valeur du tableau TC ligne : I, colonne : 2*J, dans DEST
        'décalée de K lignes vers le bas et de 0 colonne vers la droite
        dest.Offset(K, 0).Value = TC(I, (2 * J))
        'place la valeur du tableau TC ligne : I, colonne : (2*J)+1, dans DEST
        'décalée de K lignes vers le bas et de 1 colonne vers la droite
        dest.Offset(K, 1).Value = TC(I, (2 * J) + 1)
        J = J + 1 'incrémente J
    Next K 'prochain valeur de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub

bonjour le forum, bonjour Thau Theme

Il est de bon usage de dire qu'une femme ne sait jamais ce qu'elle veut mais qu'elle a toujours ce qu'elle veut. Et sincèrement je suis désolée si je t'ai embêté avec mes caprices... Mais, c'est fini Thau Theme, et grâce à toi j'ai fini mon travail et j'ai l'honneur de te le présenter....

Comme tu as pu le remarquer, je n'ai pas utilisé ton bout de code mais j'ai essayé de réfléchir comme toi et j'ai créer une boucle dans une boucle avec un compteur... (bon j'avoue que j'ai cherché aussi sur le net ! mais je te promets que j'ai écrit le code toute seule!!).

certes il doit être amélioré, par exemple centrer les cellules fusionnées, faire des cadres pour chaque pays, etc...

mais aujourd'hui je suis fière de mon boulot, et ce grâce à toi et GMB...

en attendant merci beaucoup le forum et au plaisir de vous lire

anna

Bonjour Anna, bonjour le forum,

Bravo ! Mais il y a un grand mais... Maintenant que tu as mordu dans VBA et que tu y a pris du plaisir tu ne vas plus t'arrêter... Alors bon vent et bonne pêche (aux macros évidemment) !

Rechercher des sujets similaires à "copie donnees"