Insérer des lignes en fonction de variable
Bonjour à tous et à toutes,
Ce sujet est assez connue mais je n'arrive pas à trouver ce que je veux. Pour insérer plusieurs lignes on peut écrire ceci :
ThisWorkbook.Worksheets("Feuil1").Range("A1:A28").EntireRow.Insert
Ce qui est intéressant c'est qu'on n'utilise pas de boucle for. J'aimerais donc adapter la ligne ci-dessus avec des 2 variables pour les numéros des lignes. J'ai écrit ceci:
ThisWorkbook.Worksheets("Feuil1").Range(Cells(i, "A"), Cells(j, "A")).EntireRow.Insert
Malheureusement ceci ne fonctionne pas... Auriez-vous une idée pour écrire mon code correctement ?
J'aimerais éviter d'utiliser une boucle for comme ceci :
For i = 1 To j
ThisWorkbook.Worksheets("Feuil1").Range("A" & i).EntireRow.Insert
Next i
Merci par avance.
@+
Bonjour mpetit,
Bien sûr que si le code fonctionne, il suffit juste de définir les variables
Sub Test()
Dim i As Long, j As Long
i = 1: j = 28
ThisWorkbook.Worksheets("Feuil1").Range(Cells(i, "A"), Cells(j, "A")).EntireRow.Insert
End Sub
@+
Je n'ai pas précisé que l'initialisation des variable avait été faites (même si j'aurais du le préciser dans mon post).
J'ai le message d'erreur : Erreur définie par l'application ou par l'objet
Remarque : Mon post n'est qu'un exemple simple de ma véritable application.
J'ai réussi à reproduire mon erreur sur un exemple :
Sub Test()
Dim i As Long, j As Long
i = 1
j = Workbooks("Export_IE03").Sheets(1).Range("C" &
Rows.Count).End(xlUp).Row
ThisWorkbook.Worksheets("Feuil1").Range(Cells(i, "A"), Cells(i + j, "A")).EntireRow.Insert
End Sub
Si je met j = 12 alors pas de soucie, les lignes se créent correctement. Cependant, si je viens récupérer le numéro de la dernière ligne d'un autre fichier et que je veux insérer ce nombre de ligne, cela me met le message d'erreur ci-dessus.
Auriez-vous une idée ?
Y a t-il besoin que je vous envoie un fichier exemple ?
Merci par avance,
@+
Re,
Forcément, si vous ne nous dites pas tout... comment voulez-vous que nous devinions
Pour
j = Workbooks("Export_IE03").Sheets(1).Range("C" & Rows.Count).End(xlUp).Row
Il faut que votre classeur soit actif et donc ouvert
Essayez
Sub Test()
Dim i As Long, j As Long
Dim sPath As String, sFic As String
Dim Wbk As Workbook
' Définir les paramètres
sPath = ThisWorkbook.Path & "\"
sFic = "Export_IE03.xlsx"
i = 1
' Ouvrir le classeur
Set Wbk = Workbooks.Open(sPath & sFic)
' en profiter pour récupérer la dernière ligne
j = Wbk.Sheets(1).Range("C" & Rows.Count).End(xlUp).Row
' Activer ce classeur
With ThisWorkbook
.Activate
.Worksheets("Feuil1").Range(Cells(i, "A"), Cells(i + j, "A")).EntireRow.Insert
End With
End Sub
@+
Veuillez m'excuser. Je ne voulais juste pas vous perdre en faisant au plus simple. Désolé
J'ai pensé à ouvrir le fichier manuellement. Même en modifiant comme ci-dessous, rien n'y fait .... :
Sub Test()
Dim i As Long, j As Long
i = 1
Workbooks.Open ("C:\Users\Test\Desktop\Hey\entreprise\ERP\Étude%\peutetre\Export_IE03.xls")
j = Workbooks("Export_IE03").Sheets(1).Range("C" & Rows.Count).End(xlUp).Row
ThisWorkbook.Worksheets("Feuil1").Range(Cells(i, "A"), Cells(i + j, "A")).EntireRow.Insert
End Sub
J'ai toujours le même message d'erreur à la ligne :
ThisWorkbook.Worksheets("Feuil1").Range(Cells(i, "A"), Cells(i + j, "A")).EntireRow.Insert
@+
Merci, j'ai finalement compris d'où venait mon erreur !
Sub Test()
Dim i As Long, j As Long
i = 1
Workbooks.Open ("C:\Users\Test\Desktop\Hey\entreprise\ERP\Étude%\peutetre\Export_IE03.xls")
j = Workbooks("Export_IE03").Sheets(1).Range("C" & Rows.Count).End(xlUp).Row
ThisWorkbook.Worksheets("Feuil1").Activate 'Cette ligne là qui manquait
ThisWorkbook.Worksheets("Feuil1").Range(Cells(i, "A"), Cells(i + j, "A")).EntireRow.Insert
End Sub
Je ne savait pas qu'il fallait activer la feuille qu'on modifie en faisant .Activate.
Merci.
Bien cordialement,
Re,
J'ai mis le code à tester dans mon précédent post
Nota : il faudra changer le chemin
@+