VBA supprimer ligne d’un tableau avec valeur entre 0.1 et 0.07
Bonjour à tous je viens vers vous pour un petit coup de main car je cherche à éliminer à chaque ligne de mon tableau les valeurs qui se trouve entre 0,1et 0,07 dans une des cellules de la ligne
Si il y a une bonne âme pour m’aider ça serait bien gentil car je ne suis pas assez fort en VBA.
Merci
Salut Eugenecolle,
comme ceci?
A adapter car je n'ai pas d'info concernant les limites de ton tableau...
Dim rCel As Range
For Each rCel In UsedRange
If rCel.Value >= 0.01 And rCel.Value <= 0.07 Then rCel.Value = ""
Next
A+
Bonjour Curulis57
Je te remercie pour cette réponse rapide je teste la formule et je reviens vers toi.
Encore merci
Cher Curulis57
Voici Mon code complet pour plus d'info.
pour ma par cela ne fonctionne pas avec ton code car j'ai déjà des variables
merci à toi pour ton aide
Dim tablo, tabloR(), i&, c As Range
Sub VersTableauFinal(control As IRibbonControl)
tablo = Range("A2:AD" & Range("A" & Rows.Count).End(xlUp).Row)
ReDim tabloR(UBound(tablo, 1), 30)
For i = 1 To UBound(tablo, 1)
tabloR(i - 1, 0) = tablo(i, 3)
tabloR(i - 1, 1) = tablo(i, 1)
tabloR(i - 1, 2) = tablo(i, 6)
tabloR(i - 1, 3) = tablo(i, 4)
tabloR(i - 1, 4) = tablo(i, 5)
tabloR(i - 1, 5) = tablo(i, 8) & " " & tablo(i, 9) & " " & tablo(i, 10)
tabloR(i - 1, 6) = tablo(i, 12) & " " & tablo(i, 13)
tabloR(i - 1, 7) = tablo(i, 14)
tabloR(i - 1, 8) = tablo(i, 17)
tabloR(i - 1, 9) = tablo(i, 18)
tabloR(i - 1, 10) = tablo(i, 19)
tabloR(i - 1, 11) = tablo(i, 20)
tabloR(i - 1, 12) = tablo(i, 21)
tabloR(i - 1, 13) = tablo(i, 22)
tabloR(i - 1, 14) = tablo(i, 23)
tabloR(i - 1, 15) = tablo(i, 24)
tabloR(i - 1, 16) = tablo(i, 25)
tabloR(i - 1, 17) = tablo(i, 26)
tabloR(i - 1, 18) = tablo(i, 27)
tabloR(i - 1, 19) = tablo(i, 28)
tabloR(i - 1, 20) = tablo(i, 29)
tabloR(i - 1, 21) = tablo(i, 30)
Next i
Sheets("Tableau_final").Range("A2").Resize(UBound(tabloR, 1), 22) = tabloR
For Each c In Sheets("Tableau_final").Range("A2").Resize(UBound(tabloR, 1), 22)
c.BorderAround Weight:=xlThin
Next c
Sheets("Tableau_final").Activate
Dim l As Long
For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Cells(l, "G").Value = "Technicienne de surface" Then Cells(l, 1).EntireRow.Delete
Next l
Dim Cellule As Range
For Each Cellule In Range("J2:V1500") ' ici tu modifies le champ
If Cellule.Value = 0 Then
Cellule.ClearContents
End If
Next
[A2].Sort key1:=[A2], Order1:=xlAscending, Header:=xlYes
End Sub
Et aussi pour répondre à ta question c’est un tableau qui est à 20 colonnes sur 1500 lignes.
Merci
Bonjour,
comme tu construis ton tableau, autant ne pas les mettre plutôt que les enlever après :
For i = 1 To UBound(tablo, 1)
If tablo(i, 3) > 0.1 Or tablo(i, 3) < 0.07 Then
j = j + 1
tabloR(j - 1, 0) = tablo(i, 3)
tabloR(j - 1, 1) = tablo(i, 1)
tabloR(j - 1, 2) = tablo(i, 6)
'...
End If
Next i
eric
Merci pour ton aide
Cela ne fonctionne pas je n’arrive pas à intégrer ton code voici tout mon code avec les explications des lignes où il doit y avoir les suppressions si valeur entre Cela ne fonctionne pas je n’arrive pas à intégrer ton code voici tout mon code avec les explications des lignes où il doit y avoir les suppressions si valeur entre
Merci
code
Option Explicit
Dim tablo, tabloR(), i&, c As Range
Sub VersTableauFinal(control As IRibbonControl)
tablo = Range("A2:AD" & Range("A" & Rows.Count).End(xlUp).Row)
ReDim tabloR(UBound(tablo, 1), 30)
For i = 1 To UBound(tablo, 1)
tabloR(i - 1, 0) = tablo(i, 3)
tabloR(i - 1, 1) = tablo(i, 1)
tabloR(i - 1, 2) = tablo(i, 6)
tabloR(i - 1, 3) = tablo(i, 4)
tabloR(i - 1, 4) = tablo(i, 5)
tabloR(i - 1, 5) = tablo(i, 8) & " " & tablo(i, 9) & " " & tablo(i, 10)
tabloR(i - 1, 6) = tablo(i, 12) & " " & tablo(i, 13)
tabloR(i - 1, 7) = tablo(i, 14)
tabloR(i - 1, 8) = tablo(i, 17)
tabloR(i - 1, 9) = tablo(i, 18) ' > 0.1 < 0.07
tabloR(i - 1, 10) = tablo(i, 19)
tabloR(i - 1, 11) = tablo(i, 20) ' > 0.1 < 0.07
tabloR(i - 1, 12) = tablo(i, 21)
tabloR(i - 1, 13) = tablo(i, 22) ' > 0.1 < 0.07
tabloR(i - 1, 14) = tablo(i, 23)
tabloR(i - 1, 15) = tablo(i, 24) ' > 0.1 < 0.07
tabloR(i - 1, 16) = tablo(i, 25)
tabloR(i - 1, 17) = tablo(i, 26) ' > 0.1 < 0.07
tabloR(i - 1, 18) = tablo(i, 27)
tabloR(i - 1, 19) = tablo(i, 28) ' > 0.1 < 0.07
tabloR(i - 1, 20) = tablo(i, 29)
tabloR(i - 1, 21) = tablo(i, 30) ' > 0.1 < 0.07
Next i
Sheets("Tableau_final").Range("A2").Resize(UBound(tabloR, 1), 22) = tabloR
For Each c In Sheets("Tableau_final").Range("A2").Resize(UBound(tabloR, 1), 22)
c.BorderAround Weight:=xlThin
Next c
Sheets("Tableau_final").Activate
Dim l As Long
For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Cells(l, "G").Value = "Technicienne de surface" Then Cells(l, 1).EntireRow.Delete
Next l
Dim Cellule As Range
For Each Cellule In Range("J2:V1500") ' ici tu modifies le champ
If Cellule.Value = 0 Then
Cellule.ClearContents
End If
Next
[A2].Sort key1:=[A2], Order1:=xlAscending, Header:=xlYes
End Sub
A tester :
Option Explicit
Dim tablo, tabloR(), i&, c As Range
Sub VersTableauFinal(control As IRibbonControl)
Dim ok As Boolean, j As Long, k As Long, l As Long
tablo = Range("A2:AD" & Range("A" & Rows.Count).End(xlUp).Row)
ReDim tabloR(UBound(tablo, 1), 30)
For i = 1 To UBound(tablo, 1)
ok = tablo(i, 17) <> "Technicienne de surface"
For j = 18 To 30 Step 2
ok = ok And tablo(i, j) >= 0.07 And tablo(i, j) < 0.1
If Not ok Then Exit For
Next j
If ok Then
tabloR(k, 0) = tablo(i, 3)
tabloR(k, 1) = tablo(i, 1)
tabloR(k, 2) = tablo(i, 6)
tabloR(k, 3) = tablo(i, 4)
tabloR(k, 4) = tablo(i, 5)
tabloR(k, 5) = tablo(i, 8) & " " & tablo(i, 9) & " " & tablo(i, 10)
tabloR(k, 6) = tablo(i, 12) & " " & tablo(i, 13)
tabloR(k, 7) = tablo(i, 14)
tabloR(k, 8) = tablo(i, 17)
For l = 9 To 21
' ********* mettre vide à la place de 0 **********
tabloR(k, l) = IIf(tablo(i, l + 9) = 0, vbEmpty, tablo(i, l + 9))
Next l
k = k + 1
End If
Next i
Sheets("Tableau_final").Range("A2").Resize(UBound(tabloR, 1), 22) = tabloR
For Each c In Sheets("Tableau_final").Range("A2").Resize(UBound(tabloR, 1), 22)
c.BorderAround Weight:=xlThin
Next c
Sheets("Tableau_final").Activate
' devenu inutile si : ok = ok And tablo(i, 17) <> "Technicienne de surface" est correct
' Dim l As Long
' For l = Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
' If Cells(l, "G").Value = "Technicienne de surface" Then Cells(l, 1).EntireRow.Delete
' Next l
' devenu inutile si le IIf() est correct
' Dim Cellule As Range
' For Each Cellule In Range("J2:V1500") ' ici tu modifies le champ
' If Cellule.Value = 0 Then
' Cellule.ClearContents
' End If
' Next
[A2].Sort key1:=[A2], Order1:=xlAscending, Header:=xlYes
End Sub
Pourquoi 30 en 2nde dimension de tabloR ?
Merci d'utiliser l'icone </>
pour garder le code plus lisible et avec son indentation.
eric
Si vous désirez des explications sur les manipulations du tableau revenir vers moi en tout cas encore un grand merci de prendre du temps pour moi
Je n'ai touché qu'à la fabrication du tableau, pas à son collage qui est inchangé. Revois ta partie
De toute façon le code de ton fichier est protégé...
eric
Désolé pour le mot de passe voici
Bonjour,
je cherche à éliminer à chaque ligne de mon tableau les valeurs qui se trouve entre 0,1et 0,07 dans une des cellules de la ligne
Déjà je pense que j'avais mal interprété car compris que tu voulais supprimer toute la ligne si une valeur n'était pas conforme.
Mais dans le code tu indiques > 0.1 < 0.07 ce qui est le contraire de "entre 0,1et 0,07"
Et les valeurs entre 0 (que tu veux supprimer) et 0.07 tu en fais quoi ? Tu les laisses ? Y'en-a-t'il d'ailleurs ?
Tu peux redire précisément et en détail ton besoin stp.
Par ailleurs tu veux supprimer les lignes avec ""Technicienne de surface" mais tu n'as que "Technicienne de" dans les cellules (?!?)
eric
Bonjour
Je suis désolé c’est sûrement moi qui me suis mal exprimé.
Sur le classeur que je t’ai Envoyer sur la première feuille il y a le tableau qui va être transformé dans un ordre précis comme tu l’as remarqué par compte les héros doivent être supprimé des cellules pas les lignes.
Et aussi les valeurs 0.01 et 0.08 la les lignes doivent être supprimées.
Tout en sachant que dans ce tableau de 900 lignes il n’y a que quatre lignes je pense qui contient ses valeurs.
Pour ma part je savais supprimer les lignes en dessous de 0.08
Mais alors il supprime toutes les lignes qui sont vides aussi ou 00.00 ce qu’il ne faut pas.
Je me doute que c’est compliqué simplement pour enlever de quatre lignes je me demande si c’est pas plus simple de les supprimer manuellement !!!
J’espère avoir été un peu plus précis que la première fois ?
Merci
Non, pas plus clair.
C'était 0.07, maintenant c'est 0.08
Et le 0.1 est devenu 0.01, mais dans les cellules la valeur exacte est 0.00999999977648258 (< 0.01 !)
Et aussi les valeurs 0.01 et 0.08 la les lignes doivent être supprimées.
Maintenant c'est à nouveau les lignes qu'il faut supprimer (?!?)
On ne sait toujours pas si c'est celles avec des données entre ces ces valeurs ou à l'extérieur qu'il faut supprimer.
Bref, j'abandonne ou fait toi aider par quelqu'un pour expliquer clairement et précisément
eric