Que ce passe-t-il avec ce code ?

Bonjour à vous tous ,

J'engage un code que j'utilise dans d'autres applications et qui fonctionnait parfaitement.

Confiant je modifie quelques lignes afin de générer une suite de feuilles au format d'une feuille mère et d'y remplir des lignes successivement par un formulaire Userform simple avec un calcul qte*pu=montant.

La logique est donc simple mais pourtant VBA me revoie à chaque fois un erreur 1004 sur la ligne code

Selection.Offset(1, 0).Select ' je remonte à la première cellule libre et je descend d'une cellule

Ai-je loupé quelque chose ?

Merci de votre aide

Papy280255

Private Sub CommandButton1_Click() 'création d'une feuille n°facture après la feuille facture
Sheets("facture").Select
Cells.Select
Selection.Copy
Sheets.Add after:=Worksheets("facture")
ActiveSheet.Name = TextBoxFeuille.Value
ActiveSheet.Paste
Range("A1").Select
End Sub

Private Sub CommandButton2_Click()
ActiveSheet.Activate
Range("A2").Select
Selection.End(xlDown).Select ' je vais à la dernière cellule
Selection.Offset(1, 0).Select ' je remonte à la première cellule libre et je descend d'une cellule
ActiveCell.Offset(0, 0).Value = TextBoxDate.Value 'transfert de la valeur txtboxdate vers A1
ActiveCell.Offset(0, 1).Value = TextBoxRéférence.Value 'transfert de la valeur txtboxRéférence vers B1
ActiveCell.Offset(0, 2).Value = TextBoxLibellé.Value 'transfert de la valeur txtboxLibellé vers c1
ActiveCell.Offset(0, 3).Value = TextBoxQuantité.Value 'transfert de la valeur txtboxQte ver d1
ActiveCell.Offset(0, 4).Value = TextBoxPrixUnitaire.Value ' transfert valeur txtboxPU vers E1
ActiveCell.Offset(0, 5).Value = TextBoxMontant.Value 'transfert de la valeur txtboxMontant vers F1
TextBoxRéférence = "" ' mise à blanc après transfert
TextBoxLibellé = ""
TextBoxQuantité = ""
TextBoxPrixUnitaire = ""
TextBoxMontant = ""
End Sub

Private Sub TextBoxMontant_Enter() 'calcul montant = qte*pu
TextBoxMontant.Value = CDbl(TextBoxQuantité.Value) * CDbl(TextBoxPrixUnitaire.Value)
End Sub

Bonjour

Modifie comme ceci

ActiveSheet.Activate
Range("A2").Select
Selection.Range("A2").End(xlDown).Select ' je vais à la dernière cellule
Selection.Offset(1, 0).Select ' je remonte à la première cellule libre et je descend d'une cellule

Merci M12

Manifestement j'ai la poisse aujourd'hui j'ai modifié le code comme indiqué mais l'erreur de compilation VBA se reproduit tjrs sur cette ligne.

VBA comprend bien la ligne précédente car il se positionne bien en fin de feuille Range" A2"

Mais dès lors que le code Selection.Offset (1,0).Select s'engage, il bloque.....

Private Sub CommandButton1_Click()
Sheets("FACTURES").Select
Cells.Select
Selection.Copy
Sheets.Add after:=Worksheets("FACTURES")
ActiveSheet.Name = TextBoxFeuille.Value
ActiveSheet.Paste
Range("A1").Select

End Sub

Private Sub CommandButton2_Click()
ActiveSheet.Activate
Range("A2").Select
Selection.Range("A2").End(xlDown).Select
Selection.Offset(1, 0).Select
ActiveCell.Offset(0, 1).Value = TextBoxdate.Value
ActiveCell.Offset(0, 2).Value = TextBoxRéférence.Value
ActiveCell.Offset(0, 3).Value = TextBoxLibellé.Value
ActiveCell.Offset(0, 4).Value = TextBoxQuantité.Value
ActiveCell.Offset(0, 5).Value = TextBoxPrixUnitaire.Value
ActiveCell.Offset(0, 6).Value = TextBoxMontant.Value

