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

Résolu/Fermé
sikasika Messages postés 71 Date d'inscription vendredi 14 décembre 2012 Statut Membre Dernière intervention 10 juillet 2014 - 4 janv. 2013 à 10:26
sikasika Messages postés 71 Date d'inscription vendredi 14 décembre 2012 Statut Membre Dernière intervention 10 juillet 2014 - 8 janv. 2013 à 09:41
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

sikasika Messages postés 71 Date d'inscription vendredi 14 décembre 2012 Statut Membre Dernière intervention 10 juillet 2014 3
8 janv. 2013 à 09:41
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
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
4 janv. 2013 à 10:30
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
sikasika Messages postés 71 Date d'inscription vendredi 14 décembre 2012 Statut Membre Dernière intervention 10 juillet 2014 3
4 janv. 2013 à 11:12
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
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
4 janv. 2013 à 11:24
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

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

Posez votre question
sikasika Messages postés 71 Date d'inscription vendredi 14 décembre 2012 Statut Membre Dernière intervention 10 juillet 2014 3
4 janv. 2013 à 11:42
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
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 308
4 janv. 2013 à 11:51
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
sikasika Messages postés 71 Date d'inscription vendredi 14 décembre 2012 Statut Membre Dernière intervention 10 juillet 2014 3
4 janv. 2013 à 12:31
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
4 janv. 2013 à 12:53
Bonjour
qu'il y a t il de marquer dans A36, A51, A56 ?

d'anvance merci
0
sikasika Messages postés 71 Date d'inscription vendredi 14 décembre 2012 Statut Membre Dernière intervention 10 juillet 2014 3
4 janv. 2013 à 14:58
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
4 janv. 2013 à 15:07
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
Le Pingou Messages postés 12200 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 novembre 2024 1 450
4 janv. 2013 à 22:01
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
sikasika Messages postés 71 Date d'inscription vendredi 14 décembre 2012 Statut Membre Dernière intervention 10 juillet 2014 3
7 janv. 2013 à 14:41
bonjour, tout le monde
je vous remercie pour votre aide , j'ai pu résoudre le problème

merci
0