Aide pour création d'une macro

Bonjour à tous,

Comme indiqué dans ma présentation, je me retrouve un peu bloqué dans la création d'une macro dans une tableau excel et j'espère que vous pourrez m'apporter votre aide.

Vous trouverez en pièce jointe un condensé du fichier excel et de la macro que je veux créer :

Voici quel est mon problème.

Dans un classeur j'ai 2 feuilles de calcul dénommées respectivement VOLUME et TRANSPORT

- Dans la feuille volume j'ai en ordonnée les numéros de départements et en abscisse le nombre de palettes dans une colonne et le forfait transport dans une autre colonne qui est la donnée à trouver dans l'autre feuille "TRANSPORT" en fonction du N° de département et du nombre de palettes.

- Dans la feuille TRANSPORT, j'ai le nombre de palettes en ordonnée et le forfait transport par département en abscisse.

QUESTION :

Quelle est la macro que je dois mettre dans les cellules de la colonne forfait transport de la feuille de calcul "VOLUME" pour aller rechercher dans la feuille de calcul "TRANSPORT" le forfait transport correspondant au département et au nombre de palette.

J'espère que ma demande est précise, et si nécessaire je peux vous apporter plus de précisions,

Merci d'avance pour votre aide qui me sera d'un grand secours.

Bonjour

Je ne sais pas si j'ai bien compris la question, mais une simple formule suffit

Formule en C6 et à tirer vers le bas

=INDEX(TRANSPORT!$B$8:$M$40;B6;A6)

Bonjour à tous

Banzai64, je me suis permis de copier ta formule et d'intervertir les colonnes. Sinon, parfait la fonction index, j'y ai pas pensé avant.

=SI(ESTERREUR(INDEX(TRANSPORT!$B$8:$M$40;A6;B6));0;INDEX(TRANSPORT!$B$8:$M$40;A6;B6))

J'ai fait ceci en VBA, même résultat mais bon c'est juste une deuxième solution, la fonction index fait le boulot.

Sub intersect()

Worksheets("TRANSPORT").Activate

For i = 2 To 12 ' de la 2ème colonne à la 12 ème colonne

For j = 8 To 40 'de la 8ème ligne à la 40 è

Set isect = Application.intersect(Rows(j), Columns(i)) 'function intesection ligne/colonne + récupération d ela valeur à l'intersection

If isect Is Nothing Then 'si valeur vide, je ne fais rien

Else 'sinon,

For K = 1 To 12 'nbre de département dans la feuille volume

a = ThisWorkbook.Sheets("VOLUME").Cells(K + 5, 1).Value & ThisWorkbook.Sheets("VOLUME").Cells(K + 5, 2).Value

'comparaison entre les deux feuilles (clé=concatenantion N°dep et Nbre de pallette)si équivalent, je remplie la colonne C d ela feuille volume, à la ligne concernée.

If Cells(j, 1).Value & Cells(7, i).Value = a Then

ThisWorkbook.Sheets("VOLUME").Cells(K + 5, 3).Value = isect

End If

Next K

End If

Next j

Next i

ThisWorkbook.Sheets("VOLUME").Select

End Sub

oups! désolé Banzai64, toutes mes confuses ! c'est plutôt moi qui ait inversé les palette et les départements!

Code corrigé:

Sub intersect()

Worksheets("TRANSPORT").Activate

For i = 8 To 41 ' de la 2ème colonne à la 12 ème colonne

For j = 2 To 13 'de la 8ème ligne à la 40 è

Set isect = Application.intersect(Rows(i), Columns(j)) 'function intesection ligne/colonne + récupération d ela valeur à l'intersection

If isect Is Nothing Then 'si valeur vide, je ne fais rien

Else 'sinon,

For K = 1 To 9 'nbre de département dans la feuille volume

a = ThisWorkbook.Sheets("VOLUME").Cells(K + 5, 1).Value

b = ThisWorkbook.Sheets("VOLUME").Cells(K + 5, 2).Value

'comparaison entre les deux feuilles (clé=concatenantion N°dep et Nbre de pallette)si équivalent, je remplie la colonne C d ela feuille volume, à la ligne concernée.

If Cells(i, 1).Value = b And Cells(7, j).Value = a Then

ThisWorkbook.Sheets("VOLUME").Cells(K + 5, 3).Value = isect

End If

Next K

End If

Next j

Next i

ThisWorkbook.Sheets("VOLUME").Select

End Sub


ne pas faire attention au commentaire

Merci beaucoup pour votre aide, c'est exactement le résultat que je recherche à une exception près :

