FormulaR1C1 ? question Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
J
Jamais203
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 13 septembre 2019
Version d'Excel : 2010

Message par Jamais203 » 18 septembre 2019, 18:35

Bonjour
Petite question sur les Formula dans les macros


If Range("A2") = "ok" then
[D2].FormulaR1C1 = "=IF(Brasseur!R[8]C[69]="","",R[0]C[-2])"



si je traduis cette macro ( je sais pas si elle est correcte )

Si dans la case A2 il est marqué "ok"
alors dans la case D2 il lance la formule Si(Brasseur!R35=" "; " ", A2) ? en fait la condition c'est que si cette cellule R35 est vide rien ne s'affiche sinon il affiche le resultat de A2 ( qui donnera d'autre valeur que "ok" par la suite )

j'aimerai recuperer la valeur "ok" dans la cellule D2 sans passer par =SI(...) pour eviter de supprimer la formule quand D2 prend la valeur "ok"

je passe par la case D2 pour utiliser un compteur en fait qui incremente de 1 la case D14 des que "ok" apparait en D2
le soucis étant que il ne prend pas en compte la valeur de la cellule


avec:



If Not Application.Intersect(Target, Range("D2")) Is Nothing Then
If Range("D2") Like "ok" Then Cells(14, 4) = Cells(14, 4) + 1

--------------------------------------------------------------------------------
private sub ()


If Range("A2") = "ok" then

If Not Application.Intersect(Target, Range("D2")) Is Nothing Then (Init du compteur)

[D2].FormulaR1C1 = "=IF(Brasseur!R[8]C[69]="","",R[0]C[-2])" ( La formule =Si(Brasseur!R35=" "; " ", A2) )
if Range("D2") Like "ok" Then Cells(14, 4) = Cells(14, 4) + 1 ( Compteur +1 en D14 quand D2 affiche "ok")


end if
end if


ca doit etre completement faux mais je cherche :)
pouvez-vous m'aider?
Si c'est juste un range("D2").value like "ok" je crains

end sub
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'008
Appréciations reçues : 337
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 18 septembre 2019, 19:51

Bonjour,

pas tout compris à tes explications et pas eu le courage de lire jusqu'au bout.
Apprend à être concis pour un pb qui à la base semble simple ;-)
Si(Brasseur!R35=" "; " ", A2)
Pour tester si une cellule est vide c'est = ""
Avec = " " tu testes si elle a un espace.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
J
Jamais203
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 13 septembre 2019
Version d'Excel : 2010

Message par Jamais203 » 19 septembre 2019, 14:44

Oui c'etait pour être plus visible.
par contre mon compteur ne fonctionne pas, il semble que le code est correct.

----------------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)


If Not Application.Intersect(Target, Range("E2")) Is Nothing Then


If Range("E2") Like "*IWL250*" Then Cells(14, 4) = Cells(14, 4) + 1


End If


End Sub

-----------------------------------------------------------------------------------
Merci
Sachant qu'en E2 il y a une formule =Si()) qui donne le resultat IW250 je pense que c'est cette formule qui bloque le compteur
sur une autre cellule vide cela fonctionne. en A1 je met IWL250 ca incremente. mais dès qu'une formule est dans la cellule plus de compteur.
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'008
Appréciations reçues : 337
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 19 septembre 2019, 16:13

Bonjour,

ne laisse (presque) jamais vba choisir la propriété, désigne-là explicitement :
Range("E2").Value
Comme avec certains formats le contenu est différents de l'affichage .Text ou .Value2 peuvent servir.
Si ce n'est pas ça il faudra déposer un fichier en situation qu'on voit les détails.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
J
Jamais203
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 13 septembre 2019
Version d'Excel : 2010

Message par Jamais203 » 19 septembre 2019, 16:42

re,
ci-joint le fichier avec quelques commentaires.
Merci

Le compteur bloque quand un =Si(.. ) est dans la case pour lancer le compteur il faut cliquer sur la cellule et faire entrer pour incrementer ce compteur
il ne prend pas la " valeur même " de la cellule mais la formule en fait j'ai l'impression
compteur_test.xlsm
(17.95 Kio) Téléchargé 3 fois
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'008
Appréciations reçues : 337
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 19 septembre 2019, 17:36

Un événement Change ne se déclenche que sur une saisie, pas sur un calcul.
Il faut donc surveiller les antécédents de C1 qui sont saisis, soit : A1.
Ta formule en C1 peut s'écrire plus simplement :
=SI(OU(A1="ok";A1="toi");A1;"")
La macro :
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
        If Range("C1").Value Like "*ok*" Then
            Application.EnableEvents = False
            Cells(11, 3) = Cells(11, 3) + 1
            Application.EnableEvents = True
        End If
    End If
