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
je vous met un extrait du fichier en copie, par contre ile ne fonctionnera pas complètement car je fais des extraction de donnée d'un logiciel de production

Par contre j'ai vraiment besoin de garder ma premiere partie de code pour effacer uniquement les formules dans les colonnes G H et J la ou des données numériques sont présentes sur la ligne
 

Pièces jointes

  • suivi.xlsm
    563.7 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
bon. déjà.. il faut préciser quelques points

les 40 dernières lignes.. ce sont lesquelles pour toi dans ton fichier???

un commentaire sur ton fichier
ce n'est pas très cohérent
1) feuille 507
tu as 83 lignes remplies sur les colonnes A à J, mais ensuite
il y a 842 lignes remplies sur les colonnes K à O
soit 842-83=759 lignes à moitié vide
une MFC qui court sur des colonnes entières inutilement

tu dis vouloir garder les lignes "à moitié vide" pour tracer ton graph?? oi=k. sauf que selon les séries. seules les 280 ou 583 lignes sont prises en compte

pourquoi ne pas utiliser des tables structurées qui permettent d'avoir une plage de données "utiles" dynamique ?

autre chose: les macros sont plutot à mettre dans un module standard
et tes boutons; bah. il faut leur affecter la bonne macro
 

vincent32

XLDnaute Nouveau
Mes 40 dernières lignes sont sur la bas de la colonne A
Les colonnes K L M et O sont des colonnes qui me servent pour mon graphique je m'explique :
Mes donnés dans les colonnes A à E sont des valeurs réelles extraite sur le logiciel de prod à la date et heure souhaitée, hors pour estimer quand la valeur R (colonne D) va atteindre 10% d'usure (colonne K) ou 7% (colonne L) je trace une courbe tendance linéaire ou logarithmique et Je prolonge mon graphique dans le temps et je cherche la date à laquelle ma tendance coupe la valeur 10% ou 7%

Ensuite les colonnes G H et I sont un classement des produits en fonction de plusieurs paramètres.

Concernant les boutons je ne comprends pas ce que tu veux dire ? sur le bouton feuille graph je souhaite affecter la Marco Graphique10.reset_507 .

Concernant les séries quand jai tronqué j'ai perdu des donnée car normalement mon fichier démarre en 2019 (trop lourd pour le charger sur le site). mais j'ai normalement des valeurs dans les colonne H et I.

Je sais pas si j'ai été très clair ...

Dsl je ne connais pas les tables structurée ... je ne suis pas du tout un expert sur excel je fais ce que je peux en m'aidant d'internet et pour la première fois je poste sur un forum car la je coince vraiment .
 

vincent32

XLDnaute Nouveau
bon. déjà.. il faut préciser quelques points

les 40 dernières lignes.. ce sont lesquelles pour toi dans ton fichier???

un commentaire sur ton fichier
ce n'est pas très cohérent
1) feuille 507
tu as 83 lignes remplies sur les colonnes A à J, mais ensuite
il y a 842 lignes remplies sur les colonnes K à O
soit 842-83=759 lignes à moitié vide
une MFC qui court sur des colonnes entières inutilement

tu dis vouloir garder les lignes "à moitié vide" pour tracer ton graph?? oi=k. sauf que selon les séries. seules les 280 ou 583 lignes sont prises en compte

pourquoi ne pas utiliser des tables structurées qui permettent d'avoir une plage de données "utiles" dynamique ?

autre chose: les macros sont plutot à mettre dans un module standard
et tes boutons; bah. il faut leur affecter la bonne macro
Quel est la différence entre faire un module et faire sur la feuille comme je l'ai fait ?
 

vincent32

XLDnaute Nouveau
donne leur numéro..
de 83 à 123 ?
de 802 à 842 ??

Dans le code, la ligne
Derlig = .Range("A" & Rows.Count).End(xlUp).Row

donne le numéro de la Dernière Ligne NON vide de la colonne A
dans le cas présent ==>83
mais si tu avais fait
Derlig = .Range("K" & Rows.Count).End(xlUp).Row
le résultat serait 842
ce qui m'intéresse c'est que ma dernière ligne non vide soit celle de la colonne A donc 83
 

vgendron

XLDnaute Barbatruc
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
            .Range("A" & Lig & ":J" & Lig).ClearContents    'on efface la ligne de la colonne A à J
        End If
    Next Cel
End With
Set PlageD = Nothing
End Sub
 

vincent32

XLDnaute Nouveau
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
            .Range("A" & Lig & ":J" & Lig).ClearContents    'on efface la ligne de la colonne A à J
        End If
    Next Cel
End With
Set PlageD = Nothing
End Sub
43 a 83
 

vgendron

XLDnaute Barbatruc
je ne sais pas comment tu te débrouilles.. mais en pj: pas de souci
le code fait ce qu'il est censé faire.. à savoir rien puisqu'il n'y a pas de cellule vide dans la colonne D
 

Pièces jointes

  • suivi.xlsm
    503.1 KB · Affichages: 1

vgendron

XLDnaute Barbatruc
je suis en train de regarder tes autres macros...
elles fonctionnent???
si je regarde la macro "Data"

telle qu'elle est écrite soit elle ne fait rien (la date en Colonne A 3 lignes avant la fin est Supérieure a aujourd'hui).. soit elle tourne en rond jusqu'à plantage
 

vincent32

XLDnaute Nouveau
En fait tu a écraser le bouton dans la feuille "507" c'est une macro (cc_507) qui me sert à créer automatiquement des lignes supplémentaire en fonction de la date. hors quand je les créée ca me met les heures du jours même celle qui ne sont pas passées.

Avec ma deuxième macro (reset_507) dont le bouton se situe sur la feuille graphique "3-Graph507" je supprime
dans un premier temps les formules dans les colonnes G H et I sur les lignes ou la cellule en colonne D est numérique
ensuite j'efface les cellules de A à J si la valeur de la colonne D n'est pas numérique (<No Value>)

Je ne souhaite pas mettre les deux macro en une.
 

Discussions similaires

Réponses
2
Affichages
140

Statistiques des forums

Discussions
312 078
Messages
2 085 108
Membres
102 780
dernier inscrit
bouratinou