Microsoft 365 Supprimer les cellules ne contenant pas des nombres avec macros

LEWISBEGIN

XLDnaute Nouveau
Bonjour, j'ai besoin d'un coup de main de votre part pour bâtir une macro dans Excel pour exercer une tâche qu'on doit faire manuellement à mon travail. (Parfois plus de 1000 lignes sur plusieurs colonne.

Je me débrouille en formule mais là dans ce cas, on doit y aller avec un bouton et une macros et c'est trop complexe pour un type comme moi ;-)

Bref, j'ai une liste de numéro de bon associé à une charge de travail en heure que je dois calculer par la suite mensuellement ou hebdo.

Cette liste est extraite via notre système de gestion et je travail à partir de cette liste pour faire des analyses.

Parfois, les bons sont associés à une main d'œuvre lorsqu'ils sont prêt à être exécuté et lorsque j'extrait la liste, le numéro d'employé est inscrit à droite du nombre d'heure.

J'ai mis un exemple en pièce jointe, les champs en bleu sont les heures et les champs en jaune sont les numéro d'employé bidon que j'ai mis mais c'est toujours à 5 caractères.
Parfois, il y a 2 main d'œuvre d'associés et les numéros d'employés sont séparé par une virgule.

Je crois que lorsque les numéros d'employés sont extrait, ils ne sont pas considéré comme des nombres.
J'aimerais faire un bouton avec une macro qui efface le contenu des cellules dont le contenu n'est pas un nombre.

J'utilise la version Excel 365 pour votre info.

Merci beaucoup de votre aide.
 

Pièces jointes

  • EXEMPLE POUR MACROS EXCEL.xlsm
    22.6 KB · Affichages: 14
Solution
Bonsoir @LEWISBEGIN :), @Dranreb ;),
Bienvenue sur XLD 🙂

Une autre macro à associer à votre bouton:
VB:
Sub SupprConstNonNum()
   On Error Resume Next
   Range("D11:O17").SpecialCells(2, 22).ClearContents
End Sub

ou bien si on ne connait pas à l'avance le nombre de lignes et de colonnes mais si la structure des en-têtes est toujours la même et si la zone concernée débute toujours en D11:
VB:
Sub SupprConstNonNum()
Dim a&, b&
   a = Cells(Rows.Count, "a").End(xlUp).Row: b = Cells(10, Columns.Count).End(xlToLeft).Column
   On Error Resume Next
   Range(Range("d11"), Cells(a, b)).SpecialCells(2, 22).ClearContents
End Sub

En exemple un fichier avec la 2ème macro et aussi une formule matricielle en E3 qui doit donner le...

Dranreb

XLDnaute Barbatruc
Bonsoir.
Affectez cette macro à votre bouton :
VB:
Sub ViderNonNum()
   Dim RDon As Range, TDon(), L&, C&
   Set RDon = [D11:O17]
   TDon = RDon.Value
   For L = 1 To UBound(TDon, 1): For C = 1 To UBound(TDon, 2)
      If VarType(TDon(L, C)) <> vbDouble Then TDon(L, C) = Empty
      Next C, L
   RDon.Value = TDon
   End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @LEWISBEGIN :), @Dranreb ;),
Bienvenue sur XLD 🙂

Une autre macro à associer à votre bouton:
VB:
Sub SupprConstNonNum()
   On Error Resume Next
   Range("D11:O17").SpecialCells(2, 22).ClearContents
End Sub

ou bien si on ne connait pas à l'avance le nombre de lignes et de colonnes mais si la structure des en-têtes est toujours la même et si la zone concernée débute toujours en D11:
VB:
Sub SupprConstNonNum()
Dim a&, b&
   a = Cells(Rows.Count, "a").End(xlUp).Row: b = Cells(10, Columns.Count).End(xlToLeft).Column
   On Error Resume Next
   Range(Range("d11"), Cells(a, b)).SpecialCells(2, 22).ClearContents
End Sub

En exemple un fichier avec la 2ème macro et aussi une formule matricielle en E3 qui doit donner le bon résultat même en présence de valeurs non numériques.
 

Pièces jointes

  • LEWISBEGIN- EXEMPLE POUR MACROS EXCEL- v1.xlsm
    23.2 KB · Affichages: 6
Dernière édition:

LEWISBEGIN

XLDnaute Nouveau
Bonsoir @LEWISBEGIN :), @Dranreb ;),
Bienvenue sur XLD 🙂

Une autre macro à associer à votre bouton:
VB:
Sub SupprConstNonNum()
   On Error Resume Next
   Range("D11:O17").SpecialCells(2, 22).ClearContents
End Sub

ou bien si on ne connait pas à l'avance le nombre de lignes et de colonnes mais si la structure des en-têtes est toujours la même et si la zone concernée débute toujours en D11:
VB:
Sub SupprConstNonNum()
Dim a&, b&
   a = Cells(Rows.Count, "a").End(xlUp).Row: b = Cells(10, Columns.Count).End(xlToLeft).Column
   On Error Resume Next
   Range(Range("d11"), Cells(a, b)).SpecialCells(2, 22).ClearContents
