Problème au niveau de VBA (insertion ligne sous condition)

Résolu
Bonjour, Bonjour

voilà un petit soucis me bloque depuis deux jours
j'ai mis en place une macro qui ajoute une ligne vide en dessous de chaque société quand j'entre son nom au niveau d'un userform ( cette ligne se remplie depuis le userform car on y met plusieurs informations)

le code suivant me pose problème quand je l'utilise la première fois il marche bien mais par la suite les lignes se décalent ce qui fait tout se décale par la suite quand j'introduit une seconde et troisième fois d'autres sociétés: ( là c'est un exemple pour 3 sociétés moi j'en ai plusieurs)

Private Sub chx_Click()
Application.ScreenUpdating = False

'BM Gest
If UserForm2.vdr = "BM Gest" Then
ligne1 = Range("A56").End(xlDown).Row + 1
Rows(ligne1).Select
Selection.Insert Shift:=xlDown
Sheets("VENTE").Range("A" & ligne1) = UserForm2.vdr.Value
Sheets("VENTE").Range("B" & ligne1) = UserForm2.emt.Value
Sheets("VENTE").Range("C" & ligne1) = UserForm2.nature.Value
Sheets("VENTE").Range("D" & ligne1) = UserForm2.code.Value
Sheets("VENTE").Range("F" & ligne1) = UserForm2.txfac.Value
Sheets("VENTE").Range("G" & ligne1) = UserForm2.dtech.Value
Sheets("VENTE").Range("I" & ligne1) = UserForm2.dtem.Value
Sheets("VENTE").Range("J" & ligne1) = UserForm2.sprdini.Value
Sheets("VENTE").Range("L" & ligne1) = UserForm2.pachat.Value
End If

'RMK
If UserForm2.vdr = "RMK" Then
ligne2 = Range("A51").End(xlDown).Row + 1
Rows(ligne2).Select
Selection.Insert Shift:=xlDown
Sheets("VENTE").Range("A" & ligne2) = UserForm2.vdr.Value
Sheets("VENTE").Range("B" & ligne2) = UserForm2.emt.Value
Sheets("VENTE").Range("C" & ligne2) = UserForm2.nature.Value
Sheets("VENTE").Range("D" & ligne2) = UserForm2.code.Value
Sheets("VENTE").Range("F" & ligne2) = UserForm2.txfac.Value
Sheets("VENTE").Range("G" & ligne2) = UserForm2.dtech.Value
Sheets("VENTE").Range("I" & ligne2) = UserForm2.dtem.Value
Sheets("VENTE").Range("J" & ligne2) = UserForm2.sprdini.Value
Sheets("VENTE").Range("L" & ligne2) = UserForm2.pachat.Value
End If

' WGestion
If UserForm2.vdr = "WGestion" Then
ligne3 = Range("A36").End(xlDown).Row + 1
Rows(ligne3).Select
Selection.Insert Shift:=xlDown
Sheets("VENTE").Range("A" & ligne3) = UserForm2.vdr.Value
Sheets("VENTE").Range("B" & ligne3) = UserForm2.emt.Value
Sheets("VENTE").Range("C" & ligne3) = UserForm2.nature.Value
Sheets("VENTE").Range("D" & ligne3) = UserForm2.code.Value
Sheets("VENTE").Range("F" & ligne3) = UserForm2.txfac.Value
Sheets("VENTE").Range("G" & ligne3) = UserForm2.dtech.Value
Sheets("VENTE").Range("I" & ligne3) = UserForm2.dtem.Value
Sheets("VENTE").Range("J" & ligne3) = UserForm2.sprdini.Value
Sheets("VENTE").Range("L" & ligne3) = UserForm2.pachat.Value
End If

