Erreur 438 "vous ne disposez pas des droits d'administration..."

Résolu/Fermé
maiito2011 Messages postés 6 Date d'inscription mercredi 4 février 2015 Statut Membre Dernière intervention 18 février 2015 - Modifié par maiito2011 le 18/02/2015 à 12:30
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 18 févr. 2015 à 16:40
Bonjour à toutes et à tous, je suis novice en matière de programmation sur VBA et je rencontre un problème.
Je vous explique rapidement ce que je dois obtenir :
Je veux automatiser la saisie de données concernant des ventes, j'affiche donc plusieurs fenêtres de saisie successives demandant de renseigner les quantités, les prix etc... et je fini par une fenêtre me demandant si j'ai une autre vente à saisir pour ainsi recommencer la manip.
J'ai donc mis en place une boucle, avec les InputBox nécessaires.
Jusque là pas de problème.
Je rencontre des problèmes lorsque je veux associer les saisies à des cellules.
Je m'explique, je veux associer les éléments de ma première vente à ma première ligne, ceux de la deuxième vente à la seconde ligne et ainsi de suite...
Et c'est là dessus que je bloque.
Je vous envoi ce que j'ai essayé de faire, bien que cela ne fonctionne pas.

Sub Macro1()

Dim produit$, destination, poids!, client$, prix_reel%, prix_preetabli%, retour&

'Saisie des ventes
Range("A1").Select

Do Until retour = 7
client = InputBox("Saisir le nom du client.", "Saisie des éléments de la vente.")
ActiveCell.Offeset(3, 0) = client
produit = InputBox("Saisir le produit vendu.", "Saisie des éléments de la vente.")
ActiveCell.Offeset(3, 1).Value = produit
destination = InputBox("Saisir la destination.", "Sasie des éléments de la vente.")
ActiveCell.Offeset(3, 2).Value = destination
poids = InputBox("Saisir le poids.", "Saisie des éléments de la vente.")
ActiveCell.Offeset(3, 3).Value = poids
retour = MsgBox("Y a-t-il d'autres ventes à saisir ?", vbYesNo, "Saisie des éléments de la vente.")


Loop

End Sub




En vous remerciant par avance.

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
18 févr. 2015 à 14:04
Bonjour,

Il te faut déclarer une variable Lign qui s'incrémente à chacune de tes boucles Do Loop.
Comme ceci :

Sub Macro1()
Dim produit$, destination, poids!, client$, prix_reel%, prix_preetabli%, retour&
Dim Lign As Long

'Saisie des ventes
Range("A1").Select
Lign = 3
Do Until retour = 7
    client = InputBox("Saisir le nom du client.", "Saisie des éléments de la vente.")
    ActiveCell.Offset(Lign, 0) = client
    produit = InputBox("Saisir le produit vendu.", "Saisie des éléments de la vente.")
    ActiveCell.Offset(Lign, 1).Value = produit
    destination = InputBox("Saisir la destination.", "Sasie des éléments de la vente.")
    ActiveCell.Offset(Lign, 2).Value = destination
    poids = InputBox("Saisir le poids.", "Saisie des éléments de la vente.")
    ActiveCell.Offset(Lign, 3).Value = poids
    retour = MsgBox("Y a-t-il d'autres ventes à saisir ?", vbYesNo, "Saisie des éléments de la vente.")
    Lign = Lign + 1
Loop
End Sub

1
maiito2011 Messages postés 6 Date d'inscription mercredi 4 février 2015 Statut Membre Dernière intervention 18 février 2015
18 févr. 2015 à 14:21
Merci beaucoup pour votre aide !!
En revanche j'ai un autre petit soucis en ce qui concerne le prix pré-établi.
Sur un autre classeur excel, j'ai 4 feuilles sur lesquelles figurent mes tarifs. En sachant que mes tarifs varient en fonction du poids et de la destination.

https://www.cjoint.com/?3BsozJkhuYj
Les poids sont établis en par tranche, 1ère colonne = 0 à 10, 2ème colonne = 11 à 20, etc...
Et les prix sont des prix au kilo.

Je voudrai donc afficher le prix pré-établi en fonction des critères saisies précédemment. Par exemple si on a saisi un produit "AFG", un poids de "32" et en destination "26" je veux retrouver en sortie 61*32, soit 1952.

Je ne sais pas si cela est faisable ou pas puisqu'il faut utiliser d'autres fichiers excel.

Merci
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
18 févr. 2015 à 14:49
1- si ton classeur "tarif" est fermé, il faudra l'ouvrir.
Donc, dans ta macro inititiale, adapte ce code :
Sub Macro1()
Dim produit$, destination, poids!, client$, prix_reel%, prix_preetabli%, retour&
Dim Lign As Long
'ouverture du fichier "tarifs" s'il est fermé
On error resume next
Workbooks(NomDuFichierTarif).activate
if err <> 0 then Workbooks.Open Filename:=CheminDuFichier & NomDuFichierTarif
on error goto 0
'on revient sur le fichier contenant la macro
ThisWorkBook.Activate
'Saisie des ventes
Range("A1").Select
Lign = 3
Do Until retour = 7
    client = InputBox("Saisir le nom du client.", "Saisie des éléments de la vente.")
    ActiveCell.Offset(Lign, 0) = client
    produit = InputBox("Saisir le produit vendu.", "Saisie des éléments de la vente.")
    ActiveCell.Offset(Lign, 1).Value = produit
    destination = InputBox("Saisir la destination.", "Sasie des éléments de la vente.")
    ActiveCell.Offset(Lign, 2).Value = destination
    poids = InputBox("Saisir le poids.", "Saisie des éléments de la vente.")
    ActiveCell.Offset(Lign, 3).Value = poids
    retour = MsgBox("Y a-t-il d'autres ventes à saisir ?", vbYesNo, "Saisie des éléments de la vente.")
    Lign = Lign + 1
