besoind'aide

JP43

XLDnaute Nouveau
Bonjour et merci pour votre aide pour résoudre mon problème .

je voudrai qu'excel transfère la valeur C5 ET D5 (ainsi que les suivantes) dans le tableau de la feuille "surface" et renvoie le résultat dans la cellule E5 de cette feuille (comme sur la première ligne) .Evidemment il serait plus facile de recopier la formule(=C5*D5)dans la cellule E5 mais il s'agit d'un exemple pour un fichier beaucoup plus complexe ou j'aurai besoin d'une fonction similaire.
 

Pièces jointes

  • ESSAI 2.xlsx
    10.7 KB · Affichages: 77

Hieu

XLDnaute Impliqué
Salut,

La macro corrigée :
VB:
Sub mlk()
For i = 1 To 15
    feuille = Sheets("total").Range("d3").Offset(i, 0)
    Sheets(feuille).Range("b5") = Sheets("total").Range("f3").Offset(i, 0)
    Sheets(feuille).Range("c5") = Sheets("total").Range("g3").Offset(i, 0)
    Sheets("total").Range("h3").Offset(i, 0) = Sheets(feuille).Range("d5")
Next i
End Sub

Pour la deuxieme requete, je n'ai rien compris !!!!

Un exemple serait le bienvenu :
a4 =
b4 =
c4 =
==> qu'obtient-on en h4 ?
a5 =
b5 =
c5 =
==> qu'obtient-on en h5 ?
 

JP43

XLDnaute Nouveau
Un exemple serait le bienvenu :
a4 = 1
b4 = dc
c4 = 50
==> qu'obtient-on en h4 ?=131 (recherche vertical sur feuille négoce)
a5 = 1
b5 = vt
c5 = 10
==> qu'obtient-on en h5 ?=5 (recherche vertical sur feuille négoce)
a6 = "vide"
b6 =" vide"
c6 = "vide"
==> qu'obtient-on en h6 ?=(on exécute la macro comme avant en fonction de d6 f6 g6)

pas très simple a expliqué mon affaire.
 

Hieu

XLDnaute Impliqué
Re,

pas trop compris l'interet de la cellule "A" ?

VB:
Sub mlk()
Set wf = WorksheetFunction
Set t = Sheets("total")
Set n = Sheets("negoce")

For i = 1 To 15
Select Case IsEmpty(t.Range("a3").Offset(i, 0))
Case True
    feuille = t.Range("d3").Offset(i, 0)
    Sheets(feuille).Range("b5") = t.Range("f3").Offset(i, 0)
    Sheets(feuille).Range("c5") = t.Range("g3").Offset(i, 0)
    t.Range("h3").Offset(i, 0) = Sheets(feuille).Range("d5")
Case False
    t.Range("h3").Offset(i, 0) = _
    wf.Index(n.Range("d5:g12"), wf.Match(t.Range("b3").Offset(i, 0), n.Range("c5:c12"), 0), wf.Match(t.Range("c3").Offset(i, 0), n.Range("d4:g4"), 0))
End Select
Next i
End Sub
 

Pièces jointes

  • ESSAI 3_v3.xlsm
    34 KB · Affichages: 38

JP43

XLDnaute Nouveau
Bonjour
Effectivement pas beaucoup d'interet la cellule "A".
Après transfert sur mon vrai fichier j'ai un message d'érreur:"case sans select case"
voici le code

Sub mlk()
Set wf = WorksheetFunction
Set t = Sheets("calcul")
Set n = Sheets("NEGOCE")

For i = 1 To 12
Select Case IsEmpty(t.Range("a5").Offset(i, 0))
Case True
feuille = Sheets("calcul").Range("L5").Offset(i, 0)
If feuille <> "" Then
Sheets(feuille).Range("c5") = Sheets("calcul").Range("E5").Offset(i, 0)
Sheets(feuille).Range("b3") = Sheets("calcul").Range("I5").Offset(i, 0)
Sheets(feuille).Range("c3") = Sheets("calcul").Range("J5").Offset(i, 0)
Sheets(feuille).Range("d3") = Sheets("calcul").Range("K5").Offset(i, 0)
Sheets("calcul").Range("N5").Offset(i, 0) = Sheets(feuille).Range("L21")
Sheets("calcul").Range("ag5").Offset(i, 0) = Sheets(feuille).Range("G3")


Case False
t.Range("N5").Offset(i, 0) = _
wf.Index(n.Range("S3:AQ3000"), wf.Match(t.Range("b5").Offset(i, 0), n.Range("AQ3:AQ5000"), 0), wf.Match(t.Range("E5").Offset(i, 0), n.Range("S2:AQ2"), 0))
End Select
Next i
End Sub

Merci d'avance de ton aide
 

Hieu

XLDnaute Impliqué
Il te manque un "End If":
VB:
Sub mlk()
Set wf = WorksheetFunction
Set t = Sheets("calcul")
Set n = Sheets("NEGOCE")

For i = 1 To 12
Select Case IsEmpty(t.Range("a5").Offset(i, 0))
Case True
feuille = Sheets("calcul").Range("L5").Offset(i, 0)
If feuille <> "" Then
Sheets(feuille).Range("c5") = Sheets("calcul").Range("E5").Offset(i, 0)
Sheets(feuille).Range("b3") = Sheets("calcul").Range("I5").Offset(i, 0)
Sheets(feuille).Range("c3") = Sheets("calcul").Range("J5").Offset(i, 0)
Sheets(feuille).Range("d3") = Sheets("calcul").Range("K5").Offset(i, 0)
Sheets("calcul").Range("N5").Offset(i, 0) = Sheets(feuille).Range("L21")
Sheets("calcul").Range("ag5").Offset(i, 0) = Sheets(feuille).Range("G3")
End If ' ------------------------------ici-----------------------------------------

