Erreur 1004

Résolu
Bonjour,
Débutant en macros, j'ai recopié un code censé fonctionner et recopier ce que je saisi dans un "Formulaire de saisie" sur la première ligne libre d'une "Base de données".
Je n'arrive pas à faire fonctionner la macro ; si quelqu'un peut éclairer ma lanterne (en se mettant en mode débutant pour que je comprenne bien!!). Merci par avance.
Voici le code :
Sub transpose_dans_tableau()
'Atteindre le formulaire et mémoriser les données
Sheets("Formulaire saisie").Select
Range("B1:B11").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émoriser 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:=x1PasteAllExceptBorders, _
Operation:=x1None, SkipBlanks:=False, Transpose:=True
'Rendre vierge le formulaire
Sheets("Formulaire saisie").Select
Range("B1:B11").Select
Selection.ClearContents
Range("B1").Select
'retourner dans le tableau
Sheets("Base de données").Select
Range("A1").Select
End Sub

12 réponses

  1. Tu es trop forte! Ca fonctionne parfaitement.
    Merci pour tout (dont ta patience!).
    Si j'ai d'autres problèmes sur des macros je te recontacterai ;-)
    Très bonne journée à toi ; au plaisir.
    1. mets le en résolu si ton pb est fini stp
  2. coucou,

    remplaces ton code par :

    Sub transpose_dans_tableau()
    'Atteindre le formulaire et mémoriser les données
    Sheets("Formulaire saisie").Select
    Range("B1:B11").Select
    Selection.Copy
    'Test pour déterminer la ligne où coller les infos dans le tableau
    Sheets("Base de données").Select
    If Range("A2").Value = "" Then
    Range("A2").Select
    Else
    i = 2
    Do While Cells(i, 1) <> ""
    i = i + 1
    Loop

    ligne_active_base = i - 1
    Range("A" & ligne_active_base + 1).Select
    End If
    'Mémoriser 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:=xlPasteValues, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    'Rendre vierge le formulaire
    Sheets("Formulaire saisie").Select
    Range("B1:B11").Select
    Selection.ClearContents
    Range("B1").Select
    'retourner dans le tableau
    Sheets("Base de données").Select
    Range("A1").Select
    End Sub
    1. Tout d'abord : un grand merci!!!! Ça fonctionne du tonnerre... pour la première ligne ;-)
      Un pas de géant!
      Par contre pour la deuxième ligne, j'ai le débogeur qui se met en route et surligne "Selection.End(x1Down).Select"...
      Merci à toi.
      1. coucou,

        Ca y est, j'ai compris ton pb.

        Ta macro ne peut pas fonctionner parce que tu l'as mise dans une feuille spécifique.

        Ce qu'il faut faire dans vba :
        ==> Tu cliques sur Insertion, tu choisis un Module.
        ==> Tu coupes ton code actuel et tu le colles dans Module1

        Ta macro devrait maintenant fonctionner sans pb.
        1. http://cjoint.com/?CHtnIIUTYRD

          Et voilà le travail! Merci pour tes indications ;-)
          Et de ce que tu pourras faire pour moi!
          A +
          1. Excuses-moi je suis nul mais je ne vois pas comment joindre le fichier :-(
            Peux-tu me guider que je te l'envoies au plus vite.
            Merci à toi ;-)
            1. tu vas sur :
              https://www.cjoint.com/

              tu cliques sur parcourir, tu mets le fichier, tu cliques en bas sur le bouton créer le lien cjoint.

              Dans la fenêtre suivante, il te donne une adresse : http//, tu la copies et tu la mets ici.
          2. Re.
            Ben le fichier n'est pas protégé mais ça ne marche toujours pas... Et l'exécution pas à pas semble bloquer à la première ligne (Sub transpose_dans_tableau()).
            1. coucou,

              essaie avec ce code et si ca ne marche pas, ton classeur ne serait-il pas protéger par hasard??

              Sub transpose_dans_tableau()
              'Atteindre le formulaire et mémoriser les données

              'sélectionne la feuille Formulaire saisie
              Sheets("Formulaire saisie").Select
              'sélectionnes les cellules de B1 à B11
              Range("B1:B11").Select
              ' copies les cellules B1 à B11
              Selection.Copy
              'Test pour déterminer la ligne où coller les infos dans le tableau

              'sélectionnes la feuille nommée base de données
              Sheets("Base de données").Select

              'si ta cellule A2 de la feuille base de données = rien, alors on sélectionnes A2
              If Range("A2").Value = "" Then
              Range("A2").Select
              Else

              'sinon on sélectionnes A1, on trouve la dernière ligne et on sélectionne la cellule A de la dernière ligne
              Range("A1").Select
              Selection.End(x1Down).Select
              ligne_active_base = ActiveCell.Row
              Range("A" & ligne_active_base + 1).Select
              End If

              'Mémoriser 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:=xlPasteValues, Operation:=xlNone, SkipBlanks _
              :=False, Transpose:=True
              'Rendre vierge le formulaire
              'on resélectionnes la feuille formulaire de saisie
              Sheets("Formulaire saisie").Select
              'on vide les cellules B1 à B11
              Range("B1:B11").Select
              Selection.ClearContents
              Range("B1").Select
              'retourner dans le tableau
              Sheets("Base de données").Select
              Range("A1").Select
              End Sub
              1. Salut et merci pour la réponse.
                c'est bien un fichier excel ; j'ai bien une feuille "Formulaire saisie" et une feuille "Base de données".
                Quand j'essaye de lancer la macro, qui apparaît avec le nom "Feuil2.transpose_dans_tableau" (en faisant F5 puis "pas à pas détaillé"), j'ai la première ligne "Sub transpose dans tableau()" qui se met en jaune surligné... Sinon ça me marque "la méthode Select de la classe Range a échoué", ou quand j'essaye de lancer la macro depuis la feuille "Formulaire de saisie" j'ai un message d'erreur "400" qui s'affiche.
                Bref, pour moi le mystère demeure!
                Si tu as des idées, sois en remerciée ;-)
                1. Bonjour,

                  Sans polus de détail, ca va être difficile de t'aider car comme ca ton code est correst. Quelle ligne est en jaune quand tu lances la macro? Quel est le message d'erreur ?

                  Cette macro est valable pour un fichier excel, est-ce bien sur Excel que tu veux l'utiliser?

                  Ton fichier excel comporte-t-il une feuille formulaire de saisie et une feuille nommée base de données ?

                  Sub transpose_dans_tableau()
                  'Atteindre le formulaire et mémoriser les données

                  'sélectionne la feuille Formulaire saisie
                  Sheets("Formulaire saisie").Select
                  'sélectionnes les cellules de B1 à B11
                  Range("B1:B11").Select
                  ' copies les cellules B1 à B11
                  Selection.Copy
                  'Test pour déterminer la ligne où coller les infos dans le tableau

                  'sélectionnes la feuille nommée base de données
                  Sheets("Base de données").Select

                  'si ta cellule A2 de la feuille base de données = rien, alors on sélectionnes A2
                  If Range("A2").Value = "" Then
                  Range("A2").Select
                  Else

                  'sinon on sélectionnes A1, on trouve la dernière ligne et on sélectionne la cellule A de la dernière ligne
                  Range("A1").Select
                  Selection.End(x1Down).Select
                  ligne_active_base = ActiveCell.Row
                  Range("A" & ligne_active_base + 1).Select
                  End If

                  'Mémoriser 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:=x1PasteAllExceptBorders, _
                  Operation:=x1None, SkipBlanks:=False, Transpose:=True
                  'Rendre vierge le formulaire
                  'on resélectionnes la feuille formulaire de saisie
                  Sheets("Formulaire saisie").Select
                  'on vide les cellules B1 à B11
                  Range("B1:B11").Select
                  Selection.ClearContents
                  Range("B1").Select
                  'retourner dans le tableau
                  Sheets("Base de données").Select
                  Range("A1").Select
                  End Sub