Menu

Tester si des formules existent dans 2 colonnes [Résolu]

vieuxray - 10 sept. 2018 à 18:13 - Dernière réponse :  vieuxray
- 13 sept. 2018 à 10:54
Bonjour a tous, Forum bonjour,
je suis sous Windows 10 et excel 2007

Je souhaiterai effectuer un test sur deux colonnes, je m'explique :

J'ai une colonne (E) et une colonne (F) ou il y a des formules a partir de E3 et F3 sur 200 lignes. Je souhaiterai svp tester si la colonne (E) contient bien des formules dans les cellules de la colonne (E) a partir de (E3)

tester également si la colonne (F) contient bien des formules dans les cellules de la colonne (F) a partir de (F3)

Donc le test serai d’après moi Exemple :

--- Si (E3) contient une formule alors afficher dans la colonne (I3) en vert ‘’Oui’’ sinon ‘’Non’’ en rouge
--- Si (E4) contient une formule alors afficher dans la colonne (I4) en vert ‘’Oui’’ sinon ‘’Non’’ en rouge

--- Etc Etc
Idem pour la colonne (F)

--- Si (F3) contient une formule alors afficher dans la colonne (J3) en vert ‘’Oui’’ sinon ‘’Non’’ en rouge
--- Si (F4) contient une formule alors afficher dans la colonne (J4) en vert ‘’Oui’’ sinon ‘’Non’’ en rouge

--- Etc Etc
Effectuer le test sur 200 lignes, je verrai plus tard pour prolonger.
J'ai essayer avec divers codes mais pas réussi a le faire.
Je vous remercie pour votre aide et vous souhaite une bonne fin d’après midi.
Cdlt Ray
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
yg_be 6477 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 10 sept. 2018 à 18:47
1
Merci
bonjour, pourquoi ne pas partager le code que tu as essayé de réaliser?
suggestion:
Public Sub Formule_Existe()
Dim maFeuille As Worksheet
Dim cellule As Range

Set maFeuille = ActiveSheet
For Each cellule In Intersect(maFeuille.UsedRange, Union(maFeuille.Columns("E"), maFeuille.Columns("F")))
If Not cellule.HasFormula Then
    cellule.Offset(0, 4) = "Non"
    cellule.Offset(0, 4).Font.ColorIndex = 4
Else
    cellule.Offset(0, 4) = "Oui"
    cellule.Offset(0, 4).Font.ColorIndex = 3
End If
Next
End Sub

Merci yg_be 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 26676 internautes ce mois-ci

Commenter la réponse de yg_be
0
Merci
Salut yg_be,

Merci pour le code mais ça m'affiche sur les deux colonnes I et J des "Oui" où des "Non" loin vers le bas
donc pas utile de cette façon.


--- Si (E3) contient une formule alors afficher dans la colonne (I3) en vert ‘’Oui’’ sinon ‘’Non’’ en rouge
--- Si (E4) contient une formule alors afficher dans la colonne (I4) en vert ‘’Oui’’ sinon ‘’Non’’ en rouge

--- Si (E16) contient une formule alors afficher dans la colonne (I16) en vert ‘’Oui’’ sinon ‘’Non’’ en rouge uniquement les lignes concernés par un effacement de formule.

--- Etc Etc
Idem pour la colonne (F)

--- Si (F3) contient une formule alors afficher dans la colonne (J3) en vert ‘’Oui’’ sinon ‘’Non’’ en rouge
--- Si (F4) contient une formule alors afficher dans la colonne (J4) en vert ‘’Oui’’ sinon ‘’Non’’ en rouge
--- Si (F22) contient une formule alors afficher dans la colonne (I22) en vert ‘’Oui’’ sinon ‘’Non’’ en rouge uniquement les lignes concernés par un effacement de formule

merci pour ton aide, bonne soirée a toi.
Cdlt Ray



Si si pas de soucis pour partager mais les CODES et MACROS que j'ai essayer ne marche pas bien.

Private Sub Worksheet_Change(ByVal target As Range)

Dim dlig&, lig&

dlig = Cells(Rows.Count, 5).End(xlUp).Row: Application.ScreenUpdating = 0

If Intersect(target, Range("E3:F" & dlig)) Is Nothing Then Exit Sub

For lig = 3 To dlig

With Cells(lig, 5)

.Offset(, 4) = IIf(.HasFormula, "O", "N")

.Offset(, 5) = IIf(.Offset(, 1).HasFormula, "O", "N")

End With

Next lig



'Essai formule en réel

Dim dlig&: Application.ScreenUpdating = 0

dlig = Cells(Rows.Count, 5).End(xlUp).Row

With Target

If .CountLarge > 1 Then Exit Sub

If Not Intersect(Target, Range("E3:F" & dlig)) Is Nothing _