Case False
t.Range("N5").Offset(i, 0) = _
wf.Index(n.Range("S3:AQ3000"), wf.Match(t.Range("b5").Offset(i, 0), n.Range("AQ3:AQ5000"), 0), wf.Match(t.Range("E5").Offset(i, 0), n.Range("S2:AQ2"), 0))
End Select
Next i
End Sub
 

JP43

XLDnaute Nouveau
Merci je n'ai plus ce message d erreur mais cela ne fonctionne pas la première partie (qui fonctionné) ne fonctionne plus et la deuxième partie, j'ai ce message "impossible de lire la propriété match de la classe worksheet fonction".
 

Hieu

XLDnaute Impliqué
Toujours à l'aveuglette :
VB:
Sub mlk()
Set wf = WorksheetFunction
Set t = Sheets("calcul")
Set n = Sheets("NEGOCE")

For i = 1 To 12
Select Case IsEmpty(t.Range("a5").Offset(i, 0))
Case True
feuille = t.Range("L5").Offset(i, 0)
If feuille <> "" Then
Sheets(feuille).Range("c5") = t.Range("E5").Offset(i, 0)
Sheets(feuille).Range("b3") = t.Range("I5").Offset(i, 0)
Sheets(feuille).Range("c3") = t.Range("J5").Offset(i, 0)
Sheets(feuille).Range("d3") = t.Range("K5").Offset(i, 0)
t.Range("N5").Offset(i, 0) = Sheets(feuille).Range("L21")
t.Range("ag5").Offset(i, 0) = Sheets(feuille).Range("G3")
End If 

Case False
t.Range("N5").Offset(i, 0) = _
wf.Index(n.Range("S3:AQ3000"), _ 
    wf.Match(t.Range("b5").Offset(i, 0), n.Range("AQ3:AQ5000"), 0), _ 
    wf.Match(t.Range("E5").Offset(i, 0), n.Range("S2:AQ2"), 0))
End Select
Next i
End Sub

Dans "Case False"
==> il semblerait qu'il y ait une erreur sur la recherche de ligne (plutot 3000 ?)

Si tu arrivais à générer un fichier "bidon" pour voir, ce serait plus simple ?
 

JP43

XLDnaute Nouveau
Après bidouillage je suis arrivé a faire fonctionner la deuxième partie de la formule.
Sub mlk()
Set wf = WorksheetFunction
Set t = Sheets("calcul")
Set n = Sheets("NEGOCE")

For i = 1 To 12
Select Case IsEmpty(t.Range("a5").Offset(i, 0))
Case True
feuille = t.Range("L5").Offset(i, 0)
If feuille <> "" Then
Sheets(feuille).Range("c5") = t.Range("E5").Offset(i, 0)
Sheets(feuille).Range("b3") = t.Range("I5").Offset(i, 0)
Sheets(feuille).Range("c3") = t.Range("J5").Offset(i, 0)
Sheets(feuille).Range("d3") = t.Range("K5").Offset(i, 0)
t.Range("N5").Offset(i, 0) = Sheets(feuille).Range("L21")
t.Range("ag5").Offset(i, 0) = Sheets(feuille).Range("G3")
End If

Case False
t.Range("N5").Offset(i, 0) = _
wf.Index(n.Range("S3:AQ3000"), _
wf.Match(t.Range("b5").Offset(i, 0), n.Range("A3:A5000"), 0), _
wf.Match(t.Range("E5").Offset(i, 0), n.Range("S2:AQ2"), 0))
End Select
Next i
End Sub

Malheureusement la première ligne de la feuille "calcul " ne fonctionne plus.sinon les deux formules ont l'air de bien fonctionner sur les autres lignes.
 

Hieu

XLDnaute Impliqué
Ma premiere ligne est 4 alors que le code indique 3 post #18
upload_2017-11-7_22-32-50.png
 

Hieu

XLDnaute Impliqué
Ce qu'il faut faire :
Changer ton code pour avoir des "4" pour que la premiere ligne tourne:

Sub mlk()
Set wf = WorksheetFunction
Set t = Sheets("calcul")
Set n = Sheets("NEGOCE")

For i = 1 To 12
Select Case IsEmpty(t.Range("a4").Offset(i, 0))
Case True
feuille = t.Range("L4").Offset(i, 0)
If feuille <> "" Then
Sheets(feuille).Range("c5") = t.Range("E4").Offset(i, 0)
Sheets(feuille).Range("b3") = t.Range("I4").Offset(i, 0)
Sheets(feuille).Range("c3") = t.Range("J4").Offset(i, 0)
Sheets(feuille).Range("d3") = t.Range("K4").Offset(i, 0)
t.Range("N4").Offset(i, 0) = Sheets(feuille).Range("L21")
t.Range("ag4").Offset(i, 0) = Sheets(feuille).Range("G3")
End If

Case False
t.Range("N4").Offset(i, 0) = _
wf.Index(n.Range("S3:AQ5000"), _
wf.Match(t.Range("b4").Offset(i, 0), n.Range("A3:A5000"), 0), _
wf.Match(t.Range("E4").Offset(i, 0), n.Range("S2:AQ2"), 0))
End Select
Next i
End Sub
 

Discussions similaires

Réponses
1
Affichages
107
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16