End Sub

Private Sub TextBoxMontant_Enter()
TextBoxMontant.Value = CDbl(TextBoxQuantité.Value) * CDbl(TextBoxPrixUnitaire.Value)
End Sub

Je n'y comprend plus rien....

Une autre idéé?

1000 merci

Papy280255

Bonjour le fil, bonjour le forum,

Il faut absolument éviter autant que tu le peux les Select inutiles qui ne font que ralentir l'exécution du code et sont source de plantage. Ton code modifié :

Private Sub CommandButton1_Click() 'création d'une feuille n°facture après la feuille facture
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)

Set OS = Sheets("facture") 'définit l'onglet source OS
Sheets.Add after:=Worksheets("facture") 'ajoute un nouvel onglet après l'onglet "facture"
ActiveSheet.Name = TextBoxFeuille.Value 'nomme le nouvl onglet
Set OD = ActiveSheet 'définit l'onglet destination OD
OS.Cells.Copy OD.Range("A1") 'copie les cellules de l'onglet source et les colle dans A1 de l'onglet destination
OS.Select 'sélectionne l'onglet OS (à remplacer par OD si nécéssaire)
OS.Range("A1").Select 'sélectionne la cellule A1 de l'onglet OS (à remplacer par OD si nécéssaire)
End Sub

Private Sub CommandButton2_Click()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PLV As Long 'déclare la variable PLV (Première Ligne Vide)

Set O = ActiveSheet 'définit l'onglet O
PVL = O.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1 'définit la première ligne vide PLV de la colonne A
O.Cells(PLV, 1).Value = TextBoxDate.Value 'transfert de la valeur txtboxdate vers A1
O.Cells(PLV, 2).Value = TextBoxRéférence.Value 'transfert de la valeur txtboxRéférence vers B1
O.Cells(PLV, 3).Value = TextBoxLibellé.Value 'transfert de la valeur txtboxLibellé vers c1
O.Cells(PLV, 4).Value = TextBoxQuantité.Value 'transfert de la valeur txtboxQte ver d1
O.Cells(PLV, 5).Value = TextBoxPrixUnitaire.Value ' transfert valeur txtboxPU vers E1
O.Cells(PLV, 6).Value = TextBoxMontant.Value 'transfert de la valeur txtboxMontant vers F1
TextBoxRéférence = "" ' mise à blanc après transfert
TextBoxLibellé = ""
TextBoxQuantité = ""
TextBoxPrixUnitaire = ""
TextBoxMontant = ""
End Sub

Private Sub TextBoxMontant_Enter() 'calcul montant = qte*pu
TextBoxMontant.Value = CDbl(TextBoxQuantité.Value) * CDbl(TextBoxPrixUnitaire.Value)
End Sub

Merci ThauThème de ce code qui ouvre d'autres plages encore inconnues pour moi.

L'utilisation des dim ne fait pas encore partie de mes connaissances habituelles hélas.

J'ai donc appliqué le code proposé à mon classeur et malheureusement il bloque toujours sur cette ligne de transfert vers A1

 O.Cells(PLV, 1).Value = TextBoxDate.Value 'transfert de la valeur txtboxdate vers A1

erreur 1004

Franchement je suis dépassé par ce calage car comme je le signalais dans le premier post, la précédente routine fonctionne dans une autre application.

Si les idées viennent je vais encore plancher sur le sujet avec l'acharnement du désespoir

Merci d'avance

Papy280255

Re,

Sans le fichier, difficile de t'aider davantage...

Pour les Dim. Il n'est pas obligatoire de déclarer les variables mais je le recommande toujours et le mot clé Dim permet de déclarer une variable. Voir l'aide VBA sur son sujet pour approfondir le sujet.

Re bonjour ThauTheme,

si l'envie te prends de trouver ou est l'erreur, voici le fichier.

C'est le fichier base de départ de l'analyse afin de tester la fonction.

Merci encore

Papy280255

3factures.xlsm (31.57 Ko)

Re,

Il y avait deux erreurs. PVL au lieu de PLV et ActiveSheet au lieu de l'onglet facture.

