• Initiateur de la discussion Initiateur de la discussion Isatomafa
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Isatomafa

XLDnaute Nouveau
Bonjour,
Je souhaite réaliser un classeur, la feuille 1 étant "Base de données", la feuille 2 "Formulaire".
J'y ai collé une macro qui devrait transposer, via un bouton, ce que j'ai rempli dans mon formulaire vers la base de donnée et ensuite rendre le formulaire vierge pour un nouvel enregistrement.
Dès que j'active le bouton, il me renvoie sur la feuille 1 avec le message Erreur 400.
Pouvez-vous m'aider ? Je connais encore très peu en macro...
MMMMMMMMMMerci !

Voici la macro en question :
Sub transpose_dans_tableau()
'Atteindre le formulaire et mémoriser les données
Sheets("Formulaire").Select
Range("b1:b18").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 = "" ThenRange("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:=xlPasteAllExceptBorders, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
'Rendre vierge le formulaire
Sheets("Formulaire").Select
Range("B1:B18").Select
Selection.ClearContents
Range("B1").Select
'Retourner dans le tableauSheets("Base de données").Select
Range("A1").Select
 
Re : Help - Erreur 400

Bonsoir,

Voici le fichier. J'ai essayé de lui dire
If IsEmpty(.Range("A1:Q17")) Then dl = 1 Else: dl = .Range("A65000:Q65000").End(xlUp).Row + 1
.Range(.Cells(dl, 1), .Cells(dl, 18)) = Application.Transpose(T)
mais ça ne fonctionne pas : si je n'insère aucune donnée dans la première entrée, il la remplace par la suivante. J'ai beau chercher dans l'aide, je ne trouve pas ce que signifie "dl" dans Then dl = 1 Else: dl = ...
Pouvez-vous m'aider.
D'avance merci.
 

Pièces jointes

Dernière édition:
Re : Help - Erreur 400

Bonsoir


J'aurai du te préciser de poster une version au format xls
(car ici tu n'est pas dans le forum dédié à Excel 2007)

En joignant les deux versions, plus de gens seront susceptibles de t'aider.

EDITION:
dl: pour dernière ligne

Et c'est normal que tu ne trouves rien à ce sujet dans l'aide.

Car cette variable a été crée par kjin
 
Dernière édition:
Re : Help - Erreur 400

Re


J' ai été voir ton fichier

A ta place j'aurais écrit plutôt ceci 🙄

Code:
Sub Sub_transpose()
'
[COLOR=Green]' Sub_transpose Macro - code original de kjin
' modifié par Isa - avril 2010 - formulaire via excel[/COLOR]

(mais comme je ne suis pas à ta place...)
 
Re : Help - Erreur 400

Tu as raison, je n'avais pas pensé à ça... 😀 - mais j'ai rectifié. Merci.

Ma question suivante va peut-être te paraître complètement idiote, mais tant pis je me lance : Tu me dis que "dl" est une variable créée par Kjin, mais... non rien 😕 Finalement je vais replonger dans mes bouquins. Ca vaudra mieux.
Merci.
Re


J' ai été voir ton fichier

A ta place j'aurais écrit plutôt ceci 🙄

Code:
Sub Sub_transpose()
'
[COLOR=Green]' Sub_transpose Macro - code original de kjin
' modifié par Isa - avril 2010 - formulaire via excel[/COLOR]

(mais comme je ne suis pas à ta place...)
 
Re : Help - Erreur 400

Re


Oui Kjin l' a créé dans son code VBA je veux dire mais ne l' a pas déclaré

Code:
Sub transpose_dans_tableau()
[COLOR=Blue]Dim dl As Long[/COLOR]
With Sheets("Formulaire")
....
End Sub
Un exemple pour mieux comprendre
Code:
Sub derligne()
Dim dl As Long, a$
Range("A1:A10") = Rnd
dl = Range("A6500").End(xlUp).Row
a = Range("A" & dl).Address(0, 0)
MsgBox _
        "dernière ligne non vide : " _
        & dl _
        & vbLf _
        & "dernière cellule non vide : " & a
End Sub

PS: merci d'être passé en mode VBA courtois et d'avoir cité kjin dans les commentaires du code VBA.
 
Dernière édition:
Re : Help - Erreur 400

Bonjour,
Merci pour ton aide. J'ai testé et ça fonctionne bien, mais ça m'oblige à rentrer une donnée en B1 (feuille "Formulaire"), alors qu'à l'utilisation, il peut m'arriver de n'avoir rien à y mettre.
Ce que je voudrais, c'est que quand il fait la recherche de la dernière ligne vide dans la feuille "Base de données" il ne considère pas la ligne vide s'il n'y a rien dans la première cellule de la ligne. (sinon il y place l'enregistrement sur le précédent).
Bonne soirée.
 

Pièces jointes

Re : Help - Erreur 400

Bonsoir,

Voici,

j'ai créé un champ supplémentaire date heure de saisie dans la basse de données , c'est ce champ qui me sert de référence pour trouver la ligne suivante.
Si toutefois cela pose un problème, donnes moi un autre champ obligatoire et l'on s'aligne dessus.
 

Pièces jointes

Re : Help - Erreur 400

Super ! Ca fonctionne très bien. Merci à tous!!!

Je n'ai pas encore tout compris 😕 (mais je replonge dans mes bouquins très vite) : tu me dis que
"j'ai créé un champ supplémentaire date heure de saisie dans la basse de données , c'est ce champ qui me sert de référence pour trouver la ligne suivante"
et pourtant quand je regarde le code, l'instruction qui remplit la cellule est placée après celle qui transpose 😱... Donc ma question est : comment peut-il définir la dernière ligne s'il remplit le champ qui sert de référence seulement après ??? Comme je sais qu'il y a une explication logique à ça, si quelqu'un veut bien me la donner, ce serait gentil.
Else
dl = .Range("R65536").End(xlUp).Row + 1
'If IsEmpty(.Range("A1:Q1")) Then dl = 1 Else: dl = .Range("A65000:Q65000").End(xlUp).Row + 1
.Range(.Cells(dl, 1), .Cells(dl, 17)) = Application.Transpose(T)
.Range("R" & dl) = Date & " - " & Time
Encore merci à tous pour votre aide précieuse.
 
Re : Help - Erreur 400

Bonjour,

Et oui , mais là tu écris la ligne courante,
c'est ici :
dl = .Range("R65536").End(xlUp).Row + 1
que tu cherches la dernière ligne renseignée, avec un plus 1 pour aller à la ligne suivante , cela est chargée dans la variable dl utilisée ensuite pour déterminer la case de départ pour la fonction transpose
 
Re : Help - Erreur 400

Bonsoir,
A condition qu'aucune ligne de la base ne soit entièrement vide...
Code:
Sub Sub_transpose()
With Sheets("Formulaire")
    T = .Range("b1:b17").Value
    With Sheets("Base de données")
        dl = .Range("A1").CurrentRegion.Rows.Count + 1
        .Range(.Cells(dl, 1), .Cells(dl, 17)) = Application.Transpose(T)
    End With
    .Range("b1:b17").ClearContents
End With

End Sub
A+
kjin
 
Re : Help - Erreur 400

Re,
camarchepas :
La cellule A1 est l'entête de colonne si je ne me trompe.
Le pb de notre ami est de connaître la première ligne vide de sa base de données, et ceci quel que soit le nb de cellules renseignées lors de la dernière saisie et donc avec l'éventualité d'une cellule vide dans la colonne A ou autres.
C'est ce que j'ai compris et c'est ce à quoi j'ai répondu en précisant qu'une cellule au moins dans chaque ligne devait être renseignée, ce qui me semble être le cas.
A+
kjin
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
568
Réponses
15
Affichages
269
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
868
Retour