Bonjour,
Y a-t-il des instructions VBA Excel 2003 qui permettent de copier certaines lignes d'une base de données contenue dans une feuille de calcul et de les coller dans une feuille vierge ?
Merci d'avance
AVNAIM
Bonjour,
Y a-t-il des instructions VBA Excel 2003 qui permettent de copier certaines lignes d'une base de données contenue dans une feuille de calcul et de les coller dans une feuille vierge ?
Merci d'avance
AVNAIM
Bonjour,
Copy, Paste, Pastespecial à moins que je n'aie loupé un truc dans la question ...
Merci de vouloir bien m'aider.
Avec Copy Je dois indiquer la feuille ou se trouve la Base de données et le N° de ligne à sélectionner par VBA, je ne sais pas comment écrire tout cela
Un petit exemple de code m'aiderait bien
A nouveau merci
AVNAIM
Salut,
Dans Visual Basic Editor, tu tapes copy, tu mets le curseur dessus et tu appuies sur F1. Après tu recommences avec paste et pastespecial
Aide toi...
bonjour,
ou encore :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 sheets(le nom de ta feuille).range(la plage a copier).copy sheets(la feuille de destination).range(la destination)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 sheets(le nom de ta feuille).range(la plage a copier).copy sheets(la feuille de destination).range(la destination).pastespecial
Bonjour et merci Machekeul
Je vais essayer ça je crois que cela devrait marcher
je te tiendra au courant des résultats
Encore merci Cordialement et à +
AVNAIM
ReBonjour,
Voilà :
Petit problème c'est la plage à copier. Le N° de ligne n'est pas le même à chaque clic du bouton ajouter Je l'obtiens donc sous forme de variable Or Range n'accepte pas de variable à coté de la colonne, il lui faut un nombre.
Voici ma procédure :
Peut être il y aurait une solution avec Cells mais je ne comprends pas bien le fonctionnement de cette fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Option Explicit Public Cat As String Private Sub CommandButton1_Click() Dim L As Integer Dim i As Integer For i = 0 To ListBox3.ListCount - 1 If ListBox3.Selected(i) Then L = i + 7 ListBox4.AddItem (L) Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 2).End(xlUp)(2) = L Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 1).End(xlUp)(2) = Cat ' La var cat récupère le nom de la feuille où se trouve l'élément sélectionné ' Avec Cells j'obtiens donc dans ma feuille le nom de celle où je dois extraire et le N° de ligne 'Worksheets(Cat).Range("AL:TL").Copy Worksheets("A_Vous_de_Jouer").Range("AL:TL") End If Next i End Sub
Peut être trouverez vous une combine ?
Merci d'avance
AVNAIM
Bonjour,
Si je comprend bien ce que tu essayes d'obtenir, la variable L doit récupérer le numéro de ligne de la première cellule vide dans la colonne B, il faut donc préciser que c'est le numéro de ligne que tu veux
Concernant la variable Cat, il y a un problème parce que là tu lui dit de prendre la valeur de la première cellule vide de la colonne A. Donc Cat sera vide également et Sheets(Cat) te renverra une erreur. Si c'est la valeur de la dernière cellule que tu souhaites récupérer, il faut enlever l'offset (2)
Code : Sélectionner tout - Visualiser dans une fenêtre à part Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 2).End(xlUp)(2).Row = L
Ensuite pour utiliser la variable L dans ta syntaxe, 2 possibilités :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 1).End(xlUp) = Cat
Pour terminer, 2 petites remarques :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Worksheets(Cat).Range("A" & L & ":T" & L).Copy Worksheets("A_Vous_de_Jouer").Range("A" & L & ":T" & L) 'soit Worksheets(Cat).Range(Cells(L, 1), Cells(L, 20)).Copy Worksheets("A_Vous_de_Jouer").Range(Cells(L, 1), Cells(L, 20))
Si tout se passe dans le Classeur "Gestion-Alimentaire", il n'est pas nécessaire de préciser Workbooks("Gestion_Alimentaire") dans ton code, ce qui l'allègera.
Pense à utiliser la balise [ Code ]...[ /Code ] à l'aide du bouton # pour mieux faire ressortir le code du reste du texte![]()
Bonjour Fring
Les deux premières lignes de code écrites en suivant tes conseils marchent parfaitement bien. Elles réalisent la copie des éléments sélectionnés ( feuille et N° de ligne) placés dans la ListBox4 vers ma feuille de calcul vierge .Dans la colonne A j'obtiens le nom de la feuille Colonne B le N° de ligne et l'utilisateur peut entrer dans la colonne C les quantités.
Il me faut maintenant extraire toute la ligne(Colonnes A à T) dont j'ai le N°, de la feuille dont j'ai le nom, afin de faire les calculs en fonction des quantités entrées par l'utilisateur
J'ai essayé:
J'obtiens le message d'erreur "l'indice n'appartient pas à la sélection "
Code : Sélectionner tout - Visualiser dans une fenêtre à part Worksheets(Cat).Range("A" & L & ":T" & L).Copy Worksheets("A_Vous_de_Jouer").Range("A" & L & ":T" & L)
Et aussi
Erreur (1004) "Erreur définie par l'application ou par l'objet "
Code : Sélectionner tout - Visualiser dans une fenêtre à part Worksheets(Cat).Range(Cells(L, 1), Cells(L, 20)).Copy Worksheets("A_Vous_de_Jouer").Range(Cells(L, 1), Cells(L, 20))
En fait ces lignes correspondent parfaitement à ce que je désire et il n'y a pas d'erreur de syntaxe. Les deux messages sont pour ma petite cervelle deux sentences hermétiques ! mais toi peut être sauras tu les déchiffrer ?
Merci encore pour ton Aide
AVNAIM
je devais être très fatigué...il faut inversé la syntaxe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 L = Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 2).End(xlUp)(2).Row Cat = Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 1).End(xlUp)
Mon cher Fring c'est peut être moi la cause de ta fatigue mais c'est que tu es ma bouée de sauvetage !
Cette fois pas de message d'erreur mais les lignes appelées ne s'affichent pas
Ma Sélection sur la feuille vierge fonctionne toujours j'ai Colonne A le nom des feuilles sélectionnées et en B les N°s de ligne mais je m'aperçoit que dans les lignes inversées le mot copy ne figure pas c'est peut être la raison ?
Cordialement à +
Avnaim
Bonjour Fring ,
Voici donc le code complet
La variable public Cat récupère le nom de la base à chaque clic des boutons options
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 Option Explicit Public Cat As String Private Sub CommandButton1_Click() Dim L As Integer Dim i As Integer For i = 0 To ListBox3.ListCount - 1 If ListBox3.Selected(i) Then L = i + 7 ListBox4.AddItem (L) Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 2).End(xlUp)(2) = L Workbooks("Gestion_Alimentaire").Worksheets("A_Vous_de_Jouer").Cells(Rows.Count, 1).End(xlUp)(2) = Cat ' Worksheets(Cat).Range("A" & L & ":T" & L).Copy 'Worksheets("A_Vous_de_Jouer").Range("A" & L & ":T" & L) End If Next i End Sub ------------- Private Sub CommandButton2_Click() ' bouton terminer Feuil10.Activate UserForm3.Hide UserForm2.Hide End Sub ------------- Private Sub OptionButton1_Click() ListBox3.RowSource = "" Feuil4.Activate ListBox3.RowSource = "$B$7:$C$100" ListBox4.AddItem " Viandes..." Cat = "viandes" End Sub -------- Private Sub OptionButton2_Click() ListBox3.RowSource = "" Feuil3.Activate ListBox3.RowSource = "$B$7:$C$100" ListBox4.AddItem "Charcuterie..." Cat = "Charcuterie_Volailles" End Sub ---------- Private Sub OptionButton3_Click() ListBox3.RowSource = "" Feuil1.Activate ListBox3.RowSource = "$B$7:$C$100" ListBox4.AddItem "Poissons..." Cat = "Poissons_Crustacés_Mollusques" End Sub ------------- Private Sub OptionButton4_Click() ListBox3.RowSource = "" Feuil2.Activate ListBox3.RowSource = "$B$7:$C$100" ListBox4.AddItem " oeufs,lait..." Cat = " oeufs_lait et dérivés" End Sub -------------- Private Sub OptionButton5_Click() ListBox3.RowSource = "" Feuil5.Activate ListBox3.RowSource = "$B$7:$C$100" ListBox4.AddItem " Céréales et dérivés" Cat = " Céréales et dérivés_Gateaux" End Sub -------------------- Private Sub OptionButton6_Click() ListBox3.RowSource = "" Feuil6.Activate ListBox3.RowSource = "$B$7:$C$100" ListBox4.AddItem "Légumes, purées..." Cat = "Légumes_Purées_Potages" End Sub --------------- Private Sub OptionButton7_Click() ListBox3.RowSource = "" Feuil7.Activate ListBox3.RowSource = "$B$7:$C$100" ListBox4.AddItem " fruits....." Cat = " fruits" End Sub --------------- Private Sub OptionButton8_Click() ListBox3.RowSource = "" Feuil8.Activate ListBox3.RowSource = "$B$7:$C$100" ListBox4.AddItem " Divers, graisses.." Cat = " Divers" End Sub
La listeBox 3 liste 2 éléments de ligne ( Denrée et type) de toute la base sélectionnée par le bouton option et l'utilisateur sélectionne une ligne (i dans la listeBox) et clique le bouton Ajouter
Le N° de ligne dans la base (i+7) vient alors s'ajouter dans la listBox 4 et grace aux deux lignes que tu m'as fait rajouter je retrouve dans ma feuille vierge le nom de la base en colonne A et le N° de ligne en colonne B. L'utilisateur peur alors entrer dans les cellules de la colonne C la quantité utilisée
Mon problème est maintenant d'extraire Chaque ligne complète ( Colonnes A à T) de chaque base vers ma feuille de calcul pour pouvoir effectuer les calculs .
J'espère n'avoir pas été trop confus dans mes explications.
Merci infiniment de m'aider
Très cordialement
AVNAIM
Je commence à y voir plus clair mais cela reste malgré tout encore un peu nébuleux.
Donc sur la feuille "a vous de jouer", sur la dernière ligne de la colonne A tu insères la valeur de la variable "CAT" et sur la dernoère ligne de la colonne B tu insères la valeur de la variable "L", jusque là c'est ça ?
Alors supposons que CAT = viandes et L = 7
Tu récupères la ligne A7:T7 de la feuille "viandes" que tu colles dans la feuille "a vous de jouer".
Ce qui reste nébuleux pour moi c'est où tu veux coller les données dans la feuille "a vous de jouer":
- sur la ligne A7:T7 également ?
- ou sur la première ligne vide dans laquelle tu as précédemment inscrit les valeurs de CAT et de L ? auquel cas, selon ton code tu écrases les valeurs CAT et L ???
Si tu pouvais essayer de m'expliquer cette dernière partie
C'est vrai faut être un peu devin pour me comprendre :
La procédure CommandBouton1 c'est le bouton Ajouter du UserForm
Quand l'utilisateur a sélectionné une ligne de la listbox 3 du User Form il clique le bouton Ajouter Il voit alors un N° de ligne dans la liste box 4 qui correspond au N° de ligne de la listBox3 (i) plus 7 (i+7) = L c'est le N° de ligne dans la base de données.
Simultanément j'obtiens dans ma feuille vierge " A vous de jouer " colonne A nom de la base (cat) et en B N° de ligne (L) dans la base Cat grâce au deux lignes de code (Workbooks(….) de la procédure Ajouter
Pour l'exemple Cat = Viande et L = ( i+ 7 ) J'ai un nombre qui correspond au N° de ligne dans la catégorie Viandes et qui peut être 78, 33, 94…. Selon la valeur de i (ligne sélectionnée dans la list Box3 du UserForm .
L'utilisateur fait toutes ses sélections et clique alors le bouton CommandBouton2 (Terminer) qui m'affiche la feuille 'à vous de jouer" où sont écrites toutes les sélections faites colonne A les catégories , colonne B les N° de ligne .
Je voudrais maintenant copier a compter de la première ligne vide de la feuille les lignes dont j'ai le N° c'est-à-dire la plage A & Noligne : T & Noligne dans la catégorie dont j'ai le nom , afin d'effectuer les calculs .
Peut être y vois tu maintenant un peu plus clair dans mon fouillis ?
Merci de nouveau pour ton aide
Avnaim
oui ok mais je vais reformuler ma question autrement
dans un premier temps tu insères sur la première ligne vide (disons la ligne 5) de ta feuille "vierge" les variables CAT et L, tu as donc en A5 = viandes et en B5 = 33
Les valeurs A33:T33 que tu récupères dans la feuille(CAT) tu veux à ce moment là les copier sur la première ligne vide, c'est à dire sous CAT et L précédemment introduit en A5 et B5, c'est à dire en A6:T6 ?
Si c'est bien ça, voici une proposition que tu pourras peut-être adapter si ce n'est pas ça que tu souhaites obtenir
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Private Sub CommandButton1_Click() Dim L As Integer, i As Integer, DerL As Integer Dim Sh As Worksheet Set Sh = Sheets("A_Vous_de_Jouer") '<-- uniquement pour simplifier l'écriture du code par la suite DerL = Sh.Cells(Rows.Count, 1).End(xlUp)(2).Row For i = 0 To ListBox3.ListCount - 1 If ListBox3.Selected(i) Then L = i + 7 ListBox4.AddItem (L) Sh.Cells(DerL, 2) = L Sh.Cells(DerL, 1) = Cat Worksheets(Cat).Range("A" & L & ":T" & L).Copy Sh.Range("A" & DerL + 1) End If Next i End Sub
Partager