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

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
 
Bonjour Robert,

Merci pour ta réponse.

Quand je click sur le bouton il y a un chargement puis j'ai le msgbox au bout de 3s mais rien ne se passe au niveau du tableau.

Cdt
 
Re,

As-tu fait tourner la macro pas à pas [F8] ?
Je l'ai fait en simulant ton fichier et ça marchait. Si tu ne daignes pas joindre un fichier je ne peux plus rien pour toi !...
 
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
325
Réponses
3
Affichages
875
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…