Excel

Résolu/Fermé
oldermeta Messages postés 3 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 2 juillet 2015 - 2 juil. 2015 à 12:45
 oldermeta - 9 juil. 2015 à 18:05
Bonjour,
j'ai besoin de votre aide, je voudrais savoir le code vb pour pour pouvoir sauter d'une ligne à la suivante sur excel après avoir enregistrer des données sur la première ligne.
J'ai mis ce code mais a chaque fois que j'enregistre ca reste sur la meme ligne
Dim derligne As Integer
If MsgBox("Confirmez-vous l'ajout des données?", vbYesNo, "confirmation") = vbYes Then
derligne = Sheets("DOTATION_CARBURANT").Range("E456541").End(xlUp).Row - 24
Cells(derligne, 5) = Avancedotation.Value
Cells(derligne, 6) = Restant.Value

Merci d'avance
A voir également:

8 réponses

PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
2 juil. 2015 à 14:26
Bonjour,

Ce que tu veux faire c'est une boucle.
Je ne suis pas trop sûr de ce que tu veux vraiment faire avec ton code alors je fourni un lien vers tout ce que tu as besoin de savoir pour faire des boucles.

https://www.excel-pratique.com/fr/vba/boucles.php

Bonne lecture
0
oldermeta Messages postés 3 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 2 juillet 2015
2 juil. 2015 à 14:51
Au fait je suis entrain de faire un projet de dotation de carburant, j'ai 6 champ de A à F, la colonne A je l'ai sous forme de liste deroulante, Ya que les colonnes E et F qui ne sont pas remplis car ils dépendent de la liste déroulante A, maintenant je voudrais qu'après avoir enregistrer les données à E2 et F2 que les prochaines données données que je vais enregistrer saute sur E3 et F3, je ne sais pas si vous m'avez compris ou vous me donnez votre mail je vous envoie une capture

Merci
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
2 juil. 2015 à 15:20
Re-bonjour
L'idéal serait de fournir votre fichier pour que l'on puisse mieux comprendre.
Pour joindre un fichier sur le forum, il faut utiliser un site externe https://www.cjoint.com/ et ensuite écrire le lien vers le fichier dans ce topic. tel que expliqué ici
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers

Enlever toute information confidentielle du fichier au préalable.
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 2/07/2015 à 17:19
En regardant votre code.
derligne = Sheets("DOTATION_CARBURANT").Range("E456541").End(xlUp).Row - 24 

Disons que la colonne E va de la ligne 1 à la ligne 30, derligne va donner 30 - 24 donc 6.

Ce qu'il faudrait c'est enlever le -24
derligne = Sheets("DOTATION_CARBURANT").Range("E456541").End(xlUp).Row
Cells(derligne + 1, 5) = Avancedotation.Value
Cells(derligne + 1, 6) = Restant.Value 


Comme ca, si la dernière ligne est la 30, il va écrire dans la ligne 30 +1, donc la prochaine.ligne vide.
0
oldermeta Messages postés 3 Date d'inscription jeudi 2 juillet 2015 Statut Membre Dernière intervention 2 juillet 2015
2 juil. 2015 à 17:52
Merci PlacageGranby j'ai enlevé le -24 mais ca commence de 24+1 car jai 24 ligne, regardez ce lien vous aurez une apercue du fichier https://www.cjoint.com/c/EGcpub8DptY

la colonne E (AVANCE DE DOTATION) et la colonne F (RESTANT) vont de 1 à 24, ils sont vide car c'est les seuls infos à ajouter.
Si je pars sur N° D'ORDRE et que je click sur 1 qui est équivalent a DG il charge automatiquement les infos STRUCTURE, QUANTITE ET NATURE.
Après j'insere la valeur de l' AVANCE SUR DOTATION et il va calculer le RESTANT. APrés si je click sur valider il calcule le RESTANT et si je click sur enregistrer il l'insère dans la feuille excel.
Maintenant je veux qu'à chaque fois que je click sur un N° D'ORDRE et que je mets une AVANCE DOTATION il l'insere directement sur la meme ligne.
Je ne sais pas si vous me comprenez et encore dsl du dérangement
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
2 juil. 2015 à 19:03
Re-Bonjour,

Je crois que c'est finalement avec la méthode FIND que vous allez réussir a faire ce que vous voulez.
https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel

Il faut adapter l'exemple présent au milieu de ce lien.

Valeur_Cherchee sera égale à la valeur de votre liste déroulante des N° D'ORDRE
On peut ensuite extraire la ligne correspondant au N° D'ORDRE, ce sera trouve.row
et finalement assigner les colonnes E et F de la ligne correspondante.
Cells(trouve.row, 5) = Avancedotation.Value
Cells(trouve.row, 6) = Restant.Value
0
Re-bonjour Granby, dsl pour le retard je voulais prendre un peu de tps pour y réfléchir plus. J'ai vérifié le méthode find ça m'a semblé très cohérent avec ce que je veux, mais aprés l'avoir adapté il me notifie le msg d'erreur End Sub attendu

voici comment je l'ai intégré dans le boutton enregistrer
Private Sub CommandButton2_Click()
Sub Cherche()

Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String


Valeur_Cherchee = "Trouve"

Set PlageDeRecherche = ActiveSheet.Columns(1)


Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

If Trouve Is Nothing Then

AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
Else

AdresseTrouvee = Trouve.Address
End If
MsgBox AdresseTrouvee

Set PlageDeRecherche = Nothing
Set Trouve = Nothing

derligne = Sheets("DOTATION_CARBURANT").Range("E456541").End(xlUp).Row - 24
Cells(Trouve.Row, 5) = Avancedotation.Value
Cells(Trouve.Row, 6) = Restant.Value


MsgBox (" ENREGISTRER")
TextBox1.Text = ""
TextBox2.Text = ""
Avancedotation = ""
Restant = ""
End Sub
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
6 juil. 2015 à 14:22
Bonjour

Vous ne pouvez pas ouvrir deux fonctions comme cela.
vous avez la sub commandbutton2 et la sub Cherche,
Private Sub CommandButton2_Click()
Sub Cherche() 


et un seul End Sub à la fin.

Supprimer la ligne Sub Cherche()
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je l'ai supprimé maintenant si j'execute il me dit que Trouve n'est pas présent dans $A $A; j'ai essayé de remplacer Trouve par N° D'ORDRE mais ca bug toujours avec cette ligne : Trouve = Sheets("DOTATION_CARBURANT").Range("E456541").End(xlUp).Row

Merci pour votre attention
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
8 juil. 2015 à 19:13
Re-bonjour,

Dans un message précédent, j'avais demandé de mettre en lien votre fichier excel.
Vous avez mis un liens vers une image.

Avec le fichier Excel, il serait beaucoup plus facile de débuggé votre macro.

Enlevez toute données confidentielles à priori.
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
8 juil. 2015 à 22:25
Dans le premier exemple.

Votre variable derligne n'est pas utilisé
L'utilité de derligne est de définir quel est la plage ou l'on cherche les données.

Set PlageDeRecherche = ActiveSheet.Columns(1)
Votre plage de recherche est la colonne en entier.
C'est ok, mais on peut définir la zone de facon précise comme Range("A5:A"&derligne)

Votre variable Valeur_Cherchee = "Trouve"
Valeur_cherchee devrait correspondre au no d'ordre.
Vous choisisez le no d'ordre à l'aide d'un combobox. donc il faut mettre
Valeur_cherchee = lenomducombobox.text

On utilise find pour assigner dans la variable trouve la zone ou la valeur_cherchée est trouvée dans votre PlageDeRecherche.

Donc trouve.row retourne la ligne de la zone trouvé.

Cela est en théorie, il m'est impossible de tester sans votre fichier excel.
0
Re-Bonjour PlacageGranby ,
voici le lien http://www.cjoint.com/c/EGjiCpJ3NoY
j'ai désactivé les données confidentielles, si vous accedez dans la feuille c'est le userforme 1, vous pouvez voir le tout dans son ensemble pour constater s'il n'y a pas autre chose a améliorer, vraiment merci encore de votre disponibilité
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
9 juil. 2015 à 14:23
Bon Matin

Voici le fichier Excel : https://www.cjoint.com/c/EGjmuA3uPBP
J'ai mis le code pour votre bouton "Enregistrer" de votre Userform1
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
9 juil. 2015 à 14:49
Je viens de réaliser en regardant les autres Userform que vous devez assigner plusieurs No d'ordre avant de fermer le Userform1.

Voici le nouveau lien pour ne pas fermer Userform1 tout de suite après l'enregistrement
https://www.cjoint.com/c/EGjmJ1OzpjP
0
oldermeta > PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019
9 juil. 2015 à 15:11
Trés bien, vous avez bien fait
Sinon j'aimerai aussi que vous jetiez un coup d'oeil sur la feuille RESTANT COMMANDE et FACTURE, quand la feuille est vide si j'ajoute les données et que jenregistre ca s'enregistre a partir de la 2èm ligne et non dans la premiere ligne
0
voici mon mail ***@***, si vous pouvez m'y envoyez un msg aussi ca me ferai plaisir pour que je puisse avoir le votre
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
9 juil. 2015 à 14:27
Bonjour,

Il est possible d'envoyer des message privé via le forum.
Il est préférable de ne pas diffuser son courriel publiquement.

Par contre, les solutions exposées dans le forum sont souvent utiles pour d'autre personnes ayant un problème similaire.
En autant que les données confidentielles ait été retirées des fichiers Excel, les conversations d'aide devrait être publiques.
0
En tout cas je ne vous remercierai jamais assez, c'est la première fois que je fréquente ce forum mais je viens de comprendre que le sens du partage de la connaissance existe réellement ici. Vous avez réglez mon problème majeur.
Sinon j'aimerai aussi que vous jetiez un coup d'oeil sur la feuille restant commnde et facture, quand la feuille est vide si j'ajoute les données et que jenregistre ca s'enregistre a partir de la 2èm ligne et non dans la premiere ligne
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 9/07/2015 à 15:15
Re-Bonjour,

En toute honnêteté, je ne suis pas le meilleur en programmation VBA mais je me débrouille.
J'ai constaté le problème, et je suis resté un peu surpris.

J'ai compris que ta feuille n'était pas vide, elle contient un tableau.
J'ai pris le coin inférieur droit du tableau et je l'ai aggrandi jusqu'a la ligne 29.
J'ai re-testé l'ajout et en effet, les données se sont placé à la ligne 30.
Donc, notre code pour trouver la dernière ligne compte un tableau comme une zone "réservée" si on peut dire.

Ce que l'on veut, c'est ajouter la ligne à l'intérieur du tableau, et non pas à la suite du tableau. Donc j'ai tout simplement écrit " VBA ajout de données dans un tableau".
Dans la liste de réponse j'ai trouver le lien suivant :
http://www.excelabo.net/excel/tableaux_vba

On prend l'exemple du code dans ce tutoriel, et on l'adapte à nos besoins.
L'exemple est après la section
Modification de la table en utilisant un formulaire pour la saisie des données

Je te laisse expérimenter un peu, et si tu bloque sur une ligne de code, je pourrais t'aider.
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
9 juil. 2015 à 15:23
Je me demandais quel était le nom du tableau.
si tu clique à l'intérieur du tableau, tu aura le menu outils de tableau qui s'affiche.
Dans le sous-menu création, tu as dans la première option à gauche le choix pour renommer le tableau (ou voir son nom actuel).