End Sub

En exemple un fichier avec la 2ème macro et aussi une formule matricielle en E3 qui doit donner le bon résultat même en présence de valeurs non numériques.
Merci beaucoup pour ta réponse rapide ! Ça fonctionne super bien dans le fichier exemple!

J'avais oublié de mentionner que je recherchais quelque chose de dynamique et qu'on ne connait pas le nombre de ligne d'avance. Mais la zone concernée sera toujours au même endroit comme dans ton 2e code.

J'ai importé le code dans mon "vrai" fichier et j'ai modifié la zone pour "P6" par exemple, mais ça ne supprime pas les valeurs non numérique. J'ai le même nombre de colonne à partir de la zone, soit 12. Voici ce que ça donne en pièce jointe. Je ne comprend pas pourquoi ça ne fonctionne pas.. J'ai supprimé les données sensibles à l'entreprise. Merci encore de votre aide.
 

Pièces jointes

  • LEWISBEGIN- EXEMPLE POUR MACROS EXCEL- v2.xlsm
    21.6 KB · Affichages: 6

LEWISBEGIN

XLDnaute Nouveau
Bonsoir @LEWISBEGIN :),

Dans votre nouveau classeur, les en-têtes des mois sont en ligne 5 et pas en ligne 10. Il faut remplacer l'instruction
VB:
b = Cells(10, Columns.Count).End(xlToLeft).Column
par
VB:
b = Cells(5, Columns.Count).End(xlToLeft).Column
C'est super ! Ça trop l'air facile pour vous :) Pour mon info, la fonction SpecialCells(2,22) c'est quoi la valeur de c'est chiffre?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Pour mon info, la fonction SpecialCells(2,22) c'est quoi la valeur de c'est chiffre?
Bonjour :),

Le premier paramètre correspond au type de cellule recherchée :
xlCellTypeAllFormatConditions-4172Cellules de n'importe quel format.
xlCellTypeAllValidation-4174Cellules présentant des critères de validation.
xlCellTypeBlanks4Cellules vides.
xlCellTypeComments-4144Cellules contenant des commentaires.
xlCellTypeConstants2Cellules contenant des constantes.
xlCellTypeFormulas-4123Cellules contenant des formules.
xlCellTypeLastCell11Dernière cellule dans la plage utilisée.
xlCellTypeSameFormatConditions-4173Cellules de même format.
xlCellTypeSameValidation-4175Cellules présentant les mêmes critères de validation.
xlCellTypeVisible12Toutes les cellules visibles.
2 correspond aux cellules contenant une constante


Le deuxième paramètre correspond au type de la valeur de la cellule :
xlErrors16Cellules contenant des erreurs.
xlLogical4Cellules contenant des valeurs logiques.
xlNumbers1Cellules contenant des valeurs numériques.
xlTextValues2Cellules contenant du texte.
22 corespond à la somme 2+4+16.
22 correspond donc aux cellules contenant soit du texte, soit une valeur logique ou bien les cellules contenant une erreur (on exclut donc les cellules contenant une valeur numérique puisqu'on ne veut pas les effacer).
 

LEWISBEGIN

XLDnaute Nouveau
Bonjour :),

Le premier paramètre correspond au type de cellule recherchée :
xlCellTypeAllFormatConditions-4172Cellules de n'importe quel format.
xlCellTypeAllValidation-4174Cellules présentant des critères de validation.
xlCellTypeBlanks4Cellules vides.
xlCellTypeComments-4144Cellules contenant des commentaires.
xlCellTypeConstants2Cellules contenant des constantes.
xlCellTypeFormulas-4123Cellules contenant des formules.
xlCellTypeLastCell11Dernière cellule dans la plage utilisée.
xlCellTypeSameFormatConditions-4173Cellules de même format.
xlCellTypeSameValidation-4175Cellules présentant les mêmes critères de validation.
xlCellTypeVisible12Toutes les cellules visibles.
2 correspond aux cellules contenant une constante


Le deuxième paramètre correspond au type de la valeur de la cellule :
xlErrors16Cellules contenant des erreurs.
xlLogical4Cellules contenant des valeurs logiques.
xlNumbers1Cellules contenant des valeurs numériques.
xlTextValues2Cellules contenant du texte.
22 corespond à la somme 2+4+16.
22 correspond donc aux cellules contenant soit du texte, soit une valeur logique ou bien les cellules contenant une erreur (on exclut donc les cellules contenant une valeur numérique puisqu'on ne veut pas les effacer).
Super c'est très clair ! Merci encore de votre aide c'est vraiment apprécié! Passez une bonne journée !
 

Discussions similaires

Statistiques des forums

Discussions
313 312
Messages
2 097 040
Membres
106 816
dernier inscrit
Garry972