Menu

Macro qui supprime des lignes qui ne contienne pas un nombre

Messages postés
111
Date d'inscription
jeudi 7 avril 2016
Statut
Membre
Dernière intervention
18 mai 2019
- - Dernière réponse : cs_Le Pivert
Messages postés
6051
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 mai 2019
- 12 mai 2019 à 11:11
Bonjour,
J'ai un tableau excel qui ressemble a sa :



Comme vous pouvez le voir il y a des date et des nombres qui sont des température
sauf que toute les dates ne sont pas aligner et les température non plus

et la vous voyer 20 ligne mais il y en a 9000 en dessous

J'aimerai donc faire une macro qui regarde dans la colonne A et si la valeur est une température (donc si la valeur se trouve entre 10 et 40) Alors il supprime la ligne.

Cela devrai donner un résultat comme sa :


ou sinon mais c'est un peut plus compliquer il serait bien que la macro échange les deux cases
cela serais mieux car sa m’éviterai de perdre des valeurs

Mon problème est que je ne sais absolument pas comment faire.

Si quelqu'un peut m'aider merci Beaucoup.

Configuration: Windows 10 :p
Afficher la suite 

Votre réponse

1 réponse

Messages postés
6051
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 mai 2019
365
0
Merci
Bonjour,

Faire Alt F11 pour accéder à l'éditeur, insérer un module et mettre ce code:

Sub For_X_to_Next_Ligne()
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
    Set FL1 = Worksheets("Feuil1") 'a adapter
    NoCol = 1 'lecture de la colonne 1
    For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
        Var = FL1.Cells(NoLig, NoCol)
        If Len(Var) < 6 Then
FL1.Cells(NoLig, NoCol + 2) = Var
FL1.Cells(NoLig, NoCol) = FL1.Cells(NoLig, NoCol + 1)
FL1.Cells(NoLig, NoCol + 1) = FL1.Cells(NoLig, NoCol + 2)
FL1.Cells(NoLig, NoCol + 2) = ""
FL1.Cells(NoLig, NoCol).NumberFormat = "m/d/yyyy" ' adapter le format
End If
    Next
    Set FL1 = Nothing
End Sub


il ne reste plus qu'à lancer la macro

cs_Le Pivert
Messages postés
6051
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 mai 2019
365 -
Sers-toi de l’enregistreur de macro. Clique droit sur la cellule, Format de cellule, Nombre. Tu auras ta macro

Voilà

@+
melvinou22
Messages postés
111
Date d'inscription
jeudi 7 avril 2016
Statut
Membre
Dernière intervention
18 mai 2019
7 -
Et bien c'est comme sa que j'ai recupere les ligne
Columns("B:B").Select
Selection.NumberFormat = "0.00"

Mais quand j'ai enregistrer la macro sa a fonctionner et quand c'est la macro qui le fait sa ne marche pas
cs_Le Pivert
Messages postés
6051
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 mai 2019
365 -
Il faut le mettre dans ta boucle comme pour le format date:

Sub For_X_to_Next_Ligne()
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
    Set FL1 = Worksheets("Feuil1") 'a adapter
    NoCol = 1 'lecture de la colonne 1
    For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
        Var = FL1.Cells(NoLig, NoCol)
        If Len(Var) < 6 Then
FL1.Cells(NoLig, NoCol + 2) = Var
FL1.Cells(NoLig, NoCol) = FL1.Cells(NoLig, NoCol + 1)
FL1.Cells(NoLig, NoCol + 1) = FL1.Cells(NoLig, NoCol + 2)
FL1.Cells(NoLig, NoCol + 2) = ""
FL1.Cells(NoLig, NoCol).NumberFormat = "dd/mm/yyyy hh:mm" 
FL1.Cells(NoLig, NoCol + 1).NumberFormat = "0.00"
End If
    Next
    Set FL1 = Nothing
End Sub


Voilà c'est tout simple!

@+
melvinou22
Messages postés
111
Date d'inscription
jeudi 7 avril 2016
Statut
Membre
Dernière intervention
18 mai 2019
7 -
Merci Beaucoup mais sa ne marche pus du tout
J'ai essayer de modifier un tout petit peut le code pour faire sa
Sub For_X_to_Next_Ligne()
Columns("A:B").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
Set FL1 = Worksheets("arduino-melvin-export") 'a adapter
NoCol = 1 'lecture de la colonne 1
For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
Var = FL1.Cells(NoLig, NoCol)
If Len(Var) < 6 Then
FL1.Cells(NoLig, NoCol + 2) = Var
FL1.Cells(NoLig, NoCol) = FL1.Cells(NoLig, NoCol + 1)
FL1.Cells(NoLig, NoCol + 1) = FL1.Cells(NoLig, NoCol + 2)
FL1.Cells(NoLig, NoCol + 2) = ""
FL1.Cells(NoLig, NoCol).NumberFormat = "dd/mm/yyyy hh:mm:ss" ' adapter le format
FL1.Cells(NoLig, NoCol + 1).NumberFormat = "0.00"
End If
Next
Set FL1 = Nothing

Columns("A:B").Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLines).Select
ActiveChart.SetSourceData Source:=Range("'arduino-melvin-export'!$A:$B")
End Sub


j'ai surement du faire des erreur dans mes modifications car il transforme mon fichier qui resemble a sa


A un ficher qui resemble a sa


EN gros a la fin du programme je voulais qu'il me fasse un graphique de ma temperature mais sa foire vu que mon tableau n'est pas bien ranger et je ne trouve pas a quoi correspond chaque ligne, est ce que tu pourrais mettre quelque commentaire supplémentairement sa serai super sympa
En tout cas Merci Beaucoup
cs_Le Pivert
Messages postés
6051
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 mai 2019
365 -
Comme ceci:

Sub For_X_to_Next_Ligne()
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
    Set FL1 = Worksheets("Feuil1") 'a adpater nom de la Feuille
    NoCol = 1 'lecture de la colonne A
    For NoLig = 2 To Split(FL1.UsedRange.Address, "$")(4) 'on démarre à la 2ème ligne
        Var = FL1.Cells(NoLig, NoCol)
        If Len(Var) < 6 Then 'on prend moins de 6 caractères
FL1.Cells(NoLig, NoCol + 2) = Var
FL1.Cells(NoLig, NoCol) = FL1.Cells(NoLig, NoCol + 1) 'colonne B
FL1.Cells(NoLig, NoCol + 1) = FL1.Cells(NoLig, NoCol + 2) ' colonne C
FL1.Cells(NoLig, NoCol + 2) = "" ' colonne C
FL1.Cells(NoLig, NoCol).NumberFormat = "dd/mm/yyyy hh:mm" 'colonne A
FL1.Cells(NoLig, NoCol + 1).NumberFormat = "0.00" 'colonne B
End If
    Next
    Set FL1 = Nothing
    'on remplace "," par "." dans la colonne B
      Range("B2:B" & NoLig).Select
    Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        'on crée un graphique
        Application.ScreenUpdating = False
    Columns("A:B").Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range("'Feuil1'!$A:$B") 'a adpater nom de la Feuille
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.ApplyLayout (3)
   ' ActiveChart.SeriesCollection(2).Select
    'ActiveChart.SeriesCollection(2).ApplyDataLabels
Application.ScreenUpdating = True
  End Sub


Voilà

@+ Le Pivert
Commenter la réponse de cs_Le Pivert