Tester si des formules existent dans 2 colonnes

Résolu
vieuxray -  
 vieuxray -
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

7 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
  2. vieuxray
     
    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
  3. vieuxray
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      par macro, remplacer la ligne for each par:
      For Each cellule In maFeuille.[E3:F37]
      0
  4. vieuxray
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. vieuxray
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
  7. vieuxray
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
  8. vieuxray
     
    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