Saisie de données par formulaire Excel [Résolu]

Edouardt 10 Messages postés lundi 8 janvier 2007Date d'inscription 9 janvier 2007 Dernière intervention - 8 janv. 2007 à 16:36 - Dernière réponse : hordmomo 3 Messages postés mercredi 10 octobre 2007Date d'inscription 24 novembre 2007 Dernière intervention
- 24 nov. 2007 à 20:41
Bonjour,
Je voudrais faire un fichier Contact (13 champs) sous excel avec un onglet "base de données" et un onglet "formulaire". L'idée étnt d'utiliser le formulaire dans onglet "formulaire" pour alimenter la feuille "base de données".
J'ai utilisé une macro sur Internet pour le faire mais visiblement il y a une erreur sur de code. Ca coince sur cette linge a priori :
Range("A1").Select"
Bien sûr je n'y connais rien en programmation ! Pourriez-vous m'aider svp ? Me dire comment faire et si vous voyez d'autres anomalies. Merci bcp pour votre réponse !

Sub transpose_dans_tableau()
'Atteindre le formulaire et mémoriser les donées
Sheets("Formulaires").Select
Range("B1:B13").Select
Selection.Copy
'Test pour détermier la ligne ou coller les infos dans le tableau
Sheets("Base de données").Select
valeurA2 = Range("A2").Value
If valeurA2 = "" Then
Range("A2").Select
Else
Range("A1").Select
Selection.End(x1Down).Select
ligne_active_base = ActiveCell.Row
Range("A" & ligne_active_base + 1).Select
End If
'Mémorise le n° de la ligne où coller les données
ligne_active_base = ActiveCell.Row
'Collage avec transposition
Range("A" & ligne_active_base).Select
Selection.PasteSpecial Paste:=xPasteAllExceptBorders, _
Operation:=x1None, SkipBlanks:=False, Transpose:=True
'Rendre vierge le formulaire
Sheets("Formulaire").Select
Range("B1:B13").Select
Selection.ClearContents
Range("B1").Select
'Retourner dans le tableau
Sheets("Base de données").Select
Range("A1").Select
End Sub
Afficher la suite 

Votre réponse

22 réponses

jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 8 janv. 2007 à 16:42
+3
Utile
Salut,
Lorsque tu dis ca coince, est ce que VB te donne une erreur si oui laquelle?

@+: Ju£i?n
Pensez: Réponse acceptée
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jrivet
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 8 janv. 2007 à 16:50
+3
Utile
Juste un petit conseil, évite Opera pour poster sur le forum, préfere IE ou Firefox, ça passera mieux.

Le code remis en forme :

Sub transpose_dans_tableau()
    'Atteindre le formulaire et mémoriser les
donées
    Sheets("Formulaires").Select
    Range("B1:B13").Select
    Selection.Copy
    'Test pour détermier la ligne ou coller les infos dans
le tableau
    Sheets("Base de données").Select
    valeurA2 =
Range("A2").Value
    If valeurA2 = "" Then
        Range("A2").Select
    Else
         Range("A1").Select
         Selection.End(x1Down).Select
         ligne_active_base =
ActiveCell.Row
         Range("A" & ligne_active_base + 1).Select
    End If
    'Mémorise le n° de la ligne où coller les données
    ligne_active_base =
ActiveCell.Row
    'Collage avec transposition
    Range("A" &
ligne_active_base).Select
    Selection.PasteSpecial
Paste:=xPasteAllExceptBorders, _ Operation:=x1None, SkipBlanks:=False,
Transpose:=True
    'Rendre vierge le formulaire
    Sheets("Formulaire").Select
    Range("B1:B13").Select
    Selection.ClearContents
    Range("B1").Select
    'Retourner dans le tableau
    Sheets("Base de données").Select
    Range("A1").Select
End Sub

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_casy
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 8 janv. 2007 à 16:55
+3
Utile
Salut,

Place Activesheet devant Range soit

ActiveSheet.Range("A1").Select

@+: Ju£i?n
Pensez: Réponse acceptée
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jrivet
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 8 janv. 2007 à 23:40
+3
Utile
>>Selection.End(x1Down).Select
à changer le 1(un) pour un L(elle)
Selection.End(xlDown).Select