Lorsque dans la colonne B de la feuille VOLUME qui indique le nombre de palettes, le nombre est supérieur 33 palettes qui est le nombre de maximum pouvant être chargé dans un camion, il faudrait que la formule aille dans ce cas chercher dans la feuille TRANSPORT le prix de transport qui correspond à 33 palette + celui qui correspond au nombre de palette au delà de 33.

Deux exemples :

- Dans la feuille VOLUME cellule A6 le département indiqué est le 01 et dans la case B6 le nombre de palette est de 50.

Il faudrait donc avoir le résultat de 646,21 € correspondant aux forfaits de la feuille VOLUME de 33 palette (344,77 €) + 17 palettes (301,44 €).

- Dans la feuille VOLUME cellule A7 le département indiqué est le 02 et dans la case B7 le nombre de palette est de 95.

Il faudrait donc avoir le résultat de 2455,66 correspondant aux forfaits de la feuille VOLUME de 33 palette (836,10 €) + 33 palettes (836,10 €) + 29 palettes (783,46 €).

Je joint à nouveau le fichier en annexe où j'ai déjà indiqué la formule avec INDEX qui fonctionne bien mais pas si le nombre de palettes dépasse les 33.

Si vous avez la solution ce serait super.

Un grand merci par avance.

Bonjour

Pas assez calé pour trouver une formule

Banzai64 a écrit :

Bonjour

Je ne sais pas si j'ai bien compris la question, mais une simple formule suffit

Formule en C6 et à tirer vers le bas

=INDEX(TRANSPORT!$B$8:$M$40;B6;A6)

Bonjour Benzaï.

Merci beaucoup pour ta réponse d'hier.

Finalement je vais me débrouiller avec ta première solution "Index" qui est plus souple, et j'ai réglé le problème des 33 palettes en agrandissant le tableau TRANSPORT jusqu'à 100 palette.

Par contre il me faudrait une dernière petite aide.

Lorsque le nombre de palette est égal à 0 dans la colonne "Nombre de palettes" (exemple dans le fichier ci-joint en annexe pour la cellule "B6") il n'y a donc pas de prix de transport et il faudrait donc que la valeur indiquée dans la colonne "Forfait Transport" soit donc de 0.

Le plus simple pour moi, pour conserver cette formule "INDEX" qui est simple et fonctionne très bien, aurait été d'ajouter dans feuille "TRANSPORT" une ligne dans le tableau avec le nombre de palette 0, au dessus de la ligne indiquant 1 palette, et de mettre une valeur de 0 € pour tous les départements pour cette ligne 0 palette.

J'ai essayé mais ça ne fonctionne pas.

Si tu avais une solution ce serait super.

Merci d'avance.

Bonjour

Formule pour XL 2003

=SI(ESTERREUR(INDEX(TRANSPORT!$B$8:$CR$40;B6;A6));"";INDEX(TRANSPORT!$B$8:$CR$40;B6;A6))

Formule pour XL 2007 et +

=SIERREUR(INDEX(TRANSPORT!$B$8:$CR$40;B6;A6);"")

Bonjour Banzaï

Merci pour les 2 formules.

J'ai le même problème avec les deux formules.

En tirant la formule, j'ai bien aucun montant de transport indiqué pour les deux premières lignes, et ensuite même si j'indique O palette j'ai un montant indiqué. (voir en pièce jointe le tableau avec la formule et les résultats).

Il doit y avoir un petit bug à rectifier.

Merci bien.

Bonsoir

Aucune idée précise du pourquoi

Peut-être cela vient de : Extrait de l'aide

INDEX(matrice, no_lig, [no_col])

##Si vous spécifiez la valeur 0 (zéro) pour l’argument no_lig ou no_col, la fonction INDEX renvoie respectivement la matrice des valeurs de la colonne ou de la ligne entière. Pour utiliser les valeurs renvoyées sous la forme d’une matrice, entrez la fonction INDEX en tant que formule matricielle, dans une plage horizontale de cellules pour une ligne et dans une plage verticale de cellules pour une colonne. Pour entrer la formule matricielle, appuyez sur Ctrl+Maj+Entrée.

En attendant testes cette formule

=SI(OU(A6<=0;ESTVIDE(A6);B6<=0;ESTVIDE(B6));"";INDEX(TRANSPORT!$B$8:$CR$40;B6;A6))

Quelqu'un saura expliquer le pourquoi

Un grand Merci Banzaï,

J'ai pu finaliser mon tableau et tout marche parfaitement.

Rechercher des sujets similaires à "aide creation macro"