Effacer les ranger vide dans exel

Résolu
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   -  
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour. Je cherche la formule dans exel qui me permettrait d'effacer d'un seul coup toutes les rangées vides entre celles qui ont du texte car c'est assez long à effacer lignes par lignes. Présentement je dois copier et coller un fichier dans un autre et effacer lignes par lignes pour regrouper tout le texte ensemble. Est-ce que cette formule existe et si oui comment procéder.

Merci a ceux ou celles qui pren dront de leurs temps pour résoudre mon problème
A voir également:

23 réponses

Utilisateur anonyme
 
Bonjour,

Exemple type :

Sub EffaceLigne()

    Dim Boucle As Long, Plage As Range
        
    Application.ScreenUpdating = False
    Set Plage = ActiveSheet.UsedRange
    For Boucle = 1 To Plage.Rows.Count
        If (IsEmpty(Cells(Boucle, 1).Value)) Then
            Cells(Boucle, 1).EntireRow.Delete
            If (Boucle < Plage.Rows.Count) Then
                Boucle = (Boucle - 1)
            End If
        End If
    Next Boucle
    Application.ScreenUpdating = True

End Sub
'

Lupin
0
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   42
 
Merci beaucoup. Une question, je dois écrire ce script dans une macro?
et si oui, cette macro démarera automatiquement?

Jacques
0
Utilisateur anonyme
 
re :

oui cette "Sub" ( procédure ) est une macro, et non elle ne se lance pas de façon automatique !
sous Excel -> Alt F11 -> pour accéder à l'éditeur de VB
Clic droit sur nom du classeur dans la fenêtre de gauche
Choisir // Insertion / Module
Faire un copier coller
Pour lancer la macro :
Menu Excel // Outils / Macro / Macro ...
Choisir EffaceLigne / Exécuter


Pour un déclenchement automatique !
sous Excel -> Alt F11 -> pour accéder à l'éditeur de VB
Double clic sur le nom de la feuille
Fenêtre de droite - liste déroulante de gauche
Choisir [ Worksheets ]
Fenêtre de droite - liste déroulante de droite
Choisir [ Change ]

Copier le code sans la déclartion de la routine dans le nouveau bloc routine :

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim Boucle As Long, Plage As Range
        
    Application.ScreenUpdating = False
    Set Plage = ActiveSheet.UsedRange
    For Boucle = 1 To Plage.Rows.Count
        If (IsEmpty(Cells(Boucle, 1).Value)) Then
            Cells(Boucle, 1).EntireRow.Delete
            If (Boucle < Plage.Rows.Count) Then
                Boucle = (Boucle - 1)
            End If
        End If
    Next Boucle
    Application.ScreenUpdating = True

End Sub
'

Lupin
0
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   42
 
Ca fonctionne très bien en mode manuel mais je ne suis pas capable d'accéder a ce que tu dis car après avoir fait Alt F11, c'est une fenêtre Microsoft Visual Basic qui apparaît et la ligne d'outils, je ne vois pas le nom de la feuille, dois-je aller dans les menus?

Merci encore :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
re :

une image vaut mille mots !

http://membre.oricom.ca/lupin/util/vbe.jpg

Lupin
0
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   42
 
Un gros merci :)
0
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   42
 
Juste à suivre exactement ce qui est écrit plus haut, ça marche
0
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   42
 
Admettons que dans mon fichier j'utilises 150 lignes mais que je veux effacer les lignes vides que dans les 50 premières lignes et ne pas tenir comptes des lignes vides dans les 100 autres lignes est ce que c'est possible en modifiant la macro?
Merci encore
0
Utilisateur anonyme
 
re :

oui, c'est possible :

Sub EffaceLigne()

    Dim Boucle As Long, Plage As Range
    Dim Limite As Long
        
    Application.ScreenUpdating = False
    Set Plage = ActiveSheet.UsedRange
    Limite = Plage.Rows.Count
    
    If (Limite > 50) Then
        Limite = 50
    Else
        Limite = Plage.Rows.Count
    End If
    
    For Boucle = 1 To Limite
        If (IsEmpty(Cells(Boucle, 1).Value)) Then
            Cells(Boucle, 1).EntireRow.Delete
            If (Boucle < Plage.Rows.Count) Then
                Boucle = (Boucle - 1)
            End If
        End If
    Next Boucle
    Application.ScreenUpdating = True

End Sub
'

Lupin
0
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   42
 
Bonjour LUPIN. Encore une fois merci. J'ai essayé le nouveau script mais il efface les lignes vides même après les 50 premières.
J'ai effacé la première macro et j'ai copié celle ci mais le résultat est le même. Est-ce que j'oublie quelque choses?

Merci
0
Utilisateur anonyme
 
re:

Là je suis un peu dans les limbes, chez moi ça fonctionne correctement.

If (IsEmpty(Cells(Boucle, 1).Value)) Then
Ici, Boucle incrémente la ligne et [ , 1 ] spécifie la première colonne.
Donc la première colonne ne doit pas être vide !

J'ai effectué une petite modif dans le code au cas ou :

Sub EffaceLigne()

    Dim Boucle As Long, Plage As Range
    Dim Limite As Long
        
    Application.ScreenUpdating = False
    Set Plage = ActiveSheet.UsedRange
    Limite = Plage.Rows.Count
    
    If (Limite > 50) Then
        Limite = 50
    Else
        Limite = Plage.Rows.Count
    End If
    
    For Boucle = 1 To Limite
        If (IsEmpty(Cells(Boucle, 1).Value)) Then
            Cells(Boucle, 1).EntireRow.Delete
            If (Boucle < Limite) Then
                Boucle = (Boucle - 1)
            End If
        End If
    Next Boucle
    Application.ScreenUpdating = True

End Sub
'

Lupin
0
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   42
 
Je te remerci beaucoup, ça fonctionne à merveille, j'aurais une autre question en rapport à Exel. Si dans une colonne, je retrouve dans une ligne le texte suivant 10 + 2, est-il possible d'enlever le +2 et mettre 2 dans une autre colonne sur la même ligne? Le fait est que mon logiciel CX-Supervisor ne prend pas le +2 et n'affiche rien quand il retrouve ça.

Un gros merci, heureusement qu'il y a des gens comme toi qui prennes de leurs temps pour aider les autres

Jacques
0
Utilisateur anonyme
 
Re :

Voici 2 techniques :

La première la plus simple lorsqu'un délimiteur est présent !
Option Explicit

Sub ChaineDeCaracteres1()

    Dim Valeur As Variant, Boite As Variant
    Dim Plage As Range, Cible As Range, Limite As Long
    
    Limite = Range("A1:A65536").End(xlDown).Row
    ' Ici le choix de la colonne A
    Set Plage = Range("A1:A" & Limite)
    For Each Cible In Plage
        Valeur = Cible.Value
        Boite = Split(Valeur, "+", , vbTextCompare)
        'Test d'abord et enleve le commentaire
        'Cible.Offset(0, 0).Value = Boite(0)
        Cible.Offset(0, 1).Value = Boite(1)
    Next Cible

End Sub
'


La plus compliqué lorsqu'il faut analyser toute
la chaine de caractères.

Sub ChaineDeCaracteres2()

    Dim Valeur As String, Boite(2) As String
    Dim Plage As Range, Cible As Range, Limite As Long
    Dim Longueur As Long, Boucle As Long, Carac As String
    Dim Indice As Integer
    
    Limite = Range("A1:A65536").End(xlDown).Row
    ' Ici le choix de la colonne A
    Set Plage = Range("A1:A" & Limite)
    For Each Cible In Plage
        Valeur = CStr(Cible.Value)
        Longueur = Len(Valeur)
        Boite(0) = "": Boite(1) = "": Indice = 0
        For Boucle = 1 To Longueur
            Carac = Mid(Valeur, Boucle, 1)
            ' Tout caractère peut ici être testé et manipulé
            If (Carac = "+") Then
                Indice = 1
            End If
            Boite(Indice) = Boite(Indice) & Carac
        Next Boucle
        'Test d'abord et enleve le commentaire
        'Cible.Offset(0, 0).Value = Boite(0)
        Cible.Offset(0, 1).Value = Boite(1)
    Next Cible

End Sub


Michel
0
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   42
 
Merci Michel, ça fonctionne mais pas totalement, dans la colonne A si je met 10 + 5, le 5 s'inscrit dans la colonne B mais dans la colonne A, il faudrait qu'il ne reste que le chiffre 10. Présentement dans la colonne A, tout le texte reste la.

Merci beaucoup


Jacques
0
Utilisateur anonyme
 
re :

oui, je vois, enleve la ligne de commentaires !
        'Test d'abord et enleve le commentaire
->    'Cible.Offset(0, 0).Value = Boite(0)
        Cible.Offset(0, 1).Value = Boite(1)


Michel
0
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   42
 
Super Michel, ça fonctionne très bien, merci encore

Passe de très joyeuses fêtes:)

Jacques
0
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   42
 
Si je voudrais envoyer le chiffre après le "+" trois cases plus loin dans la même ligne, est-ce que c'est possible?

Merci

jacques
0
Utilisateur anonyme
 
re:

Dans la boucle [ Cible In Plage ]
Cible est la cellule en cours

À partir de la propriété [ Offset(L,C) ] il est possible
d'adresser toute la feuille. Ici dans notre exemple,
nous sommes sur le même ligne, d'ou le 0 (zéro)

Cible.Offset(0,C)

Nous placions une case à droite, donc +1

maintenant, ce sera +3 : Cible.Offset(0,3).Value
Sub ChaineDeCaracteres1()

    Dim Valeur As Variant, Boite As Variant
    Dim Plage As Range, Cible As Range, Limite As Long
    
    Limite = Range("A1:A65536").End(xlDown).Row
    Set Plage = Range("A1:A" & Limite)
    For Each Cible In Plage
        Valeur = Cible.Value
        Boite = Split(Valeur, "+", , vbTextCompare)
        Cible.Offset(0, 0).Value = Boite(0)
        Cible.Offset(0, 3).Value = Boite(1)
    Next Cible
    Set Plage = Nothing

End Sub
'


Michel
0
Papoux123 Messages postés 274 Date d'inscription   Statut Membre Dernière intervention   42
 
¨Ca fonctionne comme voulu. J'aimerai ça être bon comme toi, tu sembles bien te débrouiller avec ça. D'ou as tu appris les codes de programmation pour Exel? J'ai cherché mais je ne trouve pas les réponses que je veux .

Merci encore

Jacques
0
Utilisateur anonyme
 
re :

J'ai appris avec les années, j'ai suivi mon premier cours de BASIC
pendant ma technique (Électrotechnicien) en 1983. Ma première
application VBA a été réalisé en 96 sous Excel 95, l'application
récupérait un fichier texte contenant toutes les commandes de la
cie et triait les commandes pour les diviser en une dizaine de groupe
de production, par date, par client, etc...

J'ai suivi le forum de microsoft excel pendant plusieurs années,
et avec le temps on en vient à connaître les trucs et astuces.
Il n'y a pas de secret, c'est de la pratique, beaucoup de recherche
et un bon bouquin.

Michel
0