Macro Excel : formulaire et base de données

Bonjour à tous,

Je vous sollicite car j'ai un problème de macro sur excel.

J'ai un formulaire relié à une base de données, le tout sous excel. Chaque fois que le formulaire est rempli, les données doivent s'insérer automatiquement dans la base de données.

Grâce à l'enregistreur de macro, j'ai réussi à créer mamacro me permettant de réaliser cesi, cependant les données du formulaire s'insèrent toujours sur la même ligne de ma base en effaçant les précédentes. Comment pourrais-je insérer un code permettant d'aller à chaque fois sur une nouvelle ligne.

Voici le code de ma macro:

Sub Macro1()

'

' Macro1 Macro

' Macro enregistrée le 28/01/2008 par SARRUS-TEINTURIER

'

'

Range("B10:B12").Select

Selection.Copy

Sheets("Données").Select

ActiveWindow.ScrollColumn = 2

ActiveWindow.ScrollColumn = 3

ActiveWindow.ScrollColumn = 4

ActiveWindow.ScrollColumn = 5

ActiveWindow.ScrollColumn = 6

ActiveWindow.ScrollColumn = 7

Range("N10:P10").Select

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

False, Transpose:=True

Sheets("Saisie").Select

Range("B16").Select

Application.CutCopyMode = False

Selection.Copy

Sheets("Données").Select

ActiveWindow.SmallScroll ToRight:=-6

Range("B10").Select

ActiveSheet.Paste

Sheets("Saisie").Select

Range("B17").Select

Application.CutCopyMode = False

Selection.Copy

Sheets("Données").Select

Range("A10").Select

ActiveSheet.Paste

Sheets("Saisie").Select

Range("B18:B26").Select

Application.CutCopyMode = False

Selection.Copy

Sheets("Données").Select

Range("E10:M10").Select

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

False, Transpose:=True

ActiveWindow.ScrollColumn = 4

ActiveWindow.ScrollColumn = 3

ActiveWindow.ScrollColumn = 2

ActiveWindow.ScrollColumn = 1

Range("A11").Select

Sheets("Saisie").Select

Range("B10:B12,B16:B26").Select

Range("B16").Activate

Application.CutCopyMode = False

Selection.ClearContents

End Sub

Merci beaucoup pour votre aide.

Caro

Bonjour,

D'abord bienvenue sur ce forum.

Le mieux serait de voir ton fichier car sans cela il n'est pas facile de te proposer quelque chose surtout que tu parles de formulaire.

Dans ton code je ne vois que du copier coller et tu peux le remplacer par ce qui suit :

With Sheets("Saisie")
    .Range("B10:B12").Copy Destination:=Sheets("données").Range("N10:P10")
    .Range("B16").Copy Destination:=Sheets("données").Range("B10")
    .Range("B17").Copy Destination:=Sheets("données").Range("A10")
    .Range("B18:B26").Copy Destination:=Sheets("données").Range("E10:M10")
    .Range("B10:B12,B16:B26").ClearContents
End With

Fais quelques tests pour vérifier si tout fonctionne correctement.

A te relire

Dan

Bonjour,

Merci pour ta réponse rapide.

Je ne sais pas trop où insérer ton code dans le mien.

Je débute dans la programmation avec excel et c'est sûrement la raison qui fait que je ne suis pas claire dans ma macro.

Voici le lien pour accéder à mon fichier :

https://www.excel-pratique.com/~files/doc/BLOC_SARRUS.xls

Cordialement

Caro

re,

Comme quoi avec un fichier on comprend mieux.

Revoici ton fichier. Enregistre tes données dans la feuille Saisie puis clique sur ENREGISTRER.

Le fichier -> https://www.excel-pratique.com/~files/doc/SQulMBLOC_SARRUS_V1.xls

Amicalement

Dan

Edition: fichier modifié pour réattribuer le bouton à la macro

Bonjour Dan

Merci pour ton ai de hier.

Seulement j'ai testé ton fichier et j'ai toujours le même problème : chaque nouvelle saisie remplace la précédente au lieu de se mettre sur la ligne en dessous pour que je les garde toutes.

Amicalement

Caro

re,

Je ne vois pas ton pb. La seule chose que tu dois absolument faire c'est avoir un nom de patient. Sinon effectivement cela peut poser un problème.

Explique moi ce que tu fais

Fais aussi attention que j'ai édité mon post hier soir en replaçant le bon fichier. Es-tu sûr que tu as bien le bon ?

A te relire

Dan

Re,

Excuse-moi, j'avais fait mes tests rapidement et effectivement il n'y avait pas de nom de patient.

