Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA: Inserer ligne si cellule = "x"

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bertrand1202

XLDnaute Occasionnel
Bonjour

J'ai fait un test pour ajouter une ligne à une liste dès que le prenom est rencontré .
Malgré les repiquages que j' ai fait , la ligne ne se place pas à l' endroit du prénom ,
Je vous joins le code :
Merci de votre aide

Sub Insereligne()
Dim Vprenom As Range
Dim i As Integer
For Each Vprenom In Range("a4:a" & Range("A65536").End(xlUp).Row)
If Vprenom = "denis" Then
Rows(1+i).Insert Shift:=xlDown
End If
Next Vprenom
End Sub

Merci d'avance
@+ Dur de devenir VBAISTE
 
Re : VBA: Inserer ligne si cellule = "x"

Bonjour bertrand, le forum,
voici qui devrais satisfaire votre besoin.

Code:
Sub Insereligne()
Dim Vprenom As Range, Plage As Range
Dim DerniereLigne As Long, Ligne As Long

Application.ScreenUpdating = False

DerniereLigne = Cells(65536, 1).End(xlUp).Row
Set Plage = Range(Cells(1, 1), Cells(DerniereLigne, 1))
For Each Vprenom In Plage
    If Vprenom = "denis" Then
        Cells(Vprenom.Row + 1, 1).EntireRow.Insert Shift:=xlDown
    End If
Next Vprenom
End Sub

Si vous souhaitez insérer votre ligne avant le prénom, vous n'avez qu'à enlever le "+1" dans la condition.

Bonne continuité,

Étienne
 
Re : VBA: Inserer ligne si cellule = "x"

Rebonjour,
c'est parce que dans votre formule, vous utilisez une variable i qui n'est définie nulle part. Elle n'a donc aucune valeur réelle dans votre boucle de type For Each. En général, le i est utilisé dans une incrémentation du type i = i + 1 ou encore dans une boucle de type "For i = 1 to DerniereLigne" par exemple. C'est donc au niveau de votre ligne
Code:
Rows(1+i).Insert Shift:=xlDown
que se trouve le problème.

Une formulation du type
Code:
Cells(Vprenom.Row + 1, 1).EntireRow.Insert Shift:=xlDown
serait donc plus appropriée.

Bonne continuité,

Étienne
 
Re : VBA: Inserer ligne si cellule = "x"

Re

Merci Etienne , vous m'avez permis de voir le problàme, par contre quandje mets Cells(Vprenom.row,1) .entirerow.insert shift:Xldown
L'écran n'arrête pas de défiler.

Merci encore de vos explications.
 
Re : VBA: Inserer ligne si cellule = "x"

Rebonjour,
Je vous ai induit en erreur un peu plus tot en vous disant qu'en enlevant le + 1, vous pourriez ajouter la ligne avant le nom, puisque une fois la ligne ajoutée, le boucle passe à la cellule suivante qui est encore une fois le prénom que vous venez de descendre d'une ligne. Alors, la boucle se répète jusqu'à la ligne 65536.

Il faudrait donc prévoir une stratégie alternative, soit ajouter une condition ou modifier votre boucle.

Code:
Sub Insereligne()
Dim Vprenom As Range, Plage As Range
Dim DerniereLigne As Long, Ligne As Long

Application.ScreenUpdating = False

DerniereLigne = Cells(65536, 1).End(xlUp).Row
Set Plage = Range(Cells(1, 1), Cells(DerniereLigne, 1))
For Each Vprenom In Plage
    If Vprenom = "denis" Then
        If Cells(Vprenom - 1, 1).Value = "" Then GoTo Poursuivre 'Pour dire que vous avez déjà ajouté la ligne
        Cells(Vprenom.Row, 1).EntireRow.Insert Shift:=xlDown
Poursuivre:
    End If
Next Vprenom
End Sub

Pour ma part, dans une situation comme celle-ci, j'utiliserais plus une boucle For i = 1 to DerniereLigne plutot qu'un For Each. De cette façon, il serait beaucoup plus facile de mettre en place une nouvelle variable qui s'incrémenterais plutot que de se fier au numéro de ligne. Mais bon ... ce n'est qu'une opinion !

Bonne chance pour la suite !

Étienne
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
793
Réponses
5
Affichages
917
Réponses
3
Affichages
333
Réponses
4
Affichages
757
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…