[VBA] Détecter la valeur d'une formule, et insérer une ligne vierge [RESOLU]

dodoritfort

XLDnaute Nouveau
Bonjour à toutes et à tous !


Présentation

Je souhaite faire une Macro qui ira chercher les valeurs de deux cellules. Une comparaison est faite et en fonction de cette comparaison je voudrais insérer une ligne vierge d'une taille défini (exemple 5 de haut).

Ce que je voudrais

Par exemple, j'ai un texte du genre :
Ville
Ville
Pays
Village
Village
Rue

Je voudrais que ma macro le mette en forme de cette façon :
Ville
Ville

Pays

Village
Village

Rue

Mon code actuel

Code:
For i = 2 To 6

    y = i - 1

    If Cells(i, 1).Value <> Cells(y, 1).Value Then
    
        Cells(i, 1).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        
    End If

Next

Mon problème

Le problème c'est que dans cette situation ma Macro va ajouter des lignes entre "Ville" et "Pays". tandis que je voudrais séparer les valeurs qui ne sont pas identitique.


J'avoue bloquer, mais je suis sûr que la solution n'est pas si complexe !

Je vous remercie d'avance pour le temps passé à me lire et peut-être même à me répondre ! :)
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : [VBA] Détecter la valeur d'une formule, et insérer une ligne vierge

Bonjour dodoritfort,

Quand tu insères des lignes dans la feuille de calcul, il renumérote les lignes suivantes
il est donc beaucoup plus simple de parcourir les lignes de bas en haut

essaye

Code:
For i = 6 To 2 step -1
 

dodoritfort

XLDnaute Nouveau
Re : [VBA] Détecter la valeur d'une formule, et insérer une ligne vierge

Merci beaucoup tototiti ! J'arrive à présent à ce que je veux sur une feuille Excel simple.

Mais je bloque sur un autre petit problème...



Lorsque j'entre manuellement des valeurs dans Excel et que j'utilise donc la Macro ci-dessous tout fonctionne parfaitement.

Code:
For i = 12 To 2 Step -1

    If Cells(i, 1).Value <> Cells(i - 1, 1).Value Then
    
        Cells(i, 1).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    
    End If

Next



Sur ma feuille Excel les cellules sont remplis par des formules... et la Macro n'insère pas de ligne.

J'ai l'impression que Cells().Value ne teste pas le résultat de la formule ?
 

dodoritfort

XLDnaute Nouveau
Re : [VBA] Détecter la valeur d'une formule, et insérer une ligne vierge

Donc je me suis trompé dans mon analyse !

Il teste bien la valeur de la formule, cependant il faut sélectionner la cellule dont on teste la valeur pour insérer la nouvelle ligne sinon cela n'a pas d'effet. Et de plus si on ne sélectionne qu'une cellule, ce sera une insertion de cellule dans la colonne.

Pour insérer une ligne entière en testant deux valeurs...

Voici la Macro corrigée :

Code:
For i = NbLignes To 2 Step -1

    If Cells(i, 7).Value <> Cells(i - 1, 7).Value Then
    
        Rows(i).EntireRow.Select ' C'est ici qu'était mon erreur !
        Selection.Insert Shift:=xlDown
    
    End If

Next


Merci beaucoup tototiti, avec ton aide j'ai pu résoudre ton problème ! :)
 

tototiti2008

XLDnaute Barbatruc
Re : [VBA] Détecter la valeur d'une formule, et insérer une ligne vierge [RESOLU]

Re,

Merci beaucoup tototiti, avec ton aide j'ai pu résoudre ton problème ! :)

Mais je n'ai pas de problème, moi :)

cependant il faut sélectionner la cellule dont on teste la valeur pour insérer la nouvelle ligne sinon cela n'a pas d'effet

Saches qu'il n'y a pas besoin de sélectionner pour agir sur les cellules dans Excel

Code:
        Rows(i).EntireRow.Select ' C'est ici qu'était mon erreur !
        Selection.Insert Shift:=xlDown

peut s'écrire

Code:
        Rows(i).Insert Shift:=xlDown
 

dodoritfort

XLDnaute Nouveau
Re : [VBA] Détecter la valeur d'une formule, et insérer une ligne vierge [RESOLU]

Est-ce que si l'on ne sélectionne pas le temps d'exécution est significativement plus rapide ?
Si c'est bien le cas comme je l'imagine c'est vraiment génial !

Je vais me renseigner plus particulièrement à ce sujet !

Merci encore !
 

Discussions similaires

Réponses
0
Affichages
133

Statistiques des forums

Discussions
312 083
Messages
2 085 189
Membres
102 809
dernier inscrit
Sandrine83