Soustraction recherchev boucle

Y compris Power BI, Power Query et toute autre question en lien avec Excel
E
Etienne03
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 4 avril 2019
Version d'Excel : 2010 FR

Message par Etienne03 » 4 avril 2019, 09:15

Bonjour à tous,

Je n'ai pas trouvé de réponse sur internet donc voici ma question :
Je souhaite faire la soustraction du résultat de 2 recherchev dans une cellule et descendre la formule dans les cellules suivantes.

J'ai essayé avec le bout de code suivant sans succès :
With Sheets("Vérif" )
For i = 2 To 4
.Range("I" & i).Value = WorksheetFunction.VLookup(.Range("A" & i).Value, Sheets("Feuil1" ).Range("A:O" ), 15, False) - WorksheetFunction.VLookup(.Range("A" & i).Value, Sheets("Feuil2" ).Range("A:K" ), 11, False)
Next i

End With

A savoir que sans la boucle, j'arrive à faire la différence de 2 recherchev. Avec la boucle, je peux juste faire une recherchev mais sans la différence... :lole:

Avez-vous une idée svp?
j
jmd
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'603
Appréciations reçues : 251
Inscrit le : 8 décembre 2007
Version d'Excel : 365 + PowerBI

Message par jmd » 4 avril 2019, 09:42

bonjour

unn petit fichier de 3 colonnes et 5 lignes, et le résultat attendu STP

à te relire
amitiés
Apprenez les fonctions d'Excel.
Exemple "Mettre sous forme de tableau", TCD, "Récupérer des données".
Apprendre les fonctionnalités "récentes".
E
Etienne03
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 4 avril 2019
Version d'Excel : 2010 FR

Message par Etienne03 » 4 avril 2019, 09:52

Bonjour jmd,

Voici un fichier joint.
Dans les onglets "Feuil1" et "Feuil2", il y a une liste avec un identifiant commun. C'est dans l'onglet "Feuil3" que je souhaite avoir la différence des nombres de "Feuil" et "Feuil2" pour chaque identifiant.
Je te laisse ouvrir le fichier, ce sera certainement beaucoup plus clair :)
Exemple.xlsx
(9.24 Kio) Téléchargé 3 fois
m
m3ellem1
Membre impliqué
Membre impliqué
Messages : 1'812
Appréciations reçues : 162
Inscrit le : 18 décembre 2018
Version d'Excel : 2016

Message par m3ellem1 » 4 avril 2019, 10:19

Slt Etienne,
Slt jmd,

mais ca fonctionne sur ton fichier exemple:

Range("I" & i).Value = WorksheetFunction.VLookup(.Range("A" & i).Value, Sheets("Feuil1" ).Range("A:O" ), 15, False) - WorksheetFunction.VLookup(.Range("A" & i).Value, Sheets("Feuil2" ).Range("A:K" ), 11, False)

Il faut adapter l'index des colonnes 15 ==>2 et 11 ==> 2

Sub test()
With Sheets("feuil1")
For i = 2 To 4

.Range("I" & i).Value = WorksheetFunction.VLookup(.Range("A" & i).Value, Sheets("Feuil1").Range("A:O"), 2, False) - _
WorksheetFunction.VLookup(.Range("A" & i).Value, Sheets("Feuil2").Range("A:K"), 2, False)
Next i

End With
End Sub
À partir d'hier, j'ai décidé de ne plus expliquer les solutions proposées et de ne plus répondre aux MP!
E
Etienne03
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 4 avril 2019
Version d'Excel : 2010 FR

Message par Etienne03 » 4 avril 2019, 11:46

Hello,

Effectivement, ça fonctionne dans le fichier test. Je viens de comprendre le problème :
lorsque la rechercheV ne trouve pas de résultat (affichage #N/A normalement dans les cellules), la macro plante.

J'ai refait le fichier avec plus de ligne et anonymisé. En ligne 24, la recherchev ne trouve pas de correspondance et plante donc.

Tu as une idée de la manière dont je peux soit forcer la macro à continuer soit faire en sorte qu'elle ne prenne pas en compte ces #N/A?
Contrôle_V4b_VBA.xlsx
(305.02 Kio) Téléchargé 3 fois
E
Etienne03
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 4 avril 2019
Version d'Excel : 2010 FR

Message par Etienne03 » 4 avril 2019, 12:05

Avec la macro :wink:

With Sheets("V1")
For i = 2 To 4
.Range("I" & i).Value = WorksheetFunction.VLookup(.Range("A" & i).Value, Sheets("H1").Range("A:O"), 15, False) - WorksheetFunction.VLookup(.Range("A" & i).Value, Sheets("C1").Range("A:K"), 11, False)
Next i
End With

End Sub
m
m3ellem1
Membre impliqué
Membre impliqué
Messages : 1'812
Appréciations reçues : 162
Inscrit le : 18 décembre 2018
Version d'Excel : 2016

Message par m3ellem1 » 4 avril 2019, 13:41

Slt,

un essai
Sub test()

On Error Resume Next

With Sheets("V1")
lRow = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lRow
.Range("I" & i).Value = WorksheetFunction.VLookup(.Range("A" & i).Value, Sheets("H1").Range("A:O"), 15, False) - WorksheetFunction.VLookup(.Range("A" & i).Value, Sheets("C1").Range("A:K"), 11, False)
Next i
End With

End Sub

À partir d'hier, j'ai décidé de ne plus expliquer les solutions proposées et de ne plus répondre aux MP!
E
Etienne03
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 4 avril 2019
Version d'Excel : 2010 FR

Message par Etienne03 » 4 avril 2019, 14:20

Ca semble bien fonctionner. ::D
Je vais tester sur les autres colonnes de mon fichier car j'ai environ 15 colonnes avec des recherchev.

Tu peux me dire à quoi correspond "On Error Resume Next" et "lRow = .Cells(Rows.Count, 1).End(xlUp).Row"?

Dans tous les cas merci beaucoup! :)
m
m3ellem1
Membre impliqué
Membre impliqué
Messages : 1'812
Appréciations reçues : 162
Inscrit le : 18 décembre 2018
Version d'Excel : 2016

Message par m3ellem1 » 4 avril 2019, 14:41

Etienne03 a écrit :
4 avril 2019, 14:20
Tu peux me dire à quoi correspond "On Error Resume Next" et "lRow = .Cells(Rows.Count, 1).End(xlUp).Row"?
"On Error Resume Next": on ignore l'erreur et on continue l'exécution du programme.

"lRow = .Cells(Rows.Count, 1).End(xlUp).Row" calculer la dernière céllule non vide de l'onglet "V1" afin que la boucle tourne jusqu'à cette dernière céllule :mrgreen:

:btres:
À partir d'hier, j'ai décidé de ne plus expliquer les solutions proposées et de ne plus répondre aux MP!
E
Etienne03
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 4 avril 2019
Version d'Excel : 2010 FR

Message par Etienne03 » 4 avril 2019, 14:47

Encore merci!
Je viens de dupliquer et ça fonctionne très bien! :mrgreen:
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message