VBA Eviter la prise en compte de cellules vides
C
Bonjour le forum
la présent procédure en fin additionne des cellules, toutefois elle met des zeros dans des cellules vides ce qui s'avére genant. Comment éviter cela ? voir fichier
l'utilisation de plages multiples est possible mais ce sont alors des suites impressionantes de plages.
Merci de votre Aide
Private Sub Worksheet_Calculate()
'TRANSFERT DE DONNEES SUITE RESULTATS
If Range("$DL$2") = 1 Then
Dim rg As Range, r1 As Range, r2 As Range
Dim p1 As String, p2 As String
Application.ScreenUpdating = False 'ne pas raffraîchir l'affichage pendant la macro (plus rapide)
'Pour le 1er tableau, à répéter pour les x tableaux, changer les plages
Set rg = Feuil1.Range("DW23") '1re cellule contenant les infos des 30 tableaux
For j = 0 To 7 '8-1 = nombre de tableaux... à adapter
Range("$DN$2").Formula = j
On Error Resume Next 'nécessaire s'il y a des cellules vides.
p1 = CStr(rg.Offset(j, 1)) 'nom de la plage 1
p2 = CStr(rg.Offset(j, 5)) 'nom de la plage 2
Set r1 = Feuil1.Range(p1) 'convertir le nom en plage
Set r2 = Feuil1.Range(p2) 'convertir le nom en plage
Range("$C$33").Formula = p1
Range("$D$33").Formula = p2
Call MAJ_Tablo2(r1, r2) ' appel de la fonction
Set r1 = Nothing 'vider la plage
Set r2 = Nothing 'vider la plage
Next j
Application.ScreenUpdating = True
End If
End SubSub MAJ_Tablo2(ByRef pTab1 As Range, ByVal pTab2 As Range)
'pTab1 est la plage contenant les agences dans la colonne V
'pTab2 est la plage contenant les agences dans la colonne L
Dim c1 As Range, c2 As Range
For Each c1 In pTab1
For Each c2 In pTab2
If c2 = c1 Then
'on additionne les effectifs, les caht, les intérims
c1.Offset(0, 39) = c1.Offset(0, 39) + c2.Offset(0, 10)
c1.Offset(0, 40) = c1.Offset(0, 40) + c2.Offset(0, 11)
c1.Offset(0, 41) = c1.Offset(0, 41) + c2.Offset(0, 12)
End If
Next c2
Next c1
End Sub
Bonjour
Beaucoup de méthodes pour masquer les 0
MEFC, Format personalisé, Option
Dans ta macro essayes
Sub MAJ_Tablo2(ByRef pTab1 As Range, ByVal pTab2 As Range)
'pTab1 est la plage contenant les agences dans la colonne V
'pTab2 est la plage contenant les agences dans la colonne L
Dim c1 As Range, c2 As Range
Dim N As Byte
For Each c1 In pTab1
For Each c2 In pTab2
If c2 = c1 Then
'on additionne les effectifs, les caht, les intérims
For N = 10 To 12
If c1.Offset(0, N + 29) + c2.Offset(0, N) > 0 Then
c1.Offset(0, N + 29) = c1.Offset(0, N + 29) + c2.Offset(0, N)
Else
c1.Offset(0, N + 29) = ""
End If
Next N
' c1.Offset(0, 39) = c1.Offset(0, 39) + c2.Offset(0, 10)
' c1.Offset(0, 40) = c1.Offset(0, 40) + c2.Offset(0, 11)
' c1.Offset(0, 41) = c1.Offset(0, 41) + c2.Offset(0, 12)
End If
Next c2
Next c1
End SubC
Forum Re
Cher Banzai tu es un amour
Ca marche impecable, quel talent hum
bisous bisous
Cordialement
Muriel