Then .Offset(, 4) = IIf(.HasFormula, "O", "N")

End With



'Essai sous forme de macro

Public Sub Formule_Existe()

Dim Feuil1 As Worksheet: Dim cellule As Range

Set Feuil1 = ActiveSheet

For Each cellule In Intersect(Feuil1.UsedRange, Union(Feuil1.Columns("E"), Feuil1.Columns("F")))

If Not cellule.HasFormula Then

cellule.Offset(0, 4).Font.ColorIndex = 4

Else

cellule.Offset(0, 4).Font.ColorIndex = 3

End If

Next

End Sub
Commenter la réponse de vieuxray
0
Merci
Re salut ye_be

bon je le tient presque LOL

juste modifier svp

1) il faudrait que l'affichage des colonnes (I et J) démarre en (I3 et J3) car les lignes 1 et 2 prise pour entètes

2) faire le test sur 35 lignes sinon ca descends jusqu'à perpète

merci bien bonne soirée

Cdlt Ray
yg_be 6477 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 10 sept. 2018 à 23:08
par macro, remplacer la ligne for each par:
For Each cellule In maFeuille.[E3:F37]
Commenter la réponse de vieuxray
0
Merci
Salut yg_be

Merci pour la modification du code tout fonctionne très bien selon mon besoin.

Je te souhaite la bonne soirée et encore merci a toi.

Bien cordialement Raymond
Commenter la réponse de vieuxray
0
Merci
re salut yg_be,

Serait t'il possible svp de rajouter le N° de la cellule correspondante a la formule qui a été effacer par erreur, écrire en colonne (I ou J).

A coté Exemple pour la colonne (E)

"Non E15 HS"

Puis quand l'erreur est corrigé

"Oui E15 OK"

--------- ou pour la colonne (F)

"Non F23 HS"

Puis quand l'erreur est corrigé

"Oui F23 OK"


un petit plus au programme et puis voir aussi comment faire ça.

Bonne soirée a toi et grand merci.

Cdlt ray
yg_be 6477 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 11 sept. 2018 à 20:50
exemple, à toi d'adapter:
    If Not cellule.HasFormula Then
        cellule.Offset(0, 4) = "Non " & Replace(cellule.Address, "$", "") & " pas bien"
        cellule.Offset(0, 4).Font.ColorIndex = 3
    Else
        cellule.Offset(0, 4) = "Oui " & Replace(cellule.Address, "$", "") & " super"
        cellule.Offset(0, 4).Font.ColorIndex = 4
    End If
Commenter la réponse de vieuxray
0
Merci
Hello yg_be,

Merci pour ta réponse et le code, c'est sympa a toi.

ça fonctionne bien MAIS tout se déroule et remplisse les deux colonnes (I et J) comme le montre la photo.

Serait t'il possible svp de traiter ligne par ligne seulement car je n'ai pas besoin de remplir les deux colonnes a chaque fois.

Voir svp le lien ci dessous.

https://www.cjoint.com/c/HImhDF2kKvz

Merci et passe une bonne journée.
Cdlt Raymond

   
Dim Feuil1 As Worksheet: Dim cellule As Range
Application.ScreenUpdating = 0
Set Feuil1 = ActiveSheet
For Each cellule In Feuil1.[E3:F34]

If Not cellule.HasFormula Then
cellule.Offset(0, 4) = Replace(cellule.Address, "$", "") & " HS"
cellule.Offset(0, 4).Font.ColorIndex = 3
Else
cellule.Offset(0, 4) = Replace(cellule.Address, "$", "") & " Ok"
cellule.Offset(0, 4).Font.ColorIndex = 4
End If
Next
yg_be 6477 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 12 sept. 2018 à 19:47
peut-être ainsi?
Private Sub Worksheet_Change(ByVal target As Range)
Dim cellule As Range
Dim rg As Range
Set rg = Intersect(target, target.Parent.[E3:F34])
If Not (rg Is Nothing) Then
    For Each cellule In rg
        If Not cellule.HasFormula Then
        cellule.Offset(0, 4) = Replace(cellule.Address, "$", "") & " HS"
        cellule.Offset(0, 4).Font.ColorIndex = 3
        Else
        cellule.Offset(0, 4) = Replace(cellule.Address, "$", "") & " Ok"
        cellule.Offset(0, 4).Font.ColorIndex = 4
        End If
    Next cellule
End If
End Sub
Commenter la réponse de vieuxray
0
Merci
Salut yg_be,

Merci pour ta réponse et le code.

ça convient très bien a mon besoin et fonctionne parfaitement comme souhaiter.

Je te remercie pour l'aide apporter ainsi que ton savoir partager.

A une prochaine fois, passe une bonne journée et encore merci a toi.

Bien cordialement Raymond
Commenter la réponse de vieuxray