Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 code vba qui renvoie la formule avec @ dedans

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous,
Je vous souhaite une belle journée

J'ai un souci de code que je ne parviens pas à résoudre,
voici mon code :
VB:
Sub Mise_à_jour()
'ATTENTION Formule : si RdV déjà   : RdV Fait Facturé

    [o2] = "=COUNTIF(R[3]C:R[9996]C,""><"")"
    [M4] = "=IF(SUM(--(ISNUMBER(SEARCH(RC[-11],Facture!R2C[-8]:R30C[-8]))))>=1,RC[-11],"""")"
  
    'ME RENVOIE EN M4 : =SI(SOMME(--(ESTNUM(CHERCHE(B4;@Facture!E$2:E$30))))>=1;B4;"")
  
    [M4].Copy
    [m5:m13].Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
  
    [J4] = "=IF(RC[3]<>"""",""RdV Fait Facturé"",""RdV Fait"")"
    [J4].Copy
    [J5:J13].Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("J4:J13").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
  
    Columns("m:q").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("A1").Select
End Sub
Le code " [M4] = "=IF(SUM(--(ISNUMBER(SEARCH(RC[-11],Facture!R2C[-8]:R30C[-8]))))>=1,RC[-11],"""")""
Me renvoie dans la cellule "M4" la formule avec @ et je ne parviens pas à m'en débarrasser.

Auriez-vous la solution ?
Je joins le fichier test et je continue à chercher.
Un grand merci à toutes et à tous,
lionel
 

Pièces jointes

  • recherche ds chaine.xlsm
    33.1 KB · Affichages: 8
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour le fil
Pour supprimer les Copy Lol!
J'utilise "AutoFill"
VB:
Sub Mise_à_jour()
'ATTENTION Formule : si RdV déjà   : RdV Fait Facturé
DerLgn = Cells(Rows.Count, 1).End(xlUp).Row
    [o2].Formula = "=COUNTIF(R[4]C:R[9996]C,""><"")"

    [M4].FormulaArray = "=IF(SUM(--(ISNUMBER(SEARCH(RC[-11],Facture!R2C[-8]:R30C[-8]))))>=1,RC[-11],""-"")"
       Range("M4").AutoFill Range("M4:M" & DerLgn)
    [J4].Formula = "=IF(RC[3]<>""-"",""RdV Fait Facturé"",""RdV Fait"")"
       Range("J4").AutoFill Range("J4:J" & DerLgn), xlFillValues

    With Range("J4:J" & DerLgn)
        .Value = .Value
    End With
  Range(Cells(2, 13), Cells(DerLgn, 15)).ClearContents
    Range("A1").Select
End Sub
Bonne journée
Jean marie
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Jean marie, le fil,

.Value = .Value ??? pas compris Lol

l'instruction .Value = .Value est une façon de faire un copier/coller valeurs à partir des formules qui sont dans les cellules concernées. moi non plus, je ne connaissais pas, au début, et ça m'avait surpris vu qu'en apparence, cette instruction ne fait rien ! (car elle semble ne rien faire d'autre qu'affecter à une valeur la même valeur !)

soan
 

soan

XLDnaute Barbatruc
Inactif
@Jean marie

moi je connaissais (.Value = .Value) Lol

ah, ok ! (mes infos là-dessus ont quand même été utiles à d'autres lecteurs ! )



mais pas compris #48

@ChTi160 : n'est-ce pas ce que je proposais dans le post #24 (.Value = .Value)

dans le code VBA du post #24 de Hasco, les deux With
contiennent .Value = .Value juste avant le End With :​

VB:
    With Range("M4:M13")
        .FormulaR1C1 = "=IF(ISNUMBER(MATCH(""*"" &RC[-11] &""*"",Facture!R2C5:R10C5,0)),RC[-11],"""")"
        .Value = .Value
    End With
    With Range("J4:J13")
        .FormulaR1C1 = "=IF(RC[3]<>"""",""RdV Fait Facturé"",""RdV Fait"")"
        .Value = .Value
    End With

soan
 

ChTi160

XLDnaute Barbatruc
Re
je m'amuse et je cherche et je cherche Lol
J'ai fait ceux ci :
VB:
Sub Mise_à_jour()
Dim DerLgn As Integer
DerLgn = Cells(Rows.Count, 1).End(xlUp).Row
    With Range("j4:j" & DerLgn)
       .FormulaR1C1 = "=IF(ISNUMBER(MATCH(""*"" & RC2 & ""*"",Facture!R2C5:R10C5,0)),""RdV Fait Facturé"",""RdV Fait"")"
       .Value = .Value
    End With
    Range("A1").Select
End Sub
je pensais pouvoir utiliser un "Evaluate" de la Fonction pour éviter de devoir effacer les Formules Mais je n'y arrive pas !
genre :
Code:
.Value = Evaluate("IF(ISNUMBER(MATCH(""*"" & B4 & ""*"",Facture!E2:E10,0)),""RdV Fait Facturé"",""RdV Fait"")")
Bonne fin de Journée
Jean marie
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
Avec ça ca marche mais je ne sais pas comment rendre la Plage dynamique !

VB:
 With Range("j4:j" & DerLgn)
      .Value = Evaluate("IF(ISNUMBER(MATCH(""*"" & B4:B13 &""*"",'Facture'!E2:E10,0)),""RdV Fait Facturé"",""RdV Fait"")")
 End With    
     'Un truc du genre "B4:B" & DerLgn
     'j'ai essayé P =Range("B4:B" & DerLgn).address
     'mais ca fonctionne pas ,doit y avoir moyen de faire Lol

En attendant j'ai mis :

Code:
Sub Mise_à_jour9()
Dim DerLgn As Integer
DerLgn = Cells(Rows.Count, 1).End(xlUp).Row
    With Range("j4:j" & DerLgn)
      .Value = Evaluate("IF(ISNUMBER(MATCH(""*"" & B4:B10000 & ""*"",Facture!E2:E10000,0)),""RdV Fait Facturé"",""RdV Fait"")")
    End With
    Range("A1").Select
End Sub
Jean marie
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Bonjour le fil,
Merci à tous pour vos efforts
@jean-marie : lol, je ne saurai te dire
lionel,
 

soan

XLDnaute Barbatruc
Inactif
@Jean marie, Lionel, le fil,

réponse par rapport à ton post #55

j'aime bien ton code VBA de ce post ! c'est plutôt original, ta sub Mise_à_jour() qui se termine par deux End Sub ! et avec ça, t'aurais pas obtenu une légère petite erreur de compilation, par hasard ? nan allez, je blague ! car j'suppose que t'as essayé, que ça a marché, et qu'en fait le 2ème End Sub est uniquement dans ton post #55, pas dans ton vrai code VBA du fichier Excel ! n'est-ce pas, hein ? ... oui, on va dire que oui !

je te propose ce code VBA (non testé, à essayer avec prudence sur une copie de ton vrai fichier) :​

VB:
Option Explicit

Sub Mise_à_jour()
  Dim dlg&: Application.ScreenUpdating = 0
  dlg = Cells(Rows.Count, 1).End(3).Row: If dlg < 4 Then Exit Sub
  With Range("J4:J" & dlg): .Value = .Value: End With
  [A1].Select
End Sub

normalement, les formules des cellules de la plage "J4:J" & dlg devraient être remplacées par leurs valeurs ; mais ceci est sans tenir compte de ce que tu as essayé de faire avec cette ligne de code :​

.FormulaR1C1 = "=IF(ISNUMBER(MATCH(""*"" & RC2 & ""*"",Facture!R2C5:R10C5,0)),""RdV Fait Facturé"",""RdV Fait"")"



remarque : il est possible que mon Application.ScreenUpdating = 0 soit inutile vu que la sub fait juste un remplacement de formules par leurs valeurs ; je veux dire : ce remplacement est peut-être tellement rapide que même sans gel de la mise à jour écran, il n'y a aucun "scintillement" à l'écran lors de l'exécution de la sub ! (bien sûr, ça dépend aussi de la rapidité du processeur de ton PC, et si tu as une carte graphique performante ; y'a que toi qui peut juger, devant l'écran de ton PC)

soan
 

ChTi160

XLDnaute Barbatruc
Bonsoir soan
Effectivement une erreur de Copie Lol
Pour ce qui est du post #55
il n'y a plus besoin du :
VB:
With Range("J4:J" & dlg): .Value = .Value: End With
car je passe par un Evaluate (Plus de formule à effacer Lol ) !
Bonne Nuit
Jean marie
 

Discussions similaires

Réponses
3
Affichages
827
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…