Je dispose d'un classeur excel composé (entre autres):
-d'une feuille "Base", semblable à une base de données;
-d'une feuille "Nouveau", qui est assimilable à un formulaire de saisie de données.
Les utilisateurs saisissent les données à ajouter à la base au moyen de la feuille Nouveau. Dès qu'une ligne est correctement remplie, le caractère "¤" apparait dans la cellule A.
Une macro sélectionne ensuite les lignes présentant le caractère "¤" dans la cellule A, les copie, puis les colle dans la feuille base.
L'ennui, c'est que je n'arrive pas à ajouter les nouvelles données à la suite des données déjà présentes dans la feuille base. Au lieu de celà, les lignes sont collées dans les premières lignes de la base, pire, elles remplacent les lignes déjà présentes !!!
Or, je souhaiterais que ces nouvelles lignes soient collées à la suite de celles déjà présentes...
Un grand merci aux âmes charritables qui sauront m'éclairer sur ce problème.
Je précise que je suis débutant en VBA. (
Voilà la macro en question:
Code:
Sub Updatebase()
' COPIE DES LIGNES DESIREES DANS LES FEUILLES DE CALCUL DEDIEES
Dim Rw As Range
Dim Ligne As Long
' Sélectionne l'ensemble des données (utile pour qu'Excel ne "réfléchisse" pas sur les 65000 lignes)
Sheets("Nouveau").Select
ActiveCell.SpecialCells(xlLastCell).Select
Range(Selection, Cells(1)).Select
For Each Rw In Selection.Rows
If Rw.Cells(1, 1).Value = "¤" Then
[COLOR="Red"]Rw.Copy Destination:=Worksheets("Base").Cells(Rw.Row, 1).EntireRow[/COLOR]
End If
Next
End Sub
Re : Formulaire de saisie et base de données sous Excel 2003
Salut Bastiense
Il faut rechercher dans ton code la dernière ligne occupée et écrire en dessous
Code:
If Rw.Cells(1, 1).Value = "¤" Then
[COLOR=green]DerLig = Worksheets("Base").Range("A" & Rows.Count).End(XlUp).Offset(1,0).Row
[/COLOR][COLOR=red]Rw.Copy Destination:=Worksheets("Base").Cells([COLOR=green]DerLig[/COLOR], 1).EntireRow[/COLOR]
End If
Re : Formulaire de saisie et base de données sous Excel 2003
C ok, ca marche !
Un grand merci à toi, BrunoM45.
Dernière petite question:
Dans la colonne B du "fameux" formulaire, une date est à insérer. Comment faire en sorte que les lignes de la feuille base soient automatiquement triées par date une fois les nouvelles données ajoutées ?
Encore merci d'avance ;-)
Re : Formulaire de saisie et base de données sous Excel 2003
Re,
Tu mets ton tri à la fin de ta sub, sinon ça va être trop long !
Si tu as une seule ligne d'entête de tableau dans ta base
Code:
Sub Updatebase()
' COPIE DES LIGNES DESIREES DANS LES FEUILLES DE CALCUL DEDIEES
Dim Rw As Range
Dim Ligne As Long
' Sélectionne l'ensemble des données (utile pour qu'Excel ne "réfléchisse" pas sur les 65000 lignes)
Sheets("Nouveau").Select
ActiveCell.SpecialCells(xlLastCell).Select
Range(Selection, Cells(1)).Select
For Each Rw In Selection.Rows
If Rw.Cells(1, 1).Value = "¤" Then
[COLOR=red][COLOR=#008000]DerLig = Worksheets("Base").Range("A" & Rows.Count).End(XlUp).Offset(1,0).Row[/COLOR]
Rw.Copy Destination:=Worksheets("Base").Cells([COLOR=green]DerLig[/COLOR], 1).EntireRow
[/COLOR]End If
Next
[COLOR=blue]' Trier les dates par ordre coissant ICI[/COLOR]
[COLOR=blue] Set Sht = Worksheets("Base")[/COLOR]
[COLOR=blue] Sht.Rows("1:" & DerLig + 1).Sort Key1:=Sht.Range("B2"), _[/COLOR]
[COLOR=blue] Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, _[/COLOR]
[COLOR=blue]MatchCase:=False,Orientation:=xlTopToBottom[/COLOR]
[COLOR=blue]Set Sht = Nothing[/COLOR]
End Sub
Re : Formulaire de saisie et base de données sous Excel 2003
Salut Bastiense,
Si tu as 2 lignes d'entête il faut remplacer le début de la ligne de tri Sht.Rows("1:" & DerLig + 1).Sort Key1:=Sht.Range("B2") Par Commencer le tri à la ligne 2 (entête de ligne) Sht.Rows("2:" & DerLig + 1).Sort Key1:=Sht.Range("B3")