Loop
End Sub

Essaie déjà de faire fonctionner ce code.
Il devrait ouvrir ton fichier tarif s'il ne l'était pas...
0
maiito2011 Messages postés 6 Date d'inscription mercredi 4 février 2015 Statut Membre Dernière intervention 18 février 2015 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
18 févr. 2015 à 15:20
Merci pour la réponse rapide pijaku
J'ai testé ton code en y incluant le nom et le chemin du fichier que je souhaite ouvrir, mais cela ne fonctionne pas.
J'ai donc remplacé
if err <> 0 then Workbooks.Open Filename:=CheminDuFichier & NomDuFichierTarif

par
If Err <> 0 Then Workbooks.Open "CheminDuFichier\NomDuFichierTarifs.xls"


et là ça fonctionne, j'ai bien mon fichier Tarifs qui s'ouvre et ma macro se poursuit en me demandant de saisir mes informations.

En attendant j'ai cru comprendre que je devrais utiliser VLOOKUP et HLOOKUP en les imbriquant afin de sortir la valeur dont j'ai besoin. En revanche je ne sais pas comment faire pour leur indiquer que la valeur que je cherche (qui se trouve sur la feuille 1 de mon tableau 1) doit être cherchée sur une plage se situant OU sur la feuille 1 de mon tableau Tarifs, OU sur la feuille 2 de mon tableau Tarifs OU ....
En sachant que la condition OU dépend du produit qui aura été saisi.

En bref, si lors de ma saisie j'ai renseigné en produit "AFG", il faudrait que la recherche s'effectue sur le classeur Tarifs, sur la feuille AFG.
Si j'ai renseigné "EXPD" alors la recherche doit toujours se faire sur le classeur Tarifs mais sur la feuille EXPD cette fois.
Et le résultat doit être renvoyé sur le classeur ou j'effectue la macro, le classeur initial.

Je sais pas si tout est clair, si ce n'est pas le cas j'essaierai de clarifier les choses, et si besoin j'insérerai les fichiers.

Merci d'avance.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751 > maiito2011 Messages postés 6 Date d'inscription mercredi 4 février 2015 Statut Membre Dernière intervention 18 février 2015
18 févr. 2015 à 15:39
Alors, adapte ceci :
Sub Macro1()
Dim produit$, destination, poids!, client$, prix_reel%, prix_preetabli%, retour&
Dim Lign As Long
'ouverture du fichier "tarifs" s'il est fermé
On error resume next
Workbooks(NomDuFichierTarif).activate
If Err <> 0 Then Workbooks.Open "CheminDuFichier\NomDuFichierTarifs.xls"
on error goto 0
'on revient sur le fichier contenant la macro
ThisWorkBook.Activate
'Saisie des ventes
Range("A1").Select
Lign = 3
Do Until retour = 7
    client = InputBox("Saisir le nom du client.", "Saisie des éléments de la vente.")
    ActiveCell.Offset(Lign, 0) = client
    produit = InputBox("Saisir le produit vendu.", "Saisie des éléments de la vente.")
    ActiveCell.Offset(Lign, 1).Value = produit
    destination = InputBox("Saisir la destination.", "Sasie des éléments de la vente.")
    ActiveCell.Offset(Lign, 2).Value = destination
    poids = InputBox("Saisir le poids.", "Saisie des éléments de la vente.")
    ActiveCell.Offset(Lign, 3).Value = poids
    '***************************************************************** A ADAPTER
    Dim L As Integer, C, Col As Integer
    With WorkBooks(NomDuFichierTarifs.xls).Sheets(produit)
        L = .Columns(1).Cells.Find("FR-" & destination)
        For Each C In .Columns
            If .Cells(3, C.Column) < poids And .Cells(3, C.Column + 1) > poids Then
                Col = C.Column: Exit For
            End If
        Next C
        MsgBox "tarif : " & .Cells(L, Col) & " multiplié par le poids = " & .Cells(L, Col) * poids
    End With
    '*********************************************************************************
    retour = MsgBox("Y a-t-il d'autres ventes à saisir ?", vbYesNo, "Saisie des éléments de la vente.")
    Lign = Lign + 1
Loop
End Sub
0
maiito2011 Messages postés 6 Date d'inscription mercredi 4 février 2015 Statut Membre Dernière intervention 18 février 2015 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
18 févr. 2015 à 16:36
J'ai adapté ce que tu m'as communiqué, et en testant la macro tout fonctionne correctement jusqu'à la saisie du poids. Une fois celui ci saisi, j'ai une fenêtre "Objet requis" qui s'ouvre et qui stop donc la macro.
Ensuite je souhaiterai affiché le résultat non pas via une MsgBox mais plutôt de la même façon que j'affichais les données saisies manuellement.
J'imagine donc que ça prendre la forme suivante

ActiveCell.Offset(Lign, 4).value = poids * le résultat de la recherche précédente.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751 > maiito2011 Messages postés 6 Date d'inscription mercredi 4 février 2015 Statut Membre Dernière intervention 18 février 2015
18 févr. 2015 à 16:40
J'imagine que l'objet requis correspond soit au :
- WorkBooks(NomDuFichierTarifs.xls) => a adapter
ou alors :
- Sheets(produit) => si mal saisi...

Pour l'instant j'ai mis un MsgBox, pour tester. Rien ne t'empêche de mettre, à la place :
ActiveCell.Offset(Lign, 4).value = poids * .Cells(L, Col)
0