VBA dépouillement classeur excel
rayondesoleil
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis déutant en programmation en général et j'ai un souci concernant une macro à priori simple.
Je dispose d'un classeur avec trois feuilles excel toutes remplies de données d'un essai mécanique. Ces données sont séparées de par intervalles irréguliers de trois lignes avec des données non numériques précisant la date, le temps écoulé depuis le début de l'essai..
Je souhaiterais supprimer ces lignes dans tous les classeurs en supprimant toute ligne dont la prière colonne contient une valeur non numérique. Le but serait de me retrouver avec ques des données numériques dans mes trois feuilles
J'ai essayé la macro suivante:
Sub SupprimerLignes() '
Dim i As Integer
For Each sh In ActiveWorkbook.Sheets
For i = 256 To 1 Step -1
If Not IsNumeric(Cells(i, 1).Value) And Cells(i, 1) = "" Then 'si la valeur de la cellule n'est pas numerique
Rows(i).Delete Shift:=xlUp
i = i - 1
End If
Next i
Next sh
End Sub
Il ne se passe pas grand chose, et je souhaiterais savoir ce qui cloche
Merci d'avance de votre aide
Je suis déutant en programmation en général et j'ai un souci concernant une macro à priori simple.
Je dispose d'un classeur avec trois feuilles excel toutes remplies de données d'un essai mécanique. Ces données sont séparées de par intervalles irréguliers de trois lignes avec des données non numériques précisant la date, le temps écoulé depuis le début de l'essai..
Je souhaiterais supprimer ces lignes dans tous les classeurs en supprimant toute ligne dont la prière colonne contient une valeur non numérique. Le but serait de me retrouver avec ques des données numériques dans mes trois feuilles
J'ai essayé la macro suivante:
Sub SupprimerLignes() '
Dim i As Integer
For Each sh In ActiveWorkbook.Sheets
For i = 256 To 1 Step -1
If Not IsNumeric(Cells(i, 1).Value) And Cells(i, 1) = "" Then 'si la valeur de la cellule n'est pas numerique
Rows(i).Delete Shift:=xlUp
i = i - 1
End If
Next i
Next sh
End Sub
Il ne se passe pas grand chose, et je souhaiterais savoir ce qui cloche
Merci d'avance de votre aide
A voir également:
- VBA dépouillement classeur excel
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
2 réponses
bonjour
je mettrais plutôt un OR qu'un AND
d'autre part dans cells(x,y)="" "" n'est pas numérique donc...
Si tu veux tester si la cellule est vide, emploie la fonction ISEMPTY(cells(x,y))
pour la rapidité et le confort, en debut de procédure, désactive le déroulement de l'écran par:
application.screenupdating=false
Cordialement, Michel
je mettrais plutôt un OR qu'un AND
d'autre part dans cells(x,y)="" "" n'est pas numérique donc...
Si tu veux tester si la cellule est vide, emploie la fonction ISEMPTY(cells(x,y))
pour la rapidité et le confort, en debut de procédure, désactive le déroulement de l'écran par:
application.screenupdating=false
Cordialement, Michel
Re,
il fallait travailler avec la feuille sélectionnée par For each
j'ai modifié quelques trucs question de rapidité
non géré: feuille vide
il fallait travailler avec la feuille sélectionnée par For each
j'ai modifié quelques trucs question de rapidité
non géré: feuille vide
Sub SupprimerLignes()
Dim sh As Worksheet
Dim i As Long
Application.ScreenUpdating = False
For Each sh In ActiveWorkbook.Sheets
With sh
'on se débarasse des lignes vides d'un seul coup ==> rapidité
Range("A1:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'Range("A65536").End(xlUp).Row). permet d'éviter de bosser sur 65536 lignes ==> rapidité
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If Not IsNumeric(.Cells(i, 1).Value) Then 'si la valeur de la cellule n'est pas numerique je fais
.Rows(i).Delete
End If
'i=i-1 erreur grossière :for next incrémente automatiquement
Next i
End With
Next sh
End Sub
Merci de ta réponse, le code modifié est le suivant et ne marche pas trop mal, sauf qu'il n'agit que sur une feuille à la fois. Je suis donc obligé de l'exécuter une autant de fois que le nombre de feuilles.
Aurais tu idée de pourquoi cela ne fonctionne pas?
Merci d'avance
Sub SupprimerLignes() '
Dim i As Long
Application.ScreenUpdating = False
For Each sh In ActiveWorkbook.Sheets
For i = 65536 To 1 Step -1
If Not IsNumeric(Cells(i, 1).Value) Or IsEmpty(Cells(i, 1)) = True Then 'si la valeur de la cellule n'est pas numerique je fais
Rows(i).Delete Shift:=xlUp
i = i - 1
End If
Next i
Next sh
End Sub