Macro qui détecte et prend en compte les formules

  • Initiateur de la discussion Initiateur de la discussion Mokia
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Mokia

XLDnaute Nouveau
Bonjour,

Jai besoin de votre aide !

Le classeur récapitule les absents par équipe.
La macro permet de n'accepter par bloc qu'une absence. Le problème est que jai parfois les memes personnes dans différentes équipes.
Par exemple prenons le bloc 3 ligne 27 et ligne 28.
La pers2 est présente dans l'équipe 1 donc jai mis en place des formules : =SI(C9<>"";C9;""). Du coup la macro prend en compte la formule et considère que la cellule avec la formule est non vide...

Comment faire pour que la macro ne détecte plus les formules dans les cellules grises ?
 

Pièces jointes

Re : Macro qui détecte et prend en compte les formules

Bonsoir, ou Bonjour suivant l'heure,

Modeste GD a bien raison de te proposer ".HasFormula"

Au cas où tu ressentes une froideur comme dans un labo de plats surgelés,

Code:
Private Sub CommandButton1_Click()
'Je vérifie s'il y a une formule dans la colonne E (5)
With ActiveSheet
For i = 1 To .Cells(65536, 5).End(xlUp).Row
    If .Cells(i, 5).HasFormula Then
     .Cells(i, 1).Value = "Il y a une formule dans cette ligne"
    End If
Next i
End With
End Sub


je joins un humble exemple en complément.

Amicalement, en espérant n'avoir pas trop été laconique,

Yves
 

Pièces jointes

Dernière édition:
Re : Macro qui détecte et prend en compte les formules

salut

Comment faire pour que la macro ne détecte plus les formules dans les cellules grises ?

Si... j'ai compris ta demande , adapte ces quelques lignes
Code:
Sub Test()
  Dim C As Range
  For Each C In 'plage à définir
    If Not C.HasFormula Then
      'action à suivre
    End If
  Next
End Sub

@ Yann-56 : les commentaires, c'est pour aider ?
 
Re : Macro qui détecte et prend en compte les formules

Bonjour Mokia, Modeste, Yves, Si...

Si... je puis me permettre d'apporter une solution très simple : pourquoi ne pas utiliser la fonction SpecialCells qui limite automatiquement la boucle à un type de contenu précis ?

Ex :

Code:
Private Sub CommandButton1_Click()
For Each cel In Range("A:C").SpecialCells(xlCellTypeConstants)
  cel.Interior.ColorIndex = 4
Next
End Sub
Ce code colorie en vert les cellules qui contiennent des données mais pas celles qui comportent des formules (Cf fichier ci-joint).

Pour obtenir de l'aide sur les différents types de cellules concernées, sélectionner SpecialCells dans le code et appuyer sur F1.

Cette instruction est peu utilisée dans les fils de ce forum et pourtant elle rend de grands services et simplifie le code. Je ne m'en prive pas pour ma part.

Cordialement.
 

Pièces jointes

Re : Macro qui détecte et prend en compte les formules

Bonjour à tous,

Bonjour Mokia, Modeste, Yves, Si...

Si... je puis me permettre d'apporter une solution très simple : pourquoi ne pas utiliser la fonction SpecialCells qui limite automatiquement la boucle à un type de contenu précis ?

Ex :

Code:
Private Sub CommandButton1_Click()
For Each cel In Range("A:C").SpecialCells(xlCellTypeConstants)
  cel.Interior.ColorIndex = 4
Next
End Sub
Ce code colorie en vert les cellules qui contiennent des données mais pas celles qui comportent des formules (Cf fichier ci-joint).

Pour obtenir de l'aide sur les différents types de cellules concernées, sélectionner SpecialCells dans le code et appuyer sur F1.

Cette instruction est peu utilisée dans les fils de ce forum et pourtant elle rend de grands services et simplifie le code. Je ne m'en prive pas pour ma part.

Cordialement.

on devrait même pouvoir s'affranchir de la boucle....

Code:
On Error Resume Next
Range("A:C").SpecialCells(xlCellTypeConstants).Interior.ColorIndex = 4
On Error GoTo 0

le "on error..." au cas ou aucune cellule ne réponde au critère....

bonne journée
@+
 
Dernière édition:
Re : Macro qui détecte et prend en compte les formules

Re: Bonjour Pierrot,

C'est tout-à-fait exact, on peut se passer de la boucle. Et s'il y a plusieurs actions à effectuer sur la plage de cellules, un simple With...End With et la boucle est bouclée !

