Microsoft 365 VBA effacer plusieurs cellules en fonctionde la valeur d'une dans une boucle for

vincent32

XLDnaute Nouveau
Bonjour tout le monde,
Je me permet de demander votre car après plusieurs heures de recherches sur la toile je ne trouve pas de solutions ....
je souhaiterai ajouter à cette petite macro une fonction supplémentaire: faire une boucle sur les 40 dernières lignes , si la cellule en colonne D n'est pas une valeur numérique effacer les cellules de A à K de cette même ligne ( je ne souhaite pas effacer la ligne entière car des valeurs en colonne L, M, N, O et P me servent pour des graphiques. )

Sub reset_507()
Dim plage As Range
Dim Cel As Range
With Sheets("507")
Set plage = Range(.Cells(6, 6).End(xlDown)(-40), .Cells(6, 10).End(xlDown)(-2))
For Each Cel In plage
If IsNumeric(Cel) Then
Cel.Value = Cel.Value
Else:
Cel.ClearContents
End If
Next Cel
End With
End Sub
1677599201483.png





Merci d'avance pour votre aide.
 
Solution
et donc tu ne réponds pas à la question !!!
les 40 dernières lignes sont: ???
43-83
83-123 ou ??????

la macro qui efface les colonnnes A à J si il n'y a pas de valeur numérique en D
VB:
Sub reset_507()
Dim PlageD As Range
Dim Cel As Range
Dim Derlig As Long
Dim Lig40 As Long
Dim Lig As Long
   
With Sheets("507")
    Derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne NON vide de la colonne A
    Lig40 = Derlig - 40 'première ligne des 40 dernières
    Set PlageD = .Range("D" & Lig40 & ":D" & Derlig)       'Plage des 40 dernières lignes de la colonne D
    For Each Cel In PlageD
        If Not IsNumeric(Cel.Value) Or Cel.Value = "" Then      'pas numerique ou vide
            Lig = Cel.Row       'ligne pour RAZ...

vincent32

XLDnaute Nouveau
oui effectivement, j'avais pas repéré que le set cel se faisait à chaque tour de boucle
pour la macro Reset_507
tu peux bien la lancer de n'importe quel bouton de n'importe quelle feuille, ca n'a pas d'importance
sur mon fichier complet ca ne fonctionnais pas, je viens de trouver une solution qui le fait fonctioner au début de la macro de oneida j'ai rajouté ca :
Worksheets("507").Activate
 

vincent32

XLDnaute Nouveau
Bah NON justement !! le with sheets("507") EVITE d'avoir à activer la feuille

Reprend la macro post 24 (il manquait un point dans la macro de Oneida)
Même avec le point qui manquais comme tu disais ca fonctionne pas .....
J'ai utilisé du coup sheets("507").select au début de la macro de oneida et a la fin sheets("3-Graph507"). select pour revenir sur mon graphique .....comme ca elle fonctionne la macro je vois pas d'autre solution .....

Je te remet la macro que oneida ma fournis dis moi si tu vois une erreur ...


Dim PlageD As Range
Dim Cel As Range
Dim Derlig As Long
Dim Lig40 As Long
Dim Lig As Long

With Sheets("507")
Derlig = .Range("A" & Rows.Count).End(xlUp).Row
Lig40 = Derlig - 40
Set PlageD = .Range("B" & Lig40 & ":B" & Derlig) 'Plage colonne D
For Each Cel In PlageD
If Not IsNumeric(Cel.Value) Or Cel.Value = "" Then 'pas numerique ou vide
Lig = Cel.Row 'ligne pour RAZ
.Range("A" & Lig & ":J" & Lig).ClearContents 'plage RAZ
End If
Next Cel
End With
Set PlageD = Nothing

End Sub
 

vgendron

