Tester si des formules existent dans 2 colonnes

Résolu/Fermé
vieuxray - 10 sept. 2018 à 18:13
 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
A voir également:

7 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
10 sept. 2018 à 18:47
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
1
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
0
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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
10 sept. 2018 à 23:08
par macro, remplacer la ligne for each par:
For Each cellule In maFeuille.[E3:F37]
0
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
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
0
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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
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
0
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
0