Problème organisation procédure

steph42

XLDnaute Nouveau
Bonjour
Je finalise un module de gestion de cuisine.
Mon problème est le suivant:
J'ai une liste de produits par fournisseur et chaque ingrédient a une case à cocher correspondante.
Lorsqu'on coche sur une d'entre elle, un copier / coller se fait sur un onglet nommé "Base de données" afin de lister différents ingrédients pour obtenir un inventaire à jour des tarifs et denrées.
Mon résonnement est:
Lorsque la case à cocher est= true une vérification se déclenche pour savoir si l'onglet existe, si oui la procédure continue sinon Msgbox et exit sub.
Oui: Vérification si l'inventaire est finalisé ou pas (mois précédent), vérification si le mot "TOTAL" (qui est sur la ligne de calcul final de l'inventaire) est présent en fin de liste.
Si oui: Msgbox commencer un nouvel inventaire et exit sub, sinon (inventaire non finalisé) donc continuer procédure.

J'utilise la macro suivante mais cela ne marche pas.
Auriez vous une solution à me proposer.
Par avance Merci



Sub Tarif()

'Vérification si onglet BDD existe
Dim strNomFeuille As String
strNomFeuille = "base de données"
If FeuilleInexistante(strNomFeuille) Then
MsgBox "Veuillez d'abord créer un inventaire", vbOKOnly + vbCritical
Exit Sub
End If
'Case à cocher dans liste fournisseur
If Range("h4") = True Then

'Vérification si l'inventaire est finalisé ou pas
Dim Rg As Range, Quoi As String, Plage As String
Quoi = "total"
Plage = "A1:d300"
Set Rg = Range(Plage).Find(Quoi)
If Not Rg Is Nothing Then MsgBox "Veuillez commencer un nouvel inventaire", vbOKOnly

Exit Sub

' si l'inventaire n'est pas finalisé: continuer procedure
Range("i4").Select
Selection.Copy
Sheets("Base de données").Select
Range("c500").End(xlUp).Offset(1, 0).PasteSpecial
ActiveSheet.Paste Link:=True
Sheets("surgeles").Select
Application.CutCopyMode = False

End If

End Sub
 

youky(BJ)

XLDnaute Barbatruc
Re : Problème organisation procédure

Bonjour,
Pas évident du tout de bosser comme ça sans fichier exemple.
Bon voici mais sans pouvoir tester.
Bruno

Code:
Sub Tarif()
 On Error Resume Next
 With Sheets("base de données")
 .[A1] = .[A1] 'on va en error si l'onglet est inexistant
   If Err > 0 Then
     MsgBox "Veuillez d'abord créer un inventaire", vbOKOnly + vbCritical
     Err.Clear: Exit Sub
   End If
 'Case à cocher dans liste fournisseur
 If Range("h4") = True Then
    'Vérification si l'inventaire est finalisé ou pas
     Set Rg = Range("A1:D300").Find("total")
    If Not Rg Is Nothing Then MsgBox "Veuillez commencer un nouvel inventaire", vbOKOnly: Exit Sub
 Else
 ' si l'inventaire n'est pas finalisé: continuer procedure
    Range("i4").Copy
    Sheets("Base de données").Range("c500").End(xlUp).Offset(1, 0).PasteSpecial
    ActiveSheet.Paste Link:=True
    Sheets("surgeles").Select
    Application.CutCopyMode = False
End If
 End With
End Sub
 

camarchepas

XLDnaute Barbatruc
Re : Problème organisation procédure

Bonsoir youki et steph,

j'apporte ma contribution pour la détection d'inexistance de feuille afin d'éviter la gestion d'erreur :

Code:
Function FeuilleInexistante(NomFeuille As String) As Boolean
Dim Onglet As Worksheet
Dim Trouve As Boolean
 Trouve = False
 For Each Onglet In ThisWorkbook.Worksheets
   Trouve = IIf(Onglet.Name = NomFeuille, True, False)
   If Trouve Then Exit For
 Next Onglet