XLDnaute Barbatruc
bon. ca me saoule..
tu ne prend pas en compte ce qu'on te dit, ni le dernier code
dans la macro que tu viens de poster il y a DEUX erreurs
derlig==> manque un point devant le rows.count
set PlageD ==> ca prend la colonne B et pas la colonne D
 

vincent32

XLDnaute Nouveau
bon. ca me saoule..
tu ne prend pas en compte ce qu'on te dit, ni le dernier code
dans la macro que tu viens de poster il y a DEUX erreurs
derlig==> manque un point devant le rows.count
set PlageD ==> ca prend la colonne B et pas la colonne D
Sincèrement désolé ... ca fonctionne parfaitement avec le post 24 tu à raison, sincèrement désolé de t'avoir fait perdre ton temps
J'avais pas recopié le post 24 mais juste rajouté le .

En tout cas vraiment merci pour ta patiente ( et dieu sait qu'il t'en fallu ) et ta pédagogie et un grand merci à oneida aussi
 

vincent32

XLDnaute Nouveau
Sincèrement désolé ... ca fonctionne parfaitement avec le post 24 tu à raison, sincèrement désolé de t'avoir fait perdre ton temps
J'avais pas recopié le post 24 mais juste rajouté le .

En tout cas vraiment merci pour ta patiente ( et dieu sait qu'il t'en fallu ) et ta pédagogie et un grand merci à oneida aussi
une dernière question, c'est quoi l'intérêt de le faire sur un module comme tu le fait et pas sur les feuilles comme je fait ?
 

vgendron

XLDnaute Barbatruc
l'intérêt c'est que le module standard est fait pour ca. rassembler les macros qui sont appelées ici où la
(pas vérifié, mais ca permet aussi d'appeler la macro sans avoir à préciser le code feuille comme tu l'as fait sur tes "boutons" shapes

et dans la feuille, on place plutot les codes "évènements" qui se déclenchent uniquement sur la feuille concernée
 

vgendron

XLDnaute Barbatruc
un mot sur la table structurée que j'ai mise dans ta feuille 507

clique n'importe ou à partir de la ligne 6
tu as un nouveau menu "Conception de table" qui apparait
va dedans
à gauche; Nom du tableau = j'ai mis: T_BDD

une table permet
1) d'avoir une table de données "propre" et jolie
==> tu choisis le style
2) si tu ajoutes une donnée juste en dessous: la table s'adapte automatiquement ==> les formules et MFC sont propagées à la nouvelle ligne

3) dans le code VBA: (Table = ListObjects"), la manipulation des données est facilitée
plus besoin de lastLine=range(".....").row..;
on a accès directement par listrows.count

4) tu peux déplacer la table dans la feuille (vers le bas, ou la droite ou ...) le code n'a pas besoin d'etre modifié (s'il a été écrit correctement)

un peu de lecture ici

 

vincent32

XLDnaute Nouveau
un mot sur la table structurée que j'ai mise dans ta feuille 507

clique n'importe ou à partir de la ligne 6
tu as un nouveau menu "Conception de table" qui apparait
va dedans
à gauche; Nom du tableau = j'ai mis: T_BDD

une table permet
1) d'avoir une table de données "propre" et jolie
==> tu choisis le style
2) si tu ajoutes une donnée juste en dessous: la table s'adapte automatiquement ==> les formules et MFC sont propagées à la nouvelle ligne

3) dans le code VBA: (Table = ListObjects"), la manipulation des données est facilitée
plus besoin de lastLine=range(".....").row..;
on a accès directement par listrows.count

4) tu peux déplacer la table dans la feuille (vers le bas, ou la droite ou ...) le code n'a pas besoin d'etre modifié (s'il a été écrit correctement)

un peu de lecture ici

ok je regarder ca d'un peu plus près ca m'intéresse merci bcp bonne continuation
 

Discussions similaires

Réponses
2
Affichages
147

Statistiques des forums

Discussions
312 199
Messages
2 086 157
Membres
103 137
dernier inscrit
Billly