Insertion de ligne et changement de variable
Bonjour à toutes et à tous,
J'ai un code de ce type :
Sub X_Y_Z()
Dim X as Integer
Dim Y as Integer
X = sheets("feuil1").Range("A:XFD").Find("tableau 2",lookat:=xlwhole).row
Y=sheets("feuil1").Range("A:XFD").Find("tableau 2",lookat:=xlwhole).column
Sheets("feuil1").Cells(X,Y).End(xlUp).Offset(1, 0).EntireRow.Insert
Sheets("feuil1").Cells(X,Y).End(xlUp).Offset(1, 0).Value = "valeur 1"
J'ai un grand problème à cause de l'insertion de ligne (que je suis obligé de faire) qui décale la cellule contenant la valeur "tableau 2" vers le bas.
Entre la ligne Sheets("feuil1").Cells(X,Y).End(xlUp).Offset(1, 0).EntireRow.Insert et la ligne Sheets("feuil1").Cells(X,Y).End(xlUp).Offset(1, 0).Value = "valeur 1" , X et Y conservent la même valeur alors que la cellule cherchée (contenant "tableau 2") a été décalée vers le bas.
Je souhaiterai donc savoir comment faire varier X et Y en recalculant la position de la cellule contenant "tableau 2" sans devoir écrire find("tableau 2", lookat..... à chaque fois.
Merci d'avance pour votre retour !
Bonjour bassbynight,
Ne comprenant pas trop la finalité de la macro, je répondrai seulement à:
Je souhaiterai donc savoir comment faire varier X et Y en recalculant la position de la cellule contenant "tableau 2" sans devoir écrire find("tableau 2", lookat..... à chaque fois.en insérant simplement entre les 2 lignes de code :
X=X+1Mais je doute du résultat de la macro...
Cordialement
Oui, je me doutais que sans le fichier ni le code ca n'allait pas être facile...
Le voici :
Sub copie_charges_soc()
Dim ligneci As Integer
Dim colci As Integer
Dim lignecs As Integer
Dim colcs As Integer
Dim ligne_donnee As Integer
ligneci = Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).Row
colci = Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).Column
lignecs = Sheets("charges").Range("A:XFD").Find("charges société", lookat:=xlWhole).Row
colcs = Sheets("charges").Range("A:XFD").Find("charges société", lookat:=xlWhole).Column
ligne_donnee = Cells(ligneci, colci).End(xlUp).Row
Sheets("charges").Activate
If ajout_charges_soc.CheckBox1.Value = True Then
Sheets("charges").Cells(ligneci, colci).End(xlUp).Offset(1, 0).EntireRow.Insert
Sheets("charges").Cells(ligneci, colci).End(xlUp).Offset(1, 0).Value = ajout_charges_soc.TextBoxLA.Value
Sheets("charges").Cells(ligneci, colci + 1).End(xlUp).Offset(1, 0).Value = ajout_charges_soc.Controls("tb_1").Value
For I = 2 To 5
Sheets("charges").Cells(ligneci, colci + 1 + I).End(xlUp).Offset(1, 0).Value = ajout_charges_soc.Controls("tb_" & I).Value
Next
With Sheets("charges").Shapes.AddShape(msoShapeNoSymbol, Cells(Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).Row, colci).End(xlUp).Offset(0, 7).Left + 40, Cells(Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).Row, colci).End(xlUp).Offset(0, 7).Top + 2, 11.25, 11.25)
.Name = "Suppch_" & Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).End(xlUp).Row
.Fill.ForeColor.RGB = RGB(255, 0, 0)
.OnAction = "'suppch(" & Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).End(xlUp).Row & ")'"
End With
End If
If ajout_charges_soc.CheckBox2.Value = True Then
Sheets("charges").Cells(ligneci, colci).End(xlUp).Offset(1, 0).EntireRow.Insert
Sheets("charges").Cells(ligneci, colci).End(xlUp).Offset(1, 0).Value = ajout_charges_soc.TextBoxLA.Value
Sheets("charges").Cells(ligneci, colci + 1).End(xlUp).Offset(1, 0).Value = ajout_charges_soc.Controls("tb_6").Value
For I = 7 To 10
Sheets("charges").Cells(ligneci, colci + 1 + I - 5).End(xlUp).Offset(1, 0).Value = ajout_charges_soc.Controls("tb_" & I).Value
Next
With Sheets("charges").Shapes.AddShape(msoShapeNoSymbol, Cells(Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).Row, colci).End(xlUp).Offset(0, 7).Left + 40, Cells(Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).Row, colci).End(xlUp).Offset(0, 7).Top + 2, 11.25, 11.25)
.Name = "Suppch_" & Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).End(xlUp).Row
.Fill.ForeColor.RGB = RGB(255, 0, 0)
.OnAction = "'suppch(" & Sheets("charges").Range("A:XFD").Find("charges immeuble", <a data-re-name="line" href="https://forum.excel-pratique.com/post/repondre/148474#" alt="Ligne de séparation" rel="line" role="button" aria-label="Ligne de séparation" tabindex="-1" data-re-icon="true">
</a><a data-re-name="html" href="https://forum.excel-pratique.com/post/repondre/148474#" alt="HTML" rel="html" role="button" aria-label="HTML" tabindex="-1" data-re-icon="true"></a>
lookat:=xlWhole).End(xlUp).Row & ")'"
End With
End If
If ajout_charges_soc.CheckBox3.Value = True Then
Sheets("charges").Cells(ligneci, colci).End(xlUp).Offset(1, 0).EntireRow.Insert
Sheets("charges").Cells(ligneci, colci).End(xlUp).Offset(1, 0).Value = ajout_charges_soc.TextBoxLA.Value
Sheets("charges").Cells(ligneci, colci + 1).End(xlUp).Offset(1, 0).Value = ajout_charges_soc.Controls("tb_11").Value
For I = 12 To 15
Sheets("charges").Cells(ligneci, colci + 1 + I - 10).End(xlUp).Offset(1, 0).Value = ajout_charges_soc.Controls("tb_" & I).Value
Next
With Sheets("charges").Shapes.AddShape(msoShapeNoSymbol, Cells(Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).Row, colci).End(xlUp).Offset(0, 7).Left + 40, Cells(Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).Row, colci).End(xlUp).Offset(0, 7).Top + 2, 11.25, 11.25)
.Name = "Suppch_" & Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).End(xlUp).Row
.Fill.ForeColor.RGB = RGB(255, 0, 0)
.OnAction = "'suppch(" & Sheets("charges").Range("A:XFD").Find("charges immeuble", lookat:=xlWhole).End(xlUp).Row & ")'"
End With
End If
End Sub
Je souhaite seulement savoir comment faire varier Cells(ligneci, colci) entre ces deux lignes, c'est à dire forcer la macro à chercher de nouveau les coordonnées de la cellule contenant "charges immeuble". En effet, rajouter +1 après avoir décalé la cellule ne suffit pas car l'insertion de ligne est conditionnée à d'autres éléments et le code se répète 3 fois grosso modo.
Car le problème c'est qu'il cherche les coordonnées en début de macro et il fige les données, ce qui ne me convient pas...
Sheets("charges").Cells(ligneci, colci).End(xlUp).Offset(1, 0).EntireRow.Insert
Sheets("charges").Cells(ligneci, colci).End(xlUp).Offset(1, 0).Value = ajout_charges_soc.TextBoxLA.ValueY a-t-il des vaillants pour m'aider à sortir de ce pétrin? :)
Bonjour,
En effet, rajouter +1 après avoir décalé la cellule ne suffit pas car l'insertion de ligne est conditionnée à d'autres éléments et le code se répète 3 fois grosso modo.Si on insère une ligne au dessus d'une cellule cells(x,y), celle-ci se retrouve en(x+1,y), quelque soit les conditions.
Re-essai sur le fichier joint
Cordialement
Bonjour Haonv,
En effet, vous avez raison. Autant pour moi!
Bonne soirée et merci !