MPi
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_MPi
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 9 janv. 2007 à 11:43
+3
Utile
Operation:=x1None

encore un 1 à changer pour un L

Écrit Option Explicit tout en haut de ta page de code et roule à nouveau ta macro.
Tu risques d'en trouver d'autres

MPi
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_MPi
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 9 janv. 2007 à 12:06
+3
Utile
Salut,
En fait ce n'est pas cette ligne qui pose problème mais plus celle où tu utilise ValeurA2 sans la déclarer.
Tiens voici donc ce que tu devrais avoir. (je ne dis pas qu il ne reste pas des erreurs.)

En revanche fait bien un copier coller sinon tu va revenir avec une erreru sur xPasteAllExceptBorders qui en fait est xl
PasteAllExceptBorders

Donc:

Option Explicit 

Sub transpose_dans_tableau() 
Dim ValeurA2 As String 
Dim Ligne_active_base As Long 
    'Atteindre le formulaire et mémoriser les donées
    Sheets("Formulaire").Select 
    Range("B1:B13").Select 
    Selection.Copy 
    'Test pour détermier la ligne ou coller les infos dans le tableau
    Sheets("Base de données").Select 
    ValeurA2 = Range("A2").Value 
    If ValeurA2 = "" Then 
        Range("A2").Select 
    Else 
        ActiveSheet.Range("A1").Select 
        Selection.End(xlDown).Select 
        Ligne_active_base = ActiveCell.Row 
        Range("A" & Ligne_active_base + 1).Select 
    End If 
    'Mémorise le n° de la ligne où coller les données
    Ligne_active_base = ActiveCell.Row 
    'Collage avec transposition
    Range("A" & Ligne_active_base).Select 
    Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, SkipBlanks:=False, Transpose:=True 
    'Rendre vierge le formulaire
    Sheets("Formulaire").Select 
    Range("B1:B13").Select 
    Selection.ClearContents 
    Range("B1").Select 
    'Retourner dans le tableau
    Sheets("Base de données").Select 
    Range("A1").Select 
End Sub 

@+: Ju£i?n
Pensez: Réponse acceptée
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jrivet
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 9 janv. 2007 à 14:23
+3
Utile
Re,
Tiens essaie de regarder si ce code peu te convenir.

Option Explicit
Sub Transpose_dans_Tableau()
    'Copie la zone B1=>B13 de la feuille formulaire
    ActiveWorkbook.Worksheets("Formulaire").Range("B1:B13").Copy
    'Selectionne la cellule A2 de la feuile Base de données
    ActiveWorkbook.Worksheets("Base de données").Range("A2").Select
    'Si la cellule n'est pas vide alors on selectionne la premiere cellule vide de la colonne
    If ActiveCell.Value <> vbNullString Then ActiveSheet.Range("A" & ActiveCell.End(xlDown).Row + 1).Select 
    'On colle
    Call Selection.PasteSpecial(Paste:=xlPasteAllExceptBorders, Operation:=xlNone, SkipBlanks:=False, Transpose:=True) 
    'Efface le contenu de la zone B1=>B13 de la feuille formulaire
    ActiveWorkbook.Worksheets("Formulaire").Range("B1:B13").ClearContents 
End Sub 

@+: Ju£i?n
Pensez: Réponse acceptée
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jrivet
Edouardt 10 Messages postés lundi 8 janvier 2007Date d'inscription 9 janvier 2007 Dernière intervention - 8 janv. 2007 à 16:52
0
Utile
Salut Julien !
Quand j'utilise le bouton d'action "Enregistrer" auquel j'ai rattaché la macro, j'ai le message d'érreur suivant :
"Erreur d'exécution 1004.
La méthode "Select" de l'objet "range" a échoué"
Le bug se situe a priori sur la ligne : Range("A1").Select
Commenter la réponse de Edouardt
Edouardt 10 Messages postés lundi 8 janvier 2007Date d'inscription 9 janvier 2007 Dernière intervention - 8 janv. 2007 à 17:06
0
Utile
merci Julien, vient d'essayer ta modif mais pb pour la ligne suivante à présent !
"Erreur d'ex 1004. Erreur définie par l'application ou par l'objet" Correspond à la ligne : Selection.End(x1Down).Select
Commenter la réponse de Edouardt
Edouardt 10 Messages postés lundi 8 janvier 2007Date d'inscription 9 janvier 2007 Dernière intervention - 8 janv. 2007 à 17:07
0
Utile
merci mais pas vraiment à l'aise en informatique... désolé
Commenter la réponse de Edouardt
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 8 janv. 2007 à 23:18
0
Utile
Salut dis nous comment tu veux gérer ta base car là j'ai vu qqs petites fautes et des select qui non pas lieu d'être.
@+
Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
Commenter la réponse de valtrase
Edouardt 10 Messages postés lundi 8 janvier 2007Date d'inscription 9 janvier 2007 Dernière intervention - 9 janv. 2007 à 10:26
0
Utile
merci

