VBA si #NA alors valeur precedente.

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

calomonos

XLDnaute Nouveau
Bonjour,

Pouvez vous m'aider a résoudre mon problème?
J'ai deux feuilles. Une reçoit certaine valeurs de l'autre en cliquant sur un bouton.
Je voudrais avoir la valeur que j'avais avant de cliquer si seulement j'ai #NA.

Par exemple dans ma feuille 2 j'ai une colonne avec le nom des monnaies et sa cote sur la même ligne dans une autre colonne. Après click sur le bouton les cotes sont mise a jour dans le tableau 1 si j'ai le même nom de monnaie que dans le tableau 2 (avec application.vlookup)
Jusque là tous fonctionne sauf que si le nom de la monnaie n'est pas dans la feuille 2 j'ai #NA alors que je voudrais garder la cote qui était présente avant.

Voici mon programme:

Sub bouton1_clic()
Dim nbligne
Sheets ("tableau") . Select
Nblig=cells.specialcells(xlcelltypelastcell).row
For i =6 to nblig
Cells(i,17).formula=application.vlookup(sheets("tableau").range("A" & i),sheets ("extraction").range("A1:J" & nblig),10,false)
Next i
Msgbox "données initialisées"
End sub

Merci par avance.
Cdt
 
Bonjour Calomonis, bonjour le forum,

Deux petites remarques sur ton code :
- Une variable non typée prendra le type Variant par défaut (le plus gourmand en mémoire)
- Évite les Select autant que tu le peux. Il ne font que ralentir l'exécution du code...

Ton code modifié :

VB:
Sub bouton1_clic()
Dim nbligne As Integer 'Long si plus de 32 767 lignes

With Sheets("tableau")
    nblig = .Cells.SpecialCells(xlCellTypeLastCell).Row
    For i = 6 To nblig
        .Cells(i, 17).Formula = IIf(IsError(Application.VLookup(Sheets("tableau").Range("A" & i), Sheets("extraction").Range("A1:J" & nblig), 10, False)), .Cells(i, 17), Application.VLookup(Sheets("tableau").Range("A" & i), Sheets("extraction").Range("A1:J" & nblig), 10, False))
    Next i
End With
MsgBox "données initialisées"
End Sub
 
Re,

Les codes ont changé par rapport au post #1 !... Tu aimes compliquer les choses.
Essaie comme ça :

VB:
Sub Bouton1_Clic()
Dim T As Worksheet
Dim E As Worksheet
Dim DL As Integer
Dim nbligne As Integer

Set T = Worksheets("Tableau")
Set E = Worksheets("extraction")
DL = E.Range("B" & Application.Rows.Count).End(xlUp).Row
Nblig = T.Cells.SpecialCells(xlCellTypeLastCell).Row
For i = 2 To Nblig
   T.Cells(i, 3).Value = IIf(IsError(Application.VLookup(T.Range("B" & i), E.Range("B1:C" & DL), 2, False)), T.Cells(i, 3), Application.VLookup(T.Range("B" & i), E.Range("B1:C" & DL), 2, False))
Next i
MsgBox "Données initialisées"
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
832
Réponses
4
Affichages
144
Réponses
3
Affichages
672
Retour