si quelqu'un peut m'aider svp :(

7 réponses

  1. bonjour tout le monde ,
    je vais partager avec vous ce que j'ai pu faire

    Private Sub chx_Click()
    Application.ScreenUpdating = False

    'recherche des cellules correspondanstes au texbox
    Cells(1, 1).Select

    Cells.Find(What:=UserForm2.vdr, After:=ActiveCell).Activate

    If Selection.Offset(1, 0) = "" Then
    ligne = Selection.Offset(1, 0).Row
    Else
    ligne = Selection.End(xlDown).Row + 1
    End If
    Rows(ligne).Select
    Selection.Insert Shift:=xlDown
    Sheets("VENTE").Range("A" & ligne) = UserForm2.vdr.Value
    Sheets("VENTE").Range("B" & ligne) = UserForm2.emt.Value
    Sheets("VENTE").Range("C" & ligne) = UserForm2.nature.Value
    Sheets("VENTE").Range("D" & ligne) = UserForm2.code.Value
    Sheets("VENTE").Range("F" & ligne) = UserForm2.txfac.Value
    Sheets("VENTE").Range("G" & ligne) = UserForm2.dtech.Value
    Sheets("VENTE").Range("I" & ligne) = UserForm2.dtem.Value
    Sheets("VENTE").Range("J" & ligne) = UserForm2.sprdini.Value
    Sheets("VENTE").Range("L" & ligne) = UserForm2.pachat.Value
    1
    1. Bonjour,
      Pourrais-tu poster ton classeur anonymisé (ou pas s'il ne contient pas de données sensibles, enfin c'est toi qui voit) sur ce post, via www.cjoint.com ?
      0
      1. en fait c confidentiel et quand j'ai essayé de créer un autre classeur en copiant et collant les données et le code rien ne voulait marcher et ça m'a ennervé encore plus hhhhhh :D

        donc je ne sais pas quoi faire :(
        0
        1. Alors comme ça, je dirais qu'il faut que tu utilises la même variable pour toutes les entreprises à insérer : tu as ligne1 pour BM Gest, ligne2 pour RMK et ligne3 pour WGestion... N'utilise qu'une variable pour tout ça.

          Ensuite :
          la première fois il marche bien mais par la suite les lignes se décalent
          Peux-tu préciser ? La macro insère une ligne sur toute la feuille, donc qu'est-ce qui est décalé ?
          0
          1. ah non ce ne sont pas les cellules qui se décalent ( toute la ligne s'insère ) mais c'est plutôt au niveau des société par exemple j'ai mis pour WGestion

            If UserForm2.vdr = "WGestion" Then
            ligne3 = Range("A36").End(xlDown).Row + 1

            sur ma feuile excel les achats de la socité WGestion commencent au niveau de la ligne 36 sachant qu'il y a bien d'autres sociétés avant ( et je sépare les lignes des sociétés différentes par une ligne vide)

            donc si j'insère des sociétés qui se trouvent avant WGestion elles vont la décaler elle ne commensera plus à A36
            et au moment ou je voudrai insérer WGestion il ne me la mettra pas à la fin des lignes correspondantes à WGestion

            j espère que je t'ai bien expliqué la chose
            0
            1. Contributeur
              Bonjour,

              il faudrait plutôt faire :
              Private Sub chx_Click() 
              Application.ScreenUpdating = False 
              
              'Recherche la première occurence  de UserForm2.vdr à partir de A1
              Cells(1,1).Select
              Cells.Find(What:=UserForm2.vdr, After:=ActiveCell).Activate
              ligne = Selection.End(slDown).Row + 1
              Rows(ligne).Select 
              Selection.Insert Shift:=xlDown 
              Sheets("VENTE").Range("A" & ligne) = UserForm2.vdr.Value 
              Sheets("VENTE").Range("B" & ligne) = UserForm2.emt.Value 
              Sheets("VENTE").Range("C" & ligne) = UserForm2.nature.Value 
              Sheets("VENTE").Range("D" & ligne) = UserForm2.code.Value 
              Sheets("VENTE").Range("F" & ligne) = UserForm2.txfac.Value 
              Sheets("VENTE").Range("G" & ligne) = UserForm2.dtech.Value 
              Sheets("VENTE").Range("I" & ligne) = UserForm2.dtem.Value 
              Sheets("VENTE").Range("J" & ligne) = UserForm2.sprdini.Value 
              Sheets("VENTE").Range("L" & ligne) = UserForm2.pachat.Value
              
              end sub 


              Cordialement.
              0
            2. merci pour ton aide
              donc ça a marcher pour une société et les autres non des fois ça me sort un message d'erreur ( objet ou variable non définie) et des fois ça place une société au niveau d'une autre surtout celles ou il n y a qu'une seule ligne (ça veut dire que la société n'a effectué qu'un seul achat)
              0
            3. Contributeur
              Bonjour
              qu'il y a t il de marquer dans A36, A51, A56 ?

              d'anvance merci
              0
            4. Bonjour ,

              je t'explique mon tableau
              avant A6 c vide
              A6 y a une société
              A7 vide
              A8 et A9 société
              A10 et A11 vide
              A12 société
              A15 jusqua A 17 société .....

              A36 jusqu'a A40 il y a le nom d'un société
              A 56 aussi
              pour A51 j'ai fait une ptite gaffe fallait mettre A53 :D
              voilà
              0
            5. Contributeur
              mais quels sont les noms de ces sociétés

              Dans ta demande et suivant ton code on avait 3 cas à gérer A36, A51(53) et A56
              ????
              0
          2. Bonjour,
            Excusez l'intrusion, mais il me semble que vous pouvez mettre une copie du classeur en prenant soin de supprimer les parties confidentielles.
            Qu'en pensez-vous ?
            Si oui, vous mettez sur https://www.cjoint.com/ et poster le lien.

            0
            1. bonjour, tout le monde
              je vous remercie pour votre aide , j'ai pu résoudre le problème

              merci
              0