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...

Oneida

XLDnaute Impliqué
Bonjour,
Une facon de faire:
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
        Lig40 = Derlig - 40
        Set PlageD = .Range("D" & Lig40 & ":D" & 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 & ":K" & Lig).ClearContents    'plage RAZ
            End If
        Next Cel
    End With
    Set PlageD = Nothing
End Sub
 

vincent32

XLDnaute Nouveau
Bonjour,
Une facon de faire:
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
        Lig40 = Derlig - 40
        Set PlageD = .Range("D" & Lig40 & ":D" & 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 & ":K" & Lig).ClearContents    'plage RAZ
            End If
        Next Cel
    End With
    Set PlageD = Nothing
End Sub
Merci beaucoup j'essaye ca demain
 

vincent32

XLDnaute Nouveau
Bonjour,
Une facon de faire:
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
        Lig40 = Derlig - 40
        Set PlageD = .Range("D" & Lig40 & ":D" & 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 & ":K" & Lig).ClearContents    'plage RAZ
            End If
        Next Cel
    End With
    Set PlageD = Nothing
End Sub
bonjour,
la macro fonctionne bien quand je lance via VBA par contre quand je l'affecte à un bouton ca me met erreur 400 ...
Vous avez une idée ?
Sub reset_507()
Dim plage As Range
Dim Cel10 As Range
With Sheets("507")
Set plage = Range(.Cells(6, 6).End(xlDown)(-40), .Cells(6, 10).End(xlDown))
For Each Cel10 In plage
If IsNumeric(Cel10) Then
Cel10.Value = Cel10.Value
Else:
Cel10.ClearContents
End If
Next Cel10
End With

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("D" & Lig40 & ":D" & 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

1677657451824.png
 

vincent32

XLDnaute Nouveau
Je viens de comprendre :
Mon bouton se trouve sur une feuille différente de la feuille de données je m'explique :
J'ai une première feuille sur laquelle j'ai mes données
Et une seconde feuille graphique ou je traite les données sur un graphique.
Si je met mon bouton sur la feuille de données tout fonctionne bien par contre si mon bouton se trouve sur la feuille graphique (ce dont j'ai besoin) ca me met erreur 400 ...
Y'a t-il une solution pour résoudre ce problème ?

Merci par avance
 

vgendron

XLDnaute Barbatruc
Hello
Sans fichier exemple.. on tourne en rond..
maintenant..
dans ton code initial il y a un problème
quand on utilise with sheets("nomfeuille")

il faut mettre les points "." devant les plages ou cellules..

VB:
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
 

vincent32

XLDnaute Nouveau
Hello
Sans fichier exemple.. on tourne en rond..
maintenant..
dans ton code initial il y a un problème
quand on utilise with sheets("nomfeuille")

il faut mettre les points "." devant les plages ou cellules..

VB:
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
est-ce que je peux te l'envoyer en message privé le fichier ? ?
 

vgendron

XLDnaute Barbatruc
est-ce que je peux te l'envoyer en message privé le fichier ? ?
Je ne crois pas que ce soit possible
tu peux par contre prendre ton fichier et supprimer ou remplacer les données perso
ou alors en créer un nouveau en y mettant le strict minimum utile pour le pb traité

PS: sur l'image que tu as pris la peine de créer et poster, je ne vois qu'un tableau sans données confidentielles..
poste juste cette feuille
 

vgendron

XLDnaute Barbatruc
de plus. le code de @Oneida que je salue, fonctionne très bien
quelque soit la page sur laquelle se trouve ton bouton, le code s'execute sur la feuille 507 (gràce à l'utiisation du with)

et comme indiqué par Oneida. tu dois prendre son code à LA PLACE du tien.. et pas en supplément comme tu sembles l'avoir fait dans ton post 6
 

Discussions similaires

Réponses
2
Affichages
140

Membres actuellement en ligne

Statistiques des forums

Discussions
312 106
Messages
2 085 352
Membres
102 871
dernier inscrit
Maïmanko