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 -
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
Merci a ceux ou celles qui pren dront de leurs temps pour résoudre mon problème
A voir également:
- Effacer les ranger vide dans exel
- Supprimer page word vide - Guide
- Ranger par ordre alphabétique excel - Guide
- Effacer les données de navigation sur android - Guide
- Caractere vide - Guide
- Exel 2013 - Télécharger - Tableur
23 réponses
Bonjour,
Exemple type :
Lupin
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
Merci beaucoup. Une question, je dois écrire ce script dans une macro?
et si oui, cette macro démarera automatiquement?
Jacques
et si oui, cette macro démarera automatiquement?
Jacques
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 :
Lupin
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
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 :)
Merci encore :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
Merci encore
re :
oui, c'est possible :
Lupin
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
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
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
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 :
Lupin
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
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
Un gros merci, heureusement qu'il y a des gens comme toi qui prennes de leurs temps pour aider les autres
Jacques
Re :
Voici 2 techniques :
La première la plus simple lorsqu'un délimiteur est présent !
La plus compliqué lorsqu'il faut analyser toute
la chaine de caractères.
Michel
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
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
Merci beaucoup
Jacques
re :
oui, je vois, enleve la ligne de commentaires !
Michel
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
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
Merci
jacques
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
Michel
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
¨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
Merci encore
Jacques
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
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