Formulaire de saisie et base de données sous Excel 2003

bastiense

XLDnaute Nouveau
Bonjour à tous ! :):):)

Bon, je me lance... :rolleyes:

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
 
C

Compte Supprimé 979

Guest
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

Essaye ça ;)
 

bastiense

XLDnaute Nouveau
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 ;-)
 
C

Compte Supprimé 979

Guest
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

A+
 
Dernière modification par un modérateur:
C

Compte Supprimé 979

Guest
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")

Voilà ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16