Macro qui détecte et prend en compte les formules

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

  • Aide excel.xls
    118 KB · Affichages: 69
  • Aide excel.xls
    118 KB · Affichages: 63
  • Aide excel.xls
    118 KB · Affichages: 69

YANN-56

XLDnaute Barbatruc
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

  • OU_FORMULES.xls
    21.5 KB · Affichages: 56
Dernière édition:

Si...

XLDnaute Barbatruc
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 ?
 

Papou-net

XLDnaute Barbatruc
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

  • Exemple Mokia.xls
    35.5 KB · Affichages: 40

Pierrot93

XLDnaute Barbatruc
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:

Papou-net

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

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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

  • Aide excel(1).xls
    121 KB · Affichages: 48
  • Aide excel(1).xls
    121 KB · Affichages: 50
  • Aide excel(1).xls
    121 KB · Affichages: 47

job75

XLDnaute Barbatruc
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

  • Aide excel(2).xls
    121 KB · Affichages: 44

Papou-net

XLDnaute Barbatruc
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 :confused:( 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.
 

job75

XLDnaute Barbatruc
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:

YANN-56

XLDnaute Barbatruc
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:

Discussions similaires

Statistiques des forums

Discussions
314 450
Messages
2 109 724
Membres
110 552
dernier inscrit
jasson