XL 2013 macros avec condition

arrazki

XLDnaute Junior
Bonjour,

J'ai crée une macros avec une condition, mais elle ne veut pas fonctionner sur ma condition.
Si ma cellule AG contient une erreur #NA alors prendre la cellule AH.
Je comprend pas pourquoi la macros refuse de calculer ca.
Ci-joint mon fichier excel.
SVP aidez moi.


Sub formule3()

Nbrligne = Range("a1").CurrentRegion.Rows.Count ' nbr de ligne
formuleG = "=""FAE-11/2016""&J2" ' libellé fae

formuleag = "=vlookup(E:E, 'VR avec param'!C:H,6,""FAUX"")" 'recherchev1
Range("ag2").Formula = formuleag
Range("G2:G" & Nbrligne).FillDown
Range("ag2:ag" & Nbrligne).FillDown
Range("ag:ag").Copy
Range("ag:ag").PasteSpecial xlPasteValues

formuleah = "=vlookup(D:D, 'VR'!A:H,7,""FAUX"")" 'recherchev2
Range("ah2").Formula = formuleah
Range("G2:G" & Nbrligne).FillDown
Range("ah2:ah" & Nbrligne).FillDown
Range("ah:ah").Copy
Range("ah:ah").PasteSpecial xlPasteValues

If IsError = Range(ag2) Then
formuleh = Cells(1, 34)
End If

Range("h2:h" & Nbrligne).FillDown
Range("h:h").Copy
Range("h:h").PasteSpecial xlPasteValues

End Sub
 

Pièces jointes

  • PROV TEST22.xlsm
    493.4 KB · Affichages: 47

Dranreb

XLDnaute Barbatruc
Bonsoir.
Pourquoi ne faites vous pas tout simplement comme ça ? :
VB:
Sub formule3()
Dim Plg As Range
Set Plg = ActiveSheet.UsedRange
Set Plg = Plg.Rows(2).Resize(Plg.Rows.Count - 1)
With Plg.Columns("H")
   .FormulaR1C1 = "=IFERROR(VLOOKUP(RC5,'VR avec param'!C3:C8,6,FALSE),VLOOKUP(RC4,VR!C1:C8,7,FALSE))"
   .Value = .Value: End With
End Sub
 

arrazki

XLDnaute Junior
Bonsoir.
Pourquoi ne faites vous pas tout simplement comme ça ? :
VB:
Sub formule3()
Dim Plg As Range
Set Plg = ActiveSheet.UsedRange
Set Plg = Plg.Rows(2).Resize(Plg.Rows.Count - 1)
With Plg.Columns("H")
   .FormulaR1C1 = "=IFERROR(VLOOKUP(RC5,'VR avec param'!C3:C8,6,FALSE),VLOOKUP(RC4,VR!C1:C8,7,FALSE))"
   .Value = .Value: End With
End Sub


Bonjour,

Merci pour votre réponse, la macro fonctionne bien!
Est ce que vous pouvez m'expliquer rapidement les fonction Dim Plg et With Plg?
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Dim sert à déclarer des variables locales
With permet de spécifier un objet commun à toutes expressions commençant par un point dans la suite du code.
Remarque: Le curseur étant sur un tel mot, vous pouvez faire F1 pour trouver ces explications.
 

arrazki

XLDnaute Junior
Bonjour.
Dim sert à déclarer des variables locales
With permet de spécifier un objet commun à toutes expressions commençant par un point dans la suite du code.
Remarque: Le curseur étant sur un tel mot, vous pouvez faire F1 pour trouver ces explications.


Merci pour ta réponse,

est ce que tu peux m'aider encore une fois stp?

je voudrai créer une autre macro:
j'insert une colonne et dans la colonne inséré je met en libellé "ht+ PRODUIT" et dans cette même colonne je rentre une formule de calcul= c2+h2 jusqu'en bout de ligne pleine.
j'ai commencé comme ca mais impossible de trouver la fin

Sub test()
Columns(2).Insert
Range("b1").Select
ActiveCell.FormulaR1C1 = "ht+ PRODUIT" ' inserer une colonne
formulec=c1+h2

End Sub

j'ai joint un fichier
 

Pièces jointes

  • test.xlsm
    195.2 KB · Affichages: 64

arrazki

XLDnaute Junior
Bizarre ça. Si vous insérer chaque fois une colonne devant la B, donc avant la H, celle ci va se décaler vers la droite et la H deviendra l'actuelle G.


est ce possible d’insérer une colonne entre la b et c, et mettre une formule de calcul dedans qui prendrai en compte le libellé produit+montant HT?
je pense que c'est faisable mais je ne sait pas comment lui dire
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Il faudrait donner un nom dans le classeur aux colonnes qui seront décalées vers la droite à chaque exécution de la macro, et utiliser ces noms dans les formules.
Ou alors ajouter ces colonnes plutôt derrière pour ne pas faire bouger celles qui précèdent.
Ou bien chercher avec Worksheetfunction.Match les numéros de colonnes des titres surmontant les cellules impliqués dans les formules à mettre.
 
Dernière édition:

arrazki

XLDnaute Junior
Bonjour.
Il faudrait donner un nom dans le classeur aux colonnes qui seront décalées vers la droite à chaque exécution de la macro, et utiliser ces noms dans les formules.
Ou alors ajouter ces colonnes plutôt derrière pour ne pas faire bouger celles qui précèdent.
Ou bien chercher avec Worksheetfunction.Match les numéros de colonnes des titres surmontant les cellules impliqués dans les formules à mettre.

franchement je sais pas faire ça, si tu pouvais me débloquer?
 

Dranreb

XLDnaute Barbatruc
Comme ça par exemple :
VB:
Sub test()
Columns(2).Insert
Intersect(Columns(2), ActiveSheet.UsedRange).FormulaR1C1 = _
   "=RC" & WorksheetFunction.Match("Montant HT", Rows(1), 0) & _
   "+RC" & WorksheetFunction.Match("PRODUIT", Rows(1), 0)
[B1].Value = "HT+PRODUIT"
End Sub
Mais vous insèrerez chaque fois la même chose. Franchement je ne comprends pas à quoi ça sert.
 

arrazki

XLDnaute Junior
Comme ça par exemple :
VB:
Sub test()
Columns(2).Insert
Intersect(Columns(2), ActiveSheet.UsedRange).FormulaR1C1 = _
   "=RC" & WorksheetFunction.Match("Montant HT", Rows(1), 0) & _
   "+RC" & WorksheetFunction.Match("PRODUIT", Rows(1), 0)
[B1].Value = "HT+PRODUIT"
End Sub
Mais vous insèrerez chaque fois la même chose. Franchement je ne comprends pas à quoi ça sert.


en faite, j’extrais tous les mois la mème base de donnée sur plusieurs fichiers du même style, j'en ai 25 du coup ça me prend un temps fou. Alors je veux juste insérer la base, cela me rajoute une colonne et cela me calcule HT+produit. je vais essayer de voir ce que cela donne.
Merci pour votre réponse
 

Statistiques des forums

Discussions
311 715
Messages
2 081 822
Membres
101 821
dernier inscrit
hybroxis