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 -
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 :
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
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()cela fonctionne, mais j'ai une 20e de cellules à tester, ça fait beaucoup de And...
'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
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
A voir également:
- Faire une condition à partir du total de plage de cellulles
- Comment faire une recherche à partir d'une photo - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Excel cellule couleur si condition texte - Guide
- Roland souhaite calculer le montant total des ventes de son magasin. le fichier contient, pour chaque produit, la quantité vendue et le prix unitaire. calculez le montant total des ventes. ✓ - Forum Excel
- Total uninstall - Télécharger - Divers Utilitaires
6 réponses
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)))
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)))
Bonjour F894009,
Merci, voici ce que ça donne
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
Merci, voici ce que ça donne
Sub SuppLgVide()Cela fonctionne, mais je me demande si cela ne peut pas être optimisé ?
'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
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
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+
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+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
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...