Microsoft 365 Urgent : Supprimer et filtrer des données VBA

gaelle31

XLDnaute Nouveau
Bonjour,

Je souhaiterais, à travers une macro VBA, si les cellules allant de J7 à J22 sont égales à zéro, alors les données des cellules C, D, F,G et I s'effacent.

Or, quand j'applique la macro que j'ai construit (ci-dessous), cela ne s'applique ne fonctionne que pour la première ligne (ligne 7).
Je pense que c'est une histoire de Next mais je ne suis pas certaine.

Sub Reinitialiser_jour()

Dim cel As Range

For Each cel In Range("J7:J22")
If cel = 0 Then
Range("C" & cel.Row).Resize(, 2).ClearContents
Range("f" & cel.Row).Resize(, 2).ClearContents
Range("I" & cel.Row).Resize(, 1).ClearContents
' Si les cellules comprises entre J7 et J22 sont vides (plus de stock en fin de journée)
' alors vier le contenu des cellules C7 à G22 et I7 à I22

Exit For
End If
Next

End Sub

Merci d'avance pour votre aide
 

Deadpool_CC

XLDnaute Accro
bonjour, tu t'es juste emmelé les pinceaux : le Exit for sert à rien.

Essaye cela et dis nous :

VB:
Sub Reinitialiser_jour()

Dim cel As Range

For Each cel In Range("J7:J22")
    If cel.Value = 0 Then
        Range("C" & cel.Row).Resize(, 2).ClearContents
        Range("f" & cel.Row).Resize(, 2).ClearContents
        Range("I" & cel.Row).Resize(, 1).ClearContents
' Si les cellules comprises entre J7 et J22 sont vides (plus de stock en fin de journée)
' alors vier le contenu des cellules C7 à G22 et I7 à I22
    End If
Next

End Sub

ps : on test bien la valeur 0 et non pas Vide dans ta cellule !

(Et si c'est bon t'as plus qu'à valider le présent post comme solution (à droite dans la colonne grise tu clique sur le rond... lol)
 
Dernière édition:

AtTheOne

XLDnaute Impliqué
Supporter XLD
bonjour à toutes & à tous, bonjour @gaelle31,
Urgent, c'est toujours urgent ;) ...
Une petite précision, quand une cellule X de la plage J7:J22 est égale à zèro (ou vide ?) est-ce qu'il faut vider (et non pas mettre à 0) les cellules en regard de cette cellule X (même ligne) des colonnes C,D,F,G,I. Ou faut t'il tester si toutes les cellules de la plage J7:J22 sont égales à 0 (ou vides ?) et alors vider (et non pas mettre à zéro) toutes les cellules en regard des colonnes C,D,G,F,I ?.
Précise si c'est 0 ou vide et si c'est effacer ou mettre un 0, et si c'est toutes les cellules ou cellule par cellule.
(Si c'est cellule par cellule il suffit d’ôter le exit for de ta boucle)
Amicalement
Alain
 

gaelle31

XLDnaute Nouveau
Bonjour,
C'est vraiment si les cellules J7 à J22 sont égales à zéro (pas vides).

Par contre, après réflexion, j'aimerais également que ma macro fonctionne si les cellules J7 à J22 ET les cellules D7 et D22 sont égales à zéro alors ma macro s'exécute.
Est-ce que je rajoute juste un "ET" dans ma macro, cela fonctionne ?

Merci d'avance à vous
 

gaelle31

XLDnaute Nouveau
bonjour, tu t'es juste emmelé les pinceaux : le Exit for sert à rien.

Essaye cela et dis nous :

VB:
Sub Reinitialiser_jour()

Dim cel As Range

For Each cel In Range("J7:J22")
    If cel.Value = 0 Then
        Range("C" & cel.Row).Resize(, 2).ClearContents
        Range("f" & cel.Row).Resize(, 2).ClearContents
        Range("I" & cel.Row).Resize(, 1).ClearContents
' Si les cellules comprises entre J7 et J22 sont vides (plus de stock en fin de journée)
' alors vier le contenu des cellules C7 à G22 et I7 à I22
    End If
Next

End Sub

ps : on test bien la valeur 0 et non pas Vide dans ta cellule !

(Et si c'est bon t'as plus qu'à valider le présent post comme solution (à droite dans la colonne grise tu clique sur le rond... lol)
C'était en effet qu'une histoire de Exist For.... Merci beaucoup ! :)

Par contre, après réflexion, j'aimerais également que ma macro fonctionne si les cellules J7 à J22 ET les cellules D7 et D22 sont égales à zéro alors ma macro s'exécute.
Est-ce que je rajoute juste un "ET" dans ma macro, cela fonctionne ?

Merci d'avance à vous
 

Deadpool_CC

XLDnaute Accro
sans l'avoir testé ... j'aurais mis :
VB:
Sub Reinitialiser_jour()

Dim cel As Range

For Each cel In Range("J7:J22")
    If cel.Value = 0  And Range("D" & cel.Row).Value = 0 Then
        Range("C" & cel.Row).Resize(, 2).ClearContents
        Range("f" & cel.Row).Resize(, 2).ClearContents
        Range("I" & cel.Row).Resize(, 1).ClearContents
' Si les cellules comprises entre J7 et J22 sont vides (plus de stock en fin de journée)
' alors vier le contenu des cellules C7 à G22 et I7 à I22
    End If
Next

End Sub

dans ce cas les 2 cellules J et D doivent être à 0 pour qu'on vide les autres.
Si jamais c'est l'une ou l'autre à 0 provoque le vidage alors utilise "Or"
 

soan

XLDnaute Barbatruc
Inactif
@gaelle31

j'aimerais également que ma macro fonctionne si les cellules J7 à J22 ET les cellules D7 à D22 sont égales à zéro ; est-ce que je rajoute juste un "ET" dans ma macro ?

réponse par rapport à mon code VBA du post #6 : non, ce n'est pas la peine d'ajouter un ET, car il suffit d'ajouter la plage supplémentaire à la fonction SUM() :​

VB:
Sub Reinitialiser_jour()
  Application.ScreenUpdating = 0
  If Application.Sum([D7:D22, J7:J22]) = 0 Then _
    [C7:D22, F7:G22, I7:I22].ClearContents
End Sub

c'est plus logique de mettre la plage D avant la plage J ! 😜

soan
 

vgendron

XLDnaute Barbatruc
Bonjour

juste une remarque sur le message obtenu qui t'a fait mettre exit for
VB:
Parce que lorsque je lance la macro, il me demande de mettre un "Exit For" car ma formule contient un "For"

une boucle qui commence par FOR necessite un "NEXT" en fin de boucle.. et pas un exit for
 

Discussions similaires

Réponses
0
Affichages
83
Réponses
7
Affichages
292

Statistiques des forums

Discussions
311 722
Messages
2 081 930
Membres
101 843
dernier inscrit
Thaly