Faire une condition à partir du total de plage de cellulles

Résolu
Mouftie Messages postés 215 Date d'inscription   Statut Membre Dernière intervention   -  
Mouftie Messages postés 215 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je voudrais supprimer les lignes si toutes les données de la ligne sont à 0 et effacer les données, quand une partie seulement est à 0
J'ai écris :
Sub SuppLgVide()
'Si aucune acivité sur un jour, on supprime la ligne
'Si aucune activité dans un domaine (DA, DP ou GRC) on vide les zéros
Dim TabloSem As Range, FinSem As Integer, DebSem As Integer
Dim Lg As Range, i As Long
FinSem = Sheets("BdD").Range("A65000").End(xlUp)(1).Row
DebSem = Sheets("BdD").Range("U" & FinSem).End(xlUp).Row + 1
For i = DebSem To FinSem 'Each Lg In TabloSem
If Range("E" & i).Value = 0 And Range("F" & i).Value = 0 Then Rows.Delete
Next i
End Sub
cela fonctionne, mais j'ai une 20e de cellules à tester, ça fait beaucoup de And...
Peut-on faire une somme du style si la somme de range("E" & i & ":T" & i) =0 alors on supprime ?
L'idéal pour moi serait d'utiliser le système
si SUM(TabBdD[#This_Row,[ContTrait]:[PostTraitT]]) = 0 alors on supprime, sachant que this row est i
Car j'ai d'autres actions à mener selon cette méthode

d'avance merci pour votre aide

6 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Par contre, j'ai oublie une chose tres importante:

For i = DebSem To FinSem

doit etre remplacer par:

For i = 1 To TabloSem.Rows.Count 'sinon il y a decalage dans les donnees si pas ligne 1 en premier ex: si DebSem=7----> tout faux

'--------------------------------------------------
Pour correspondances de colonnes

C'est tout simple: A-->1, B--->2, etc ...

'--------------------------------------------------
Mais, car il y a un mais. Dans tous les cas ce sont les "colonnes" du tableau mis en memoire qui sont a prendre en compte.
Dans votre cas vous mettez en memoire une zone de cellules qui commence en A, la pas de probleme les "colonnes" du tableau correspondent aux colonnes excel.

Si par exemple la zone de cellules et : "E2:U12"

les "colonnes" de donnees correspondant aux colonnes E et T d'excel seront decalee de 5: E correspond a la colonne 1 du tableau et T correspond a la colonne 16 du tableau

SomVide = Application.WorksheetFunction.Sum(TabloSem.Range(Cells(i, 1), Cells(i, 16)))
1
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

test somme plage:

If Application.WorksheetFunction.Sum(Range("E" & i & ":T" & i)) = 0 Then
0
Mouftie Messages postés 215 Date d'inscription   Statut Membre Dernière intervention   16
 
Bonjour F894009,
Merci, voici ce que ça donne
Sub SuppLgVide()
'Si aucune acivité sur un jour, on supprime la ligne
'Si aucune activité dans un domaine (DA, DP ou GRC) on vide les zéros pour les moyennes
Dim TabloSem As Range, FinSem As Integer, DebSem As Integer
Dim SomVide As Double, SomDA As Double, SomDP As Double, SomGRC As Double
Dim i As Long
Application.ScreenUpdating = False 'stop rafraichissement ecran
FinSem = Sheets("BdD").Range("A65000").End(xlUp)(1).Row
DebSem = Sheets("BdD").Range("U" & FinSem).End(xlUp).Row + 1
Set TabloSem = Sheets("BdD").Range("A" & DebSem & ":V" & FinSem)
For i = DebSem To FinSem 'Each Lg In TabloSem
SomVide = Application.WorksheetFunction.Sum(Range("E" & i & ":T" & i))
SomDA = Application.WorksheetFunction.Sum(Range("E" & i & ":J" & i))
SomDP = Application.WorksheetFunction.Sum(Range("K" & i & ":Q" & i))
SomGRC = Application.WorksheetFunction.Sum(Range("R" & i & ":T" & i))
If SomDA = 0 Then
Range("E" & i & ":J" & i).Clear
If SomDP = 0 Then
Range("K" & i & ":Q" & i).Clear
If SomGRC = 0 Then
Range("R" & i & ":T" & i).Clear
If SomVide = 0 Then
Rows(i).EntireRow.Delete
End If
End If
End If
End If
Next i
Application.ScreenUpdating = True
End Sub
Cela fonctionne, mais je me demande si cela ne peut pas être optimisé ?
Si non ma question portait également sur l'utilisation des champs du tableau excel, au lieu de range("E" & i & ":T" & i), ne peut-on pas utiliser un "truc" comme
Application.WorksheetFunction.Sum(Tablo1[ row i,[Champs1:Champs5]])
Merci de ta réponse
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Ca marche pas tout a fait comme ca, mais ca y ressemble.

ex:
pour
SomVide = Application.WorksheetFunction.Sum(Range("E" & i & ":T" & i))

ca donne ceci: un peu moins parlant si pas de commentaire, mais plus rapide en execution
SomVide = Application.WorksheetFunction.Sum(TabloSem.Range(Cells(i, 5), Cells(i, 20)))

A+
0

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

Posez votre question
Mouftie Messages postés 215 Date d'inscription   Statut Membre Dernière intervention   16
 
Re Bonjour F894009,
Merci beaucoup, c'est exactement ce que je voulais ; sinon, au niveau de ma procédure, il n'y a pas plus simple que tous ces if ?

Et sans abuser une autre question d'ordre général (mais je suis autodidacte et je cherche à prendre les bonnes habitudes...)
comment faites-vous pour vous y retrouver avec les cells(i, 20) ? comment savez-vous que 20 correspond à la colonne T ou inversement que la colonne T est la 20ème.
De même dans les formules RC[-2] ; vous avez un tableau devant les yeux ? c'est l'expérience ?
Je n'ai jamais lu un mot là dessus et c'est un mes cauchemards...
0
Mouftie Messages postés 215 Date d'inscription   Statut Membre Dernière intervention   16
 
Encore merci,
c'est très clair.
Bonne journée -
RESOLU ! et plus encore...
0