Le code modifié :

Private Sub CommandButton2_Click()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PLV As Long 'déclare la variable PLV (Première Ligne Vide)

Set O = Sheets("facture") 'définit l'onglet O
PLV = O.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1 'définit la première ligne vide PLV de la colonne A
O.Cells(PLV, 1).Value = Me.TextBoxFeuille 'transfert de la valeur txtboxdate vers A
O.Cells(PLV, 2).Value = TextBoxDate.Value 'transfert de la valeur txtboxdate vers B
O.Cells(PLV, 3).Value = TextBoxRéférence.Value 'transfert de la valeur txtboxRéférence vers C
O.Cells(PLV, 4).Value = TextBoxLibellé.Value 'transfert de la valeur txtboxLibellé vers D
O.Cells(PLV, 5).Value = CDbl(TextBoxQuantité.Value) 'transfert de la valeur txtboxQte ver E
O.Cells(PLV, 6).Value = CDbl(TextBoxPrixUnitaire.Value) ' transfert valeur txtboxPU vers F
O.Cells(PLV, 7).Value = CDbl(TextBoxMontant.Value) 'transfert de la valeur txtboxMontant vers G
TextBoxRéférence = "" ' mise à blanc après transfert
TextBoxLibellé = ""
TextBoxQuantité = ""
TextBoxPrixUnitaire = ""
TextBoxMontant = ""
End Sub

Mais je ne comprends pas l'utilité du bouton Nouvelle Facture ?!... Les factures ne s'ajoutent-elles pas les unes en-dessous des autres dans l'onglet facture ?

Ou est ta base de donnée contenant les références, prix, etc. ?

Ton code a beaucoup de lacunes, veux-tu que je te propose une version plus aboutie ?

Encore merci ThauTheme de cette réponse rapide

En somme si cela parait basique c'est que je suis à la recherche d'une solution à intégrer dans un classeur de gestion de carnet de vol ;

Papy presqu'à la retraite, j'ai la passion de l'aviation et donc je suis élève pilote et il m'est donc venu à l'idée de regrouper mes neurones d'ancien pour réaliser un petite application rassemblant l'ensemble de l'administratif de mon hobby.

Donc j'assemble petit à petit des pièces de puzzle .

Le code serait donc pour un suivi des entrées et sorties des factures reçues de l'aéroclub et des paiements en rapport.

Si le temps te permet, jette un coup d'oeil sur le fichier en annexe

C'est la partie déjà développée du sujet. ( carnet de vol,tableau de bord)

PS ton code corrigé fonctionne à merveille, le but est de créer un onglet supplémentaires reprenant les factures mensuelles.

onglet janvier, février etc... puis après on verra.

Merci

Papy280255

22monlogbook1.xlsm (465.90 Ko)

Re,

Waow ! joli boulot graphique... Je regarde ça et te tiens au courant au fur et à mesure de l'avancement...

Bonsoir le fil, bonsoir le forum,

Voilà une proposition en pièce jointe avec le code commenté. N'hésite pas à me demander si tu ne comprends pas le fonctionnement...

4monlogbook2.xlsm (579.93 Ko)

ThuDieu ça c'est du code

Merci à toi ThauThème pour cette sublimation du code primaire réalisé précédemment par mes petites mains.

Là évidemment je suis face à de la programmation pure et efficace avec toutes les subtilités du langage VBA qui vont me pousser à être encore plus fan de ce superbe outil.

Au fil des lignes je perçois maintenant l'importance de simplifier les codes en renvoyant des déclarations plutôt que des select.

Merci le Forum, merci ThauTheme pour ce coup de main.

Papy280255

Bonjour le fil, le forum,

Papy280255 a écrit :

Là évidemment je suis face à de la programmation pure et efficace avec toutes les subtilités du langage VBA qui vont me pousser à être encore plus fan de ce superbe outil.

Heu... N'exagérons rien... Quand je vois le code des vrais balèzes je tombe sur le c** aussi... Mais, content que ça te plaise et surtout que ça te donne envie de progresser.

Rechercher des sujets similaires à "que passe code"