FeuilleInexistante = Not Trouve
End Function
 

steph42

XLDnaute Nouveau
Re : Problème organisation procédure

Bonjour Youki et camarchepas
J'ai essayé en vain de faire fonctionner tout cela.
J'ai joint un fichier et apostrophé dans la macro de la case à cocher la partie qui ne fonctionne pas.
Merci pour votre aide.
 

Pièces jointes

  • Fichier essai.xlsm
    13.3 KB · Affichages: 30
  • Fichier essai.xlsm
    13.3 KB · Affichages: 34
  • Fichier essai.xlsm
    13.3 KB · Affichages: 36

youky(BJ)

XLDnaute Barbatruc
Re : Problème organisation procédure

Bonjour steph,
Le fichier ne dispose pas de macro, il est de plus trop simpliste, je ne comprends pas le but ni ou chercher.
Y a t'il plusieurs checkbox et sur plusieurs onglets ?
Le mot "TOTAL" est à chercher sur quelle feuille ?
Une fois trouvé que faut'il renvoyer et où ?
Bref, apporte plus de précision au fichier afin que l'on puisse donner une solution.
Bruno
 

steph42

XLDnaute Nouveau
Re : Problème organisation procédure

Désolé

La but recherché est le suivant:
Cliquer sur la case à cocher
* Une copie du tarif s'exécute sur l'onglet "Base de données"
* Puis finaliser l'inventaire afin de créer la colonne de calcul avec la case "TOTAL"

Ma difficulté est de créer la procédure de contrôle de la cellule où le mot "TOTAL" apparé.
Si celui-ci est trouvé, cela veut dire que mon inventaire n'est pas modifiable et donc une Msgbox invite la personne à créer un nouvel inventaire
Sinon la saisie peut continuer.
 

Pièces jointes

  • Fichier essai.xlsm
    28.3 KB · Affichages: 35
  • Fichier essai.xlsm
    28.3 KB · Affichages: 36
  • Fichier essai.xlsm
    28.3 KB · Affichages: 36

youky(BJ)

XLDnaute Barbatruc
Re : Problème organisation procédure

Re,
Voici comme je le pense !
Bruno

Code:
Sub Finaliser_inventaire()
Set c = Feuil9.[D2:D100].Find("TOTAL", LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then MsgBox "Inventaire non modifiable !" & vbCr & "Vous devez créer un Nouvel Inventaire!", vbExclamation: Exit Sub
'AJout de ligne TOTAL pour finaliser tableau
    Sheets("Base de données").Select
     'et la suite
 

steph42

XLDnaute Nouveau
Re : Problème organisation procédure

Bonjour Youki
Votre macro fonctionne parfaitement mais mon soucis est de trouver la combine pour l'intégrer à la suite de la première qui est la vérification de l'existance de l'onglet "Base de données".
J'essaye mais sans succés.
Salutations
 

youky(BJ)

XLDnaute Barbatruc
Re : Problème organisation procédure

Salut,
Ce code évite la fonction, la vérif se fait de suite
Bruno
Code:
Sub Finaliser_inventaire()
On Error Resume Next 'gestion d'error
  Sheets("Base de données").Select 'si l'onglet n'existe pas on va en gestion de l'error et message et quitte
  If Err <> 0 Then MsgBox "Veuillez d'abord créer un inventaire", vbOKOnly + vbCritical: Exit Sub
  'on continue car pas d'error ici
 Set c = Feuil9.[D2:D100].Find("TOTAL", LookIn:=xlValues, LookAt:=xlWhole)
 If Not c Is Nothing Then MsgBox "Inventaire non modifiable !" & vbCr & "Vous devez créer un Nouvel Inventaire!", vbExclamation: Exit Sub
'AJout de ligne TOTAL pour finaliser tableau
  
'et la suite

PS: cet après midi je serais absent car je vais dans le 42 avant St Etienne voir mes petits enfants
 
Dernière édition: