IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment écrire sur une nouvelle ligne ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut Comment écrire sur une nouvelle ligne ?
    bonjours a tous,

    je creer une base de données sous excel avec 3 feuilles:
    - la premiere affichera les renseignement
    - la seconde permet de les ecrirent et contient une macros pour envoyer les info vers la premiere
    - la troisieme est un menu.

    le probleme est que je n'arrive pas a faire fonctionner ma macros,
    j'ai erreur 400 qui apparait ou des problemes de classe.

    Voici le site ou j'ai trouvé le code: http://www.01net.com/article/273366.html

    et voici le code:

    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
    Sub transpose_dans_tableau()
    'Atteindre le formulaire et mémoriser les données'
    Sheets("Formulaire").Select
    Range("B1:B4").Select
    Selection.Copy
    'Test pour déterminer la ligne où 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 pù 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, Transpose:=True
    'Rendre vierge le formulaire'
    Sheets("Formulaire").Select
    Range("B1:B4").Select
    Selection.ClearContents
    Range("B1").Select
    'Retourner dans le tableau'
    Sheets("Base de données").Select
    Range("A1").Select
    End Sub
    merci
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    dans ton code initial certaines constantes contiennent le chiffre 1 à la place de la lettre l (L)

    x1Down

    x1PasteAllExceptBorders

    x1None



    Tu peux tester cette adaptation pour éviter les Select

    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
    Sub transpose_dans_tableau_V02()
        Dim ligne_active_base As Integer
     
        Worksheets("Formulaire").Range("B1:B4").Copy
     
        If Worksheets("Base de données").Range("A1") = "" Then
            ligne_active_base = 1
            Else
            ligne_active_base = Worksheets("Base de données"). _
                Range("A65536").End(xlUp).Row + 1
        End If
     
        'Collage avec transposition'
        Worksheets("Base de données").Range("A" & ligne_active_base). _
            PasteSpecial Paste:=xlPasteAllExceptBorders, _
            Operation:=xlNone, SkipBlanks:=False, Transpose:=True
     
        'Rendre vierge le formulaire'
        Worksheets("Formulaire").Range("B1:B4").ClearContents
        'Désactive le mode copier/coller
        Application.CutCopyMode = False
    End Sub


    bonne journée
    michel


    [EDIT] Grosse erreur de ma part:
    remplacement de
    Range("A1").End(xlUp).Row + 1
    par
    Range("A65536").End(xlUp).Row + 1

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    salut

    j'ai testé ta macros mais j'ai un message qui s'affiche:

    "indice n'appartient pas a la sélection"

    Tu sait ce que cela veut dire?

    Merci
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 60
    Points
    60
    Par défaut
    Ce message apparaît quand le nom d'une feuille ou formulaire n'est pas correct... Exemple : si tu fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheet("Formulaire").Range(xxx)....
    et que "Formulaire" n'existe pas.

    Dans ton cas, je crois que cela vient du "Worksheets"... Essaie de remplacer par "Sheets", et vérifie si les noms des feuilles sont corrects dans le code

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    Sa marche, j'arrive a transferer les donnée du formulaire vers la page Base de données.

    Par contre il n'y a pas d'incrementation. C'est a dire que des que je rentre des données dans le formulaire et que je enregistre elle s'écrivent sur la meme ligne

    merci
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 86
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par cobra85 Voir le message
    Par contre il n'y a pas d'incrementation. C'est a dire que des que je rentre des données dans le formulaire et que je enregistre elle s'écrivent sur la meme ligne
    Est-ce qu'il s'agit d'un problème (dans quel cas, un peu de précisions), ou simplement d'une remarque concernant le code qui t'avait été proposé ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    non,
    quand j'ecrit et que j'enregistre sur la base de données j'ai:

    ex: zorro dupont 1990 DVD

    mais quand je retourne sous formulaire et je rentre de nouvelles données, elle se reecrie sur la meme ligne que que précedement, sans aller a la ligne suivant

    dans le code, j'ai rajouter: +1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Base de données").Range("A" & ligne_active_base + 1). _
    cela fait passer a la ligne la nouvelle données mais a la 3eme donnée enregistrer, cela réecrit sur la 2eme

    je ne sait pas si j'ai été tres compréhensible!!
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu as bien modifié la ligne comme te l'a indiqué SilkyRoad ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
               Range("A1").End(xlUp).Row + 1

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    Oui j'ai bien modifier la ligne.

    Je ne peut écrire que deux ligne
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Montre ton code, là je ne comprends pas. Tu copies une plage que tu colles transposée. Je ne vois pas comment tu peux ne pas retrouver ta plage. Ou alors elle est mal définie.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    voila le code:

    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
    Sub transpose_dans_tableau_V02()
        Dim ligne_active_base As Integer
     
        Worksheets("Formulaire").Range("B1:B4").Copy
     
        If Sheets("Base de données").Range("A1") = "" Then
            ligne_active_base = 1
            Else
            ligne_active_base = Worksheets("Base de données"). _
                Range("A1").End(xlUp).Row + 1
        End If
     
        'Collage avec transposition'
        Worksheets("Base de données").Range("A" & ligne_active_base + 1). _
            PasteSpecial Paste:=xlPasteAllExceptBorders, _
            Operation:=xlNone, SkipBlanks:=False, Transpose:=True
     
        'Rendre vierge le formulaire'
        Worksheets("Formulaire").Range("B1:B4").ClearContents
        'Désactive le mode copier/coller
        Application.CutCopyMode = False
    End Sub
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Bon, je vais modifier la procédure en me contentant d'inverser les termes. Je ne sépare jamais un collage d'une copie (!)
    Ensuite, un DoEvents peut peut-être arranger les choses
    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
    Sub transpose_dans_tableau_V02()
        Dim ligne_active_base As Integer
     
        If Sheets("Base de données").Range("A1") = "" Then
            ligne_active_base = 1
            Else
            ligne_active_base = Worksheets("Base de données"). _
                Range("A1").End(xlUp).Row + 1
        End If
     
        Worksheets("Formulaire").Range("B1:B4").Copy
     
        'Collage avec transposition'
        Worksheets("Base de données").Range("A" & ligne_active_base + 1). _
            PasteSpecial Paste:=xlPasteAllExceptBorders, _
            Operation:=xlNone, SkipBlanks:=False, Transpose:=True
     
        DoEvents ' Laisse au système le temps de faire les choses...
        'Rendre vierge le formulaire'
        Worksheets("Formulaire").Range("B1:B4").ClearContents
        'Désactive le mode copier/coller
        'Application.CutCopyMode = False 'inutile
        'si ta feuille est effacée entre temps, le mode est désactivé
    End Sub
    Tu testes et tu dis

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Points : 58
    Points
    58
    Par défaut
    Juste au hasard : il ne faudrait pas plutôt un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").End(xlDown).Row + 1

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    j'ai testé le code que tu m'a renvoyer, j'ai malheureusement toujours le meme proble je n'arrive a écrire que deux lignes et le formulaire réecrit ensuite toujours sur la 2eme
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    le formulaire réecrit ensuite toujours sur la 2eme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        If Sheets("Base de données").Range("A1") = "" Then
            ligne_active_base = 1
            Else
            ligne_active_base = Worksheets("Base de données"). _
                Range("A1").End(xlUp).Row + 1
        End If
    Si tu lance plusieurs fois cette macro, c'est normal qu'elle écrive toutes les fois sur la ligne 2
    La première fois sur la ligne 1
    Les suivantes sur la ligne 2
    Pour toujours écrire sur une nouvelle ligne, tu dois remplacer
    ligne_active_base = Worksheets("Base de données"). _
    Range("A1").End(xlUp).Row + 1
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            ligne_active_base = Worksheets("Base de données"). _
                Range("A65535").End(xlUp).Row + 1

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Mars 2007
    Messages : 56
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            ligne_active_base = Worksheets("Base de données"). _
                Range("A65535").End(xlUp).Row + 1
    Oui c'est bien ce qui m'aurait paru logique ou l'inverse comme j'ai dis plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").End(xlDown).Row + 1

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    Trop fort les gars sa marche

    Une derniere question: est ce que vous savez si je peu l'intégrer dans une page web de façon a ce que cela face la meme chose mais en ligne.

    Le plus a gerer etant le bouton "enregistrer" qui n'est pas reconnu par le code html


    Encore merci
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu devrais mettre résolu pour cette discussion et en poser une autre.

    NB - Bon je n'ai rien dis cette fois-ci mais le sujet d'une discussion doit être "EXPLICITE".
    On a tous des problèmes de macro ici alors pour la prochaine discussion, essaie de trouver quelque chose de bien.
    Pourquoi ? Parce que si on résoud ton pb, avec un sujet qui dit quelque chose qu'on sait pas, il sera possible de retrouver la solution par une simple recherche... alors que sinon... elle est perdue pour tout le monde, la solution, et c'est pas bien

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 120
    Points : 63
    Points
    63
    Par défaut
    DESOLE
    --
    Quand vous marquez "Résolu", pensez aux autres, dites Merci et marquez la solution

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment écrire plusieurs instructions sur une même ligne ?
    Par Ekimasu dans le forum Général Python
    Réponses: 3
    Dernier message: 31/10/2008, 10h30
  2. Réponses: 7
    Dernier message: 23/03/2007, 10h41
  3. comment se positionner sur une ligne de table mysql ?
    Par pas30 dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/01/2007, 13h43
  4. Réponses: 2
    Dernier message: 07/12/2005, 16h26
  5. Comment écrire sur une image, dans un cadre ?
    Par Nutrino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 20/05/2005, 00h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo