Excel

Résolu
oldermeta Messages postés 3 Statut Membre -  
 oldermeta -
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

8 réponses

  1. PlacageGranby Messages postés 402 Statut Membre 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
  2. oldermeta Messages postés 3 Statut Membre
     
    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
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
  3. oldermeta Messages postés 3 Statut Membre
     
    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
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
  4. oldermeta
     
    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
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. oldermeta
     
    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
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
    2. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
  7. oldermeta
     
    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
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
    2. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
      1. oldermeta > PlacageGranby Messages postés 402 Statut Membre
         
        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
  8. oldermeta
     
    voici mon mail ***@***, si vous pouvez m'y envoyez un msg aussi ca me ferai plaisir pour que je puisse avoir le votre
    0
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
  9. oldermeta
     
    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
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
    2. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
    3. oldermeta > PlacageGranby Messages postés 402 Statut Membre
       
      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
    4. PlacageGranby Messages postés 402 Statut Membre 26 > oldermeta
       
      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
    5. oldermeta > PlacageGranby Messages postés 402 Statut Membre
       
      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