Problème au niveau de VBA (insertion ligne sous condition)
Résolu
sikasika
Messages postés
71
Date d'inscription
Statut
Membre
Dernière intervention
-
sikasika Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
sikasika Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
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 :(
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 :(
A voir également:
- Selection.insert shift:=xldown
- Partage de photos en ligne - Guide
- Excel cellule couleur si condition texte - Guide
- Mètre en ligne - Guide
- Insertion sommaire word - Guide
- Insertion liste déroulante excel - Guide
7 réponses
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
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
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 ?
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 ?
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 :(
donc je ne sais pas quoi faire :(
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é ?
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é ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
Bonjour,
il faudrait plutôt faire :
Cordialement.
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.
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)
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)
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.
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.