Tout marche très très bien.

Merci beaucoup pour ton aide.

Amicalement

Caro

Re,

Peut être serait-il intéressant de faire apparaitre une boite à message en cas d'absence de nom de patient. Dans ce cas, la macro ne s'exécuterait pas.

A toi de me dire

Dan

Re,

Je me suis permise de modifier et compléter ta macro afin qu'elle corresponde à mon doc qu'il a fallu améliorer. De plus, il m'a fallu relier la feuille saisie avec une autre feuille (indicateurs). Je me suis fortement inspirée de ta macro pour le faire mais maintenant plus rien ne marche. Il est evident que j'ai une erreur mais je ne sais pas où.

Peux-tu m'aider encore un peu ?

Voici le nouveau doc :

https://www.excel-pratique.com/~files/doc/Jj9qxBLOC.xls

Merci par avance pour ton aide.

Caro

Re,

Remplace ta macro pour celle-ci après :

Sub Sauvegarde()
'Macro par DAN pour Caroline - Excel Pratique le 29/01/08
'Copier dans Données
Dim ligne As Integer
Application.ScreenUpdating = False
With Sheets("saisie")
If .Range("B15") = "" Or .Range("B16") = "" Then
MsgBox "Veuillez compléter le N° de dossier et/ou le nom du patient"
Exit Sub
End If
End With
 With Sheets("données")
 ligne = .Range("B65536").End(xlUp).Row + 1
 .Cells(ligne, 1) = Sheets("saisie").Cells(10, 2).Value
 .Cells(ligne, 3) = Sheets("saisie").Cells(15, 2).Value
 .Cells(ligne, 2) = Sheets("saisie").Cells(16, 2).Value
 .Cells(ligne, 6) = Sheets("saisie").Cells(17, 2).Value
 .Cells(ligne, 7) = Sheets("saisie").Cells(18, 2).Value
 .Cells(ligne, 8) = Sheets("saisie").Cells(20, 2).Value
 .Cells(ligne, 9) = Sheets("saisie").Cells(21, 2).Value
 .Cells(ligne, 10) = Sheets("saisie").Cells(22, 2).Value
 .Cells(ligne, 11) = Sheets("saisie").Cells(23, 2).Value
 .Cells(ligne, 12) = Sheets("saisie").Cells(24, 2).Value
 .Cells(ligne, 13) = Sheets("saisie").Cells(25, 2).Value
 .Cells(ligne, 14) = Sheets("saisie").Cells(26, 2).Value
 End With

'Copier dans Indicateurs
 With Sheets("indicateurs")
 ligne = .Range("A65536").End(xlUp).Row + 1
 .Cells(ligne, 1) = Sheets("saisie").Cells(15, 2).Value
 .Cells(ligne, 2) = Sheets("saisie").Cells(32, 2).Value
 .Cells(ligne, 3) = Sheets("saisie").Cells(33, 2).Value
 .Cells(ligne, 4) = Sheets("saisie").Cells(34, 2).Value
 .Cells(ligne, 5) = Sheets("saisie").Cells(19, 2).Value
 .Cells(ligne, 6) = Sheets("saisie").Cells(27, 2).Value
 .Cells(ligne, 7) = Sheets("saisie").Cells(28, 2).Value
 .Cells(ligne, 8) = Sheets("saisie").Cells(25, 2).Value
 .Cells(ligne, 9) = Sheets("saisie").Cells(36, 2).Value
 End With
Sheets("saisie").Range("B10,B15:B28,B32:B36").ClearContents
End Sub

Amicalement

Dan

Re,

J'ai remplacé par ta macro mais ça ne remplis pas deux tableaux données et indicateurs .

Sais-tu pourquoi ?

Amicalement

Caro

re,

En fait j'ai omis de te dire une chose importante dans mon post précédent.

Tu as fusionné les titres (sur fond bleu) dans tes feuilles. Là tes titres sont sur 4 lignes (de 9 à 12).

A ne jamais faire. Cela n'apporte rien si ce n'est d'engranger des erreurs ou de faire de la bidouille dans les codes.

Laisse donc tes titres dans les deux feuilles sur la ligne 9 uniquement. Ensuite agrandis ta ligne 9 pour que cela fasse plus beau si tu veux.

Les premières données se placeront sur la ligne 10.

Amicalement

Dan

Tout marche à merveille.

Mille mercis pour tout : tes macros et tes précieux conseils.

Merci, merci, merci

Très amicalement

Caro

Rechercher des sujets similaires à "macro formulaire base donnees"