VBA si #NA alors valeur precedente.

  • Initiateur de la discussion Initiateur de la discussion calomonos
  • Date de début Date de début

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 !

C

calomonos

Guest
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
 
Voila un fichier de même type avec en feuille 4 le bouton avec l'ancien code.
En feuille 3 votre code.

Les cotes sont bien mise a jour avec le bouton feuille 4 mais toujours l'erreur #NA pour les "monnaies " n'apparaissant pas dans "extraction".
Cdt.
 

Pièces jointes

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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
15
Affichages
1 K
Réponses
4
Affichages
291
Réponses
3
Affichages
848
Retour