Au début, j'avais été dans l'enregistreur de macro, j'enregistrais et j'ai agrandi le tableau.
Le code m'a appris qu'il s'appelait tableau2. Mais je me disais qu'il y avait surement une façon plus "élégante" de faire. J'utilise rarement les tableau dans Excel.
0
oldermeta > PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019
9 juil. 2015 à 16:16
Ca a marché j'ai adapté le code avec quelque modif et ca va pour la feuille RESTANTCOMMANDE (userform2) et la feuille AJOUT COMMANDE(userform3) mais la pour la feuille Facture(userform4) il me di qu'il ya un bug sur: Set LR = Selection.ListObject.ListRows.Add(AlwaysInsert:=True) alors que le meme code marche pour les autres
le voici en entier
Private Sub CommandButton1_Click()
Dim LR As ListRow
If MsgBox("Confirmez-vous l'ajout des données?", vbYesNo, "confirmation") = vbYes Then
derligne = Sheets("FACTURE").Range("A456541").End(xlUp).Row + 1
Set LR = Selection.ListObject.ListRows.Add(AlwaysInsert:=True)
LR.Range.Cells(1, 1) = TextBox1.Value
LR.Range.Cells(1, 2) = TextBox2.Value
LR.Range.Cells(1, 3) = TextBox3.Value
LR.Range.Cells(1, 4) = TextBox4.Value
LR.Range.Cells(1, 5) = TextBox5.Value
LR.Range.Cells(1, 6) = TextBox6.Value
LR.Range.Cells(1, 7) = lblprixunitaire.Value
LR.Range.Cells(1, 8) = prixtotalht.Value
LR.Range.Cells(1, 9) = maindoeuvre.Value
LR.Range.Cells(1, 10) = Totalnetht.Value
LR.Range.Cells(1, 11) = tva.Value
LR.Range.Cells(1, 12) = totalttc.Value
End If
End Sub
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26 > oldermeta
9 juil. 2015 à 16:43
Re-bonjour,

Il serait préférable d'utiliser la coloration syntaxique.
Vous sélectionnez votre code VBA, et ensuite en haut a droite de votre message, un clic sur la petite flèche noire, et sélectionnez basic ( le code sera colorié comme étant du langage visual basic et sera beaucoup plus facile à lire).
Private Sub CommandButton1_Click()
Dim LR As ListRow
If MsgBox("Confirmez-vous l'ajout des données?", vbYesNo, "confirmation") = vbYes Then
'derligne = Sheets("FACTURE").Range("A456541").End(xlUp).Row + 1 
Range("Tableau3").Select  '<- Il vous manquait cette ligne.
Set LR = Selection.ListObject.ListRows.Add(AlwaysInsert:=True)  'Avant d'utiliser selection, il faut avoir un select
LR.Range.Cells(1, 1) = TextBox1.Value
LR.Range.Cells(1, 2) = TextBox2.Value
LR.Range.Cells(1, 3) = TextBox3.Value
LR.Range.Cells(1, 4) = TextBox4.Value
LR.Range.Cells(1, 5) = TextBox5.Value
LR.Range.Cells(1, 6) = TextBox6.Value
LR.Range.Cells(1, 7) = lblprixunitaire.Value
LR.Range.Cells(1, 8) = prixtotalht.Value
LR.Range.Cells(1, 9) = maindoeuvre.Value
LR.Range.Cells(1, 10) = Totalnetht.Value
LR.Range.Cells(1, 11) = tva.Value
LR.Range.Cells(1, 12) = totalttc.Value
End If
End Sub


Aussi, si une ligne n'est plus utilisé, il est préférable de la mettre en commentaire.
(comme j'ai fait pour derligne)
0
oldermeta > PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019
9 juil. 2015 à 16:56
Je comprends, ça marche maintenant un très grand merci

dans la feuille RESTANT COMMANDE il y'a un commande bouton inutile qui s'affiche c'est moi qui l'avez ajouter depuis le début par erreur mais il refuse de se supprimer
vous n'y avez pas une idée
0