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+1

Mais 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
11codage.xlsm (88.17 Ko)

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.Value

Y 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

5codage.xlsm (96.12 Ko)

Cordialement

Bonjour Haonv,

En effet, vous avez raison. Autant pour moi!

Bonne soirée et merci !

Rechercher des sujets similaires à "insertion ligne changement variable"