Bien vu également pour le On Error.

Ah, j'allais oublier : on peut même combiner avec le type de contenu de la cellule. En reprenant l'exemple précédent, on peut restreindre le champ aux cellules contenant des valeurs numériques, par exemple, en ajoutant le paramètre xlNumbers

Code:
Private Sub CommandButton1_Click()
Range("A:C").SpecialCells(xlCellTypeConstants, xlNumbers).Interior.ColorIndex = 4
End Sub
Bonne journée.

Cordialement.
 
Re : Macro qui détecte et prend en compte les formules

Bonjour le fil, le forum,

Il faudrait quand même regarder les macros existantes avant de faire des propositions, non ?

Dans ThisWorkbook la fonction Verif utilise cette instruction :

Code:
Nb(j) = Application.WorksheetFunction.CountA(Intersect(.Columns(Col), .Range("BLOC" & j)))
Pour ne pas comptabiliser les textes vides "" il suffit de la modifier ainsi :

Code:
Nb(j) = Application.CountIf(Intersect(.Columns(Col), .Range("BLOC" & j)), "><")
ou comme ceci :

Code:
Nb(j) = Application.CountIf(Intersect(.Columns(Col), .Range("BLOC" & j)), "?*")
A+
 
Re : Macro qui détecte et prend en compte les formules

Re,

NB.SI(xxx;"><") ou NB.SI(xxx;"?*") comptabilisent les textes mais pas les nombres.

Donc si en C9 on peut avoir aussi un nombre utiliser dans la fonction Verif :

Code:
With Intersect(.Columns(Col), .Range("BLOC" & j))
  Nb(j) = Application.CountIf(.Cells, "><") + Application.Count(.Cells)
End With
Fichier joint, entrer n'importe quoi en C28.

A+
 

Pièces jointes

Re : Macro qui détecte et prend en compte les formules

Re,

Noter que le comptage précédent ne comptabilise ni les valeurs logiques ni les valeurs d'erreur.

Si l'on veut vraiment entrer n'importe quoi dans les cellules, il faut une boucle :

Code:
For Each c In Intersect(.Columns(Col), .Range("BLOC" & j))
  Nb(j) = Nb(j) - (c.Text <> "")
Next
Verif = Nb(j)
Fichier (2).

A+
 

Pièces jointes

Re : Macro qui détecte et prend en compte les formules

Bonjour à tous,

Bonjour job75,

Il faudrait quand même regarder les macros existantes avant de faire des propositions, non ?
Tu as parfaitement raison mais, pour ma part, je me suis cantonné à proposer une solution qui évite à la boucle de balayer des cellules non concernées par la condition définie. Pierrot est venu bien à propos préciser qu'on pouvait supprimer cette boucle, d'où mon second message.

Il me semble donc qu'il est possible de s'affranchir de cette fonction personnelle.

Pour reprendre la proposition de Yves (mais ça peut également s'appliquer à celle de Si...), je réduirais le code à ceci :

Code:
Private Sub CommandButton1_Click()
Range("E:E").SpecialCells(xlCellTypeFormulas).Offset(0, -4) = "Il y a une formule dans cette ligne"
End Sub
Il me semble difficile de faire plus simple, n'est-il pas 😕( petit clin d'oeil à celui qui se reconnaîtra).

A moins que quelque chose ne m'échappe car j'avoue n'avoir toujours pas cerné le sens de la question initiale. Et je n'ai pas trouvé dans la feuille une seule formule faisant appel à cette fonction.

Bonne journée.

Cordialement.
 
Re : Macro qui détecte et prend en compte les formules

Bonjour Papou-net,

Il faut surtout avoir compris ce que Mokia cherche à faire, en C28 par exemple.

Il [Edit : elle] ne cherche pas à savoir s'il y a une formule en C27 mais s'il y a une donnée (différente de "" bien sûr).

S'il y a une donnée, il ne faut pas qu'on puisse mettre quelque chose en C28. Point barre.

Edit : ah oui merci Yann, Mokia est une dame, mille excuses, je corrige 🙂

A+
 
Dernière édition:
Re : Macro qui détecte et prend en compte les formules

Bonjour aux participants, et à ceux qui passeront par ici,

Ma signature en Bleu prend ici tout son sens!

Bravo pour ces explications très complètes et ces exemples.

Merci à vous. J'ai encore appris plein de trucs.

Je pense que Mokia sera ravie quand elle repassera par là.

Bonne journée,

Yves
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
534
Réponses
3
Affichages
916
Retour