j'ai esayé avec "L" et je passe cette étape ! mais j'ai un pb deux lignes plus loin maintenant : La méthode Range de l'objet '_Worksheet' a échoué. C'est la ligne :

Range("A" & ligne_active_base + 1).Select

Pour répondre à la question : je veux créer une macro et un bouton, et les associer afin d'insérer automatiquement le contenu du formulaire (j'ai repris mes 13 champs en ligne dans la feuille Formulaire) dans une nouvelle ligne du tableau (feuille base de données avec 13 champs). C'est un fichier contact pour démarrer mon business de prospection client, rien de vraiment dingue. J'aurais bien utilisé Access mais j'ai un mac et mon associé un pc. Excel est un outil compatible entre nous deux.

Voici où e est mon code à présent :

Sub transpose_dans_tableau()
'Atteindre le formulaire et mémoriser les donées
Sheets("Formulaire").Select
Range("B1:B13").Select
Selection.Copy
'Test pour détermier la ligne ou coller les infos dans le tableau
Sheets("Base de données").Select
valeurA2 = Range("A2").Value
If valeurA2 = "" Then
Range("A2").Select
Else
ActiveSheet.Range("A1").Select
Selection.End(xlDown).Select
ligne_active_base = ActiveCell.Row
Range("A" & ligne_active_base + 1).Select
End If
'Mémorise le n° de la ligne où coller les données
ligne_active_base = ActiveCell.Row
'Collage avec transposition
Range("A" & ligne_active_base).Select
Selection.PasteSpecial Paste:=xPasteAllExceptBorders, _
Operation:=x1None, SkipBlanks:=False, Transpose:=True
'Rendre vierge le formulaire
Sheets("Formulaire").Select
Range("B1:B13").Select
Selection.ClearContents
Range("B1").Select
'Retourner dans le tableau
Sheets("Base de données").Select
Range("A1").Select
End Sub
Commenter la réponse de Edouardt
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 9 janv. 2007 à 10:34
0
Utile
SAlut,

As tu essayer de remettre sur la nouvelle ligne qui plante ActiveSheet.Range("A" & ligne_active_base + 1).Select

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Edouardt 10 Messages postés lundi 8 janvier 2007Date d'inscription 9 janvier 2007 Dernière intervention - 9 janv. 2007 à 10:37
0
Utile
ça ne marche pas mieux...
Commenter la réponse de Edouardt
Edouardt 10 Messages postés lundi 8 janvier 2007Date d'inscription 9 janvier 2007 Dernière intervention - 9 janv. 2007 à 11:53
0
Utile
ok viens de faire ce que tu me demandes, j'ai maintenant "Erreur de compilation variable non définie" quand je lance la macro. A priori cette ligne concernée : Sub transpose_dans_tableau()
Commenter la réponse de Edouardt
Edouardt 10 Messages postés lundi 8 janvier 2007Date d'inscription 9 janvier 2007 Dernière intervention - 9 janv. 2007 à 11:54
0
Utile
Voilà où j'en suis :

Option Explicit
Sub transpose_dans_tableau()
'Atteindre le formulaire et mémoriser les donées
Sheets("Formulaire").Select
Range("B1:B13").Select
Selection.Copy
'Test pour détermier la ligne ou coller les infos dans le tableau
Sheets("Base de données").Select
valeurA2 = Range("A2").Value
If valeurA2 = "" Then
Range("A2").Select
Else
ActiveSheet.Range("A1").Select
Selection.End(xlDown).Select
ligne_active_base = ActiveCell.Row
Range("A" & ligne_active_base + 1).Select
End If
'Mémorise le n° de la ligne où coller les données
ligne_active_base = ActiveCell.Row
'Collage avec transposition
Range("A" & ligne_active_base).Select
Selection.PasteSpecial Paste:=xPasteAllExceptBorders, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
'Rendre vierge le formulaire
Sheets("Formulaire").Select
Range("B1:B13").Select
Selection.ClearContents
Range("B1").Select
'Retourner dans le tableau
Sheets("Base de données").Select
Range("A1").Select
End Sub
Commenter la réponse de Edouardt
Edouardt 10 Messages postés lundi 8 janvier 2007Date d'inscription 9 janvier 2007 Dernière intervention - 9 janv. 2007 à 12:24
0
Utile
Possible mais maintenant je perds l'affichage de "Transpose_dans_tableau". C'est un pb ? Sinon erreur de compilation. Option Explicit pose pb.
Commenter la réponse de Edouardt
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 9 janv. 2007 à 13:52
0
Utile
Salut,
1 - Que veux dire exactement "perdre l'affichage de transpose_dans_tableau"
2- Option Explicit ne pose JAMAIS de problème au contraire il est la pour avoir plus de rigueur dans le code et donc (normalement) moins d'erreur.

Récapitulons. ce que tu souhaites faire c'est copier les cellule de B1 a B13 de la feuille Formulaire vers la feuille Base de données
En revanche reexplique la condition au niveau de la valeur de A2 car je n'est pas tres bien compris...

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Edouardt 10 Messages postés lundi 8 janvier 2007Date d'inscription 9 janvier 2007 Dernière intervention - 9 janv. 2007 à 14:57
0
Utile
Bon j'ai un copain qui a regardé et qui vient de me renvoyer le fichier corrigé. Cette version fonctionne mon pb est résolu. Je vous remercie bcp !

Public Sub trans()
Dim numLigne As Integer



Sheets("Formulaire").Select
range("B1:B13").Select
Selection.Copy

'selection de la derniere ligne
Sheets("Base de données").Select
Cells.Select
Columns("A:A").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
numLigne = ActiveCell.Row

'transpose
range("A" & numLigne).Select
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
, Transpose:=True


'Rendre vierge le formulaire
Sheets("Formulaire").Select
range("B1:B13").Select
Selection.ClearContents
range("B1").Select
'Retourner dans le tableau
Sheets("Base de données").Select
range("A1").Select
End Sub
Commenter la réponse de Edouardt
hordmomo 3 Messages postés mercredi 10 octobre 2007Date d'inscription 24 novembre 2007 Dernière intervention - 13 nov. 2007 à 02:21
0
Utile
je me permet de reprendre le sujet à l origine je me suis servis d'un tuto suivant
http://www.01net.com/article/273366.html

Sub transpose_dans_tableau()
'atteindre le formulaire").Select
Sheets("Formulaire").Select
Range("B1:B4")
Selection.Copy
'test pour déterminer la ligne ou coller les infos dans le tableau


Sheets("Base de données").Select
valeurA2=range("A2").Value
if valeurA2=""Then
Range("A2").Select
Else
Range("A1").Select
Selection.End(x1down).Select
ligne_active_base=ActiveCell.Row
Range("A" & ligne_active_base +1).Select
End If


'memorise le n° de la ligne ou coller les données
ligne_active_base=ActiveCell.Row


'collage avec transposition
Range("A" & ligne_active_base).Select
Selection.PasteSpecial Paste:x1PasteAllExceptBorders, _
Operation:=x1None, SkipBlanks:=False, Tra,spose:=True


'rendre vierge le formulaire


Sheets("Formulaire").Select
Range("B1:B4").Select
Selection.ClearContents
Range("B1").Select


Sheets("Base de données").Select
Range("A1").Select
End Sub

le code vba est quasiment similaire , que dois je faire pour que dans l exemple du tuto il marche
ceci me permettra ainsi de le modifier pour ma base de donnée que je cogite un peux quand meme

autre chtite  question possible de creer un bouton avec une macro qui trirais automatiquement la base de donnée suivant des criteres comme quand on va sur tri    

d'avance  merci à vous
Commenter la réponse de hordmomo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Saisie de données par formulaire Excel - page 2