End Sub
pourquoi Like "*ok*" ? Mettre Like "ok", voir même ="ok" puisque c'est uniquement ça qui t'intéresse.
Par contre si qq'un saisi OK ou Ok ça ne passera plus. Pour s'en affranchir :
If LCase(Range("C1")).Value = "ok" Then
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
J
Jamais203
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 13 septembre 2019
Version d'Excel : 2010

Message par Jamais203 » 19 septembre 2019, 18:19

Ah Merci c'est exactement ca :)
c'est cette ligne : Application.EnableEvents = False
j'avais pas mis le "false" mais le "true" seulement
par contre je peux compiler avec d'autre case?



Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A2")) Is Nothing Then

If Range("E2").Value Like "IWL250" Then
Application.EnableEvents = False
Cells(14, 4) = Cells(14, 4) + 1
Application.EnableEvents = True

If Range("F2").Value Like "IWL250" Then
Application.EnableEvents = False
Cells(15, 6) = Cells(15, 6) + 1
Application.EnableEvents = True
End If
End If
End If
End Sub



ou je dois faire un sub pour chaque case?
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'008
Appréciations reçues : 337
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 19 septembre 2019, 19:53

Excel n'a pas de cases mais des cellules. Au début je me demandais si tu parlais du LCase, ou bien de la structure Select Case...
Ben ils sortent d'où ces E2 et F2 ?
Et qu'y-a-t'il dedans ?

Si tu veux une réponse adaptée, fourni un fichier en situation avec les explications précises et détaillées du besoin plutôt qu'un code dont tu n'es pas sûr.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
J
Jamais203
Jeune membre
Jeune membre
Messages : 41
Inscrit le : 13 septembre 2019
Version d'Excel : 2010

Message par Jamais203 » 20 septembre 2019, 10:46

Bonjour,
ci-joint
Le compteur s'incremente de la même manière mais aussi avec une autre cellule
compteur_test.xlsm
(18.11 Kio) Téléchargé 1 fois
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'008
Appréciations reçues : 337
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 20 septembre 2019, 12:09

Bonjour,

non mais tu n'as pas compris qu'avec un exemple qui n'a rien à voir avec la réalité tu ne pourras avoir qu'une réponse qui ne correspond pas à ton besoin ???

Tu parles de E2, F2 avec qq chose comme Like "IWL250",
tu passes un fichier avec C1 et D1 qui en plus contiennent la même formule (dont tu n'as même pas fait l'effort de simplifier comme je te l'avais indiqué) qui ne retourne que "ok, "toi" ou "" !!!
N'importe quoi. Si elles ont la même formule (qui en plus n'a pas l'air de correspondre pas à la réalité), nul besoin de contrôler l'autre cellule puisqu'elle aura le même résultat.

Donc dans ton dernier fichier le compteur s'incrémente correctement, aucun soucis.
Tu peux mettre en résolu, moi j'ai fini.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message
  • FormulaR1C1
    par TeamG1 » 3 janvier 2017, 15:36 » dans Excel - VBA
    3 Réponses
    154 Vues
    Dernier message par AMIR
    3 janvier 2017, 19:41
  • FormulaR1C1
    par JeCPas » 11 juillet 2016, 10:52 » dans Excel - VBA
    21 Réponses
    494 Vues
    Dernier message par JeCPas
    12 juillet 2016, 09:53
  • Modifier FormulaR1C1
    par jpmalb » 7 décembre 2018, 20:57 » dans Excel - VBA
    3 Réponses
    100 Vues
    Dernier message par LouReeD
    7 décembre 2018, 23:03
  • VBA, FormulaR1C1
    par Johanes » 28 mars 2017, 20:29 » dans Excel - VBA
    3 Réponses
    182 Vues
    Dernier message par MFerrand
    29 mars 2017, 19:09
  • FORMULAR1C1 avec Variables
    par Kokko » 11 septembre 2017, 11:29 » dans Excel - VBA
    3 Réponses
    270 Vues
    Dernier message par Kokko
    11 septembre 2017, 13:16
  • FormulaR1C1 avec variable
    par ThauThème » 13 août 2019, 20:04 » dans Excel - VBA
    10 Réponses
    108 Vues
    Dernier message par ThauThème
    14 août 2019, 13:37