VBA Besoin d’aide pour création d’un code.

michoulu

XLDnaute Nouveau
Bonjour à tous,

Je souhaite créer une macro Excel qui va s’exécuter comme suit :
1) Je remplis une cellule d’Excel avec un mot (toujours la même cellule, le mot par contre change)
2) Une boite de dialogue s’ouvre et me demande des infos (exemple : première Box : saisie du jour puis OK, 2ème Box : saisie de la quantité puis clic sur OK)
Selon les infos données, la macro remplit une cellule d’un tableau avec par exemple en colonne le jour en ligne le mot que j’ai rentré dans la cellule et la quantité au final donc la quantité en correspondance)

J’ai uniquement réussi à écrire le code des MsgBox qui semble faux au niveau des ‘Si mot saisi différent de … alors…’ :

Sub Interrogation()


' Déclaration des variables :
Dim x As String
Dim y As String
Dim z As String
Dim l As Integer
Dim m As String
Dim n As Integer


RetourArrière:

x = InputBox("Veuillez saisir un jour" _
& vbNewLine & vbNewLine & "Lundi à Samedi", "Saisie du Jour")

If x = "" Then Exit Sub

l = Val(x)

If l <> (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi) Then

MsgBox "Veuillez vérifier votre saisie"

GoTo RetourArrière

End If

RetourArrière1:

y = InputBox("Entrée ou Sortie", "Saisie de l'action")

If y = "" Then Exit Sub

m = Val(y)

If m = <> (entrée, entree, sortie) Then

MsgBox "Veuillez vérifier votre saisie"

GoTo RetourArrière1

End If

RetourArrière2:


z = InputBox("Veuillez saisir une quantité" _
& vbNewLine & vbNewLine & "Puis la vérifier", "Saisie quantité plaquettes")

If z = "" Then Exit Sub

n = Val(z)

If n < 1 Then

MsgBox "Veuillez vérifier votre saisie"

GoTo RetourArrière1

End If

End Sub
 

Hulk

XLDnaute Barbatruc
Re : VBA Besoin d’aide pour création d’un code.

Bonsoir les insomniaques :cool:,

Teste ceci Michoulu...
Code:
    Dim l, y, z As String
    
    On Error Resume Next
            
RetourArrière:
        
    l = InputBox("Choisissez un jour de la semaine svp" & Chr(13) & Chr(13) _
      & "Exemple : Jeudi", "Jour")
        
    If l = "" Then Exit Sub
                
    If l <> "Lundi" And l <> "Mardi" And l <> "Mercredi" And l <> "Jeudi" And l <> "Vendredi" And l <> "Samedi" Then
        MsgBox "Veuillez saisir un jour de la semaine du Lundi au Samedi" _
          & Chr(13) & Chr(13) & "Ex : Mercredi <- En mettant la première lettre en majuscule svp", , "Saisie invalide"
        GoTo RetourArrière
    Else
retourArriereBis:
        y = InputBox("Entrée ou Sortie", "Saisie de l'action")

        If y = "" Then Exit Sub
        
        If y <> "Entrée" And y <> "Sortie" Then
            MsgBox "Veuillez saisir ou ''Entrée'' ou ''Sortie'' svp", , "Saisie invalide"
            GoTo retourArriereBis
        Else
RetourArriereTer:
            z = InputBox("Veuillez saisir une quantité" _
            & Chr(13) & Chr(13) & "Puis la vérifier", "Saisie quantité plaquettes")
            If z = "" Then Exit Sub

            If z < 1 Then
                MsgBox "Veuillez saisir un nombre plus grand que 0 svp", , "Saisie invalide"
                GoTo RetourArriereTer
            Else
                'Suite de ta macro si tout est ok...
            End If
        End If
    End If
Les Val ne servent pas dans ce cas.

À tester.

Sur ce, bonne nuit à tous :cool:
 
Dernière édition:

bbb38

XLDnaute Accro
Re : VBA Besoin d’aide pour création d’un code.

Bonjour Michoulu, le forum,
Si j’ai bien compris ta demande, (personnellement difficile sans fichier d’exemple), je te propose un début de suggestion à l’aide d’une boîte de dialogue.
Cordialement,
Bernard

Bonjour Hulk,
Je viens de voir ton code. Je vais l’étudier car j’ignorai cette méthode. Sincères salutations.
 

Pièces jointes

  • Michoulu.xlsm
    18.7 KB · Affichages: 59
Dernière édition:

michoulu

XLDnaute Nouveau
Re : VBA Besoin d’aide pour création d’un code.

Bonjour à tout les 2 et merci pour vos réponses.

Vous avez tout les 2 cerné mon problème c'est exactement ce que je voulais :eek:

Je préfère utiliser la boite de dialogue de bbb38 car elle donne un aperçu global et offre un seul clic donc moins de chance de se gourer et plus facile à modifier en cas de fausse saisie :).

Ton code Hulk fonctionne parfaitement également , tu n'est pas un Avengers pour rien, tu es immortel ;)

Vous pouvez à présent me dire comment faire pour que la macro remplit la cellule de mon choix du tableau ci joint en fonction des données de la boite de dialogue ?

Merci d'avance mes héros :cool:
 

Pièces jointes

  • Feuille source Stock.xlsx
    134.6 KB · Affichages: 56
Dernière édition:

bbb38

XLDnaute Accro
Re : VBA Besoin d’aide pour création d’un code.

Bonjour Michoulu, le forum,
Un début de solution. Je me suis permis de rectifier la feuille semaine, pour effectuer une copie strictement identique pour les autres semaines.
Le test est effectué sur trois semaines. D’autres contrôles seraient nécessaires : exemple : sur le montant des quantités, etc…, sans compter les améliorations à apporter.
Cordialement,
Bernard
 

Pièces jointes

  • Feuille source Stock.xlsm
    201 KB · Affichages: 49

michoulu

XLDnaute Nouveau
Re : VBA Besoin d’aide pour création d’un code.

Bonjour Michoulu, le forum,
Un début de solution. Je me suis permis de rectifier la feuille semaine, pour effectuer une copie strictement identique pour les autres semaines.
Le test est effectué sur trois semaines. D’autres contrôles seraient nécessaires : exemple : sur le montant des quantités, etc…, sans compter les améliorations à apporter.
Cordialement,
Bernard

Merci beaucoup !! Je ne sais pas comment te remercier c'est exactement ce que je voulais !!

Merci d'avoir pris le temps tout le monde ne le ferais pas :eek: :D

Un petit génie ;)

Une question juste si tu as 2 minutes à minuit ou 1h du matin :)cool:) :

Les feuilles doivent être toutes identiques ? (S1 à S52 ?) car 2 colonnes seraient à virer sinon pas grave ...

Pour la somme d'une cellule il faut rajouter une ligne du style ...:confused::confused::confused:

Si Valeur de la cellule est différente de 0 alors montant = valeur cellule + montant valable pour tout le classeur.

If ... <> 0 then
... = ... + ...

avec ... texte à définir :confused::confused::confused:


Merci encore :D

C'est un très bon forum actif et les gens sont ... généreux.
 

bbb38

XLDnaute Accro
Re : VBA Besoin d’aide pour création d’un code.

Bonjour Michoulu, le forum,
Peux-tu m’indiquer les lettres des 2 colonnes à supprimer ? (personnellement, je supprimerai la colonne A et je décalerai les colonnes H et I en fin de tableau). Si tu ne peux pas supprimer les colonnes souhaitées, tu as la possibilité de les masquer.
Je t’adresserai le fichier rectifié avec la modification pour les quantités.
Cordialement,
Bernard
P.S. Merci pour ton dernier message.
 

michoulu

XLDnaute Nouveau
Re : VBA Besoin d’aide pour création d’un code.

Salut Bernard,

j'ai ajouté des sous boites de dialogue pour correspondre à ce que j'attendais.

Tu verra les modifs dans le développeur, j'ai 2-3 petites choses que j'ai du mal à mettre en place :

- Le bouton Choix liste ne me donne pas la liste des plaquettes de la feuille "Bases"
- Le mouvement Entrée - Sortie est absent pour l'instant


Je n'ai pas bien compris pourquoi les semaines 1 à 3 et non 1 à 5 apparaissait dans ta feuille source :confused:
Enfin comment globaliser ton code à 53 feuilles du classeur :confused:

Dans la nouvelle boite de dialogue je ne met pas le jour et la semaine car ils doivent se sélectionner automatiquement (feuille pour la semaine, colonne pour le jour).

Avec ce code, Excel indique en feuille Bases le jour et la semaine:

Code:
Sub semaine_en_cours()

Dim prem_date As Single
Dim nb_date_annee As Date
Dim num_semaine As Integer
Dim nJour As Integer
Dim Jour As String

'Définition du Jour de La Semaine

nJour = Weekday(Now, vbMonday)

If nJour = 1 Then
Jour = "Lundi"
Else
    If nJour = 2 Then
    Jour = "Mardi"
    Else
        If nJour = 3 Then
        Jour = "Mercredi"
        Else
            If nJour = 4 Then
            Jour = "Jeudi"
            Else
                If nJour = 5 Then
                Jour = "Vendredi"
                Else
                    If nJour = 6 Then
                    Jour = "Samedi"
                    Else
                        If nJour = 7 Then
                        Jour = "Dimanche"
                        End If
                    End If
                End If
            End If
        End If
    End If
End If

Worksheets("Menu").Cells(4, 4).Value = Jour

'Définition du Numéro de Semaine

nb_date_annee = DateValue("1 janvier " & (Year(Date)))
prem_date = nb_date_annee
num_semaine = Abs(Date - prem_date) / 7

Range("d5").Value = "Semaine " & num_semaine

End Sub

Voila si tu as quelques idées et surtout le temps je t'offre mon classeur ci joint.

Ne pas oublier de dormir néanmoins :cool: :p

Merci d'avance !
 

Pièces jointes

  • Feuille source Stock Plaquettes V3.xlsm
    206.8 KB · Affichages: 42

bbb38

XLDnaute Accro
Re : VBA Besoin d’aide pour création d’un code.

Bonjour Michoulu, le forum,
Sur le fichier ci-joint, j’ai effectué la modification pour les quantités (si j’ai bien compris ta demande), à savoir : inscription des quantités représentant le montant figurant dans la cellule + le montant indiqué sur l’Userform (discussion no.6)
J’ai regardé ton fichier avec ta présentation pour modifier la macro, mais j’aurai besoin de quelques renseignements :
As-tu abandonné la suppression des 2 colonnes ?
Le nombre de plaquettes va-t-il évolué (je suppose que « oui ») ?
Tu désires que la semaine et le jour de la semaine soient sélectionnés automatiquement, ce qui suppose que tous les mouvements doivent être saisis le jour considéré. Comment effectuer des modifications sur les jours précédents ? (en cas d’erreur dans la saisie d’un mouvement (erreur sur le mouvement, ou sur la quantité).
Dans mon fichier, j’ai recopié 5 feuilles, mais dans la macro je n’avais mis que 3 semaines, soit 3 feuilles. On peut réaliser un code pour créer les 53 feuilles.
Cordialement,
Bernard
 

Pièces jointes

  • Feuille source Stock v1.xlsm
    200.3 KB · Affichages: 42

michoulu

XLDnaute Nouveau
Re : VBA Besoin d’aide pour création d’un code.

Salut Bernard,

Merci pour ta réponse journalière qui fait plaisir ;)

J'ai abandonné la suppression des 2 colonnes si c'est trop compliqué à mettre en place sinon c'est encore faisable je ne sais pas pour le moment.

Les modifications peuvent être effectuées depuis l'onglet consultation ou en cliquant sur quitter, pourquoi pas ...

Le nombre de plaquettes dans le fichier Bases augmente chaque semaine je confirme mais est actuellement à 150 environ donc dans 80 semaines il sera à 227.

As tu regardé un peu la boite de dialogue que j'ai tenté de réaliser hier toute la journée? :rolleyes::eek:
 
Dernière édition:

bbb38

XLDnaute Accro
Re : VBA Besoin d’aide pour création d’un code.

Bonjour Michoulu, le forum,
Sur le fichier ci-joint, j’ai effectué des modifications en essayant de conserver tes boites de dialogue. J’ai bloqué le nombre de plaquettes à 1000, mais tu peux l’augmenter à condition de modifier le code.
Pour la suppression des 2 colonnes, j’attends ta décision.
Il me semble que le numéro de la semaine ne change pas.
Cordialement,
Bernard
 

Pièces jointes

  • Feuille source Stock V2.xlsm
    209.9 KB · Affichages: 47

michoulu

XLDnaute Nouveau
Re : VBA Besoin d’aide pour création d’un code.

Coucou bbb38,

j'ai réussi à trouver entre temps un code pour afficher toutes les plaquettes.

mais supposons que certaines cellules soient vides, comment faire pour que la listbox ne laisse pas des blancs ?

Exemple :

Au lieu d'avoir dans la colonne :

PLAQUETTE 1
PLAQUETTE 2
PLAQUETTE 3
PLAQUETTE 4
PLAQUETTE 5
PLAQUETTE 6
PLAQUETTE 7
PLAQUETTE 8


Il y a uniquement :

vide
vide
vide
vide
vide
vide
PLAQUETTE 7
PLAQUETTE 8

la listbox affiche des cases vides au lieu de passer directement à la plaquette 7 tu vois un peu ce que je veux dire :) ?

la listbox se met à jour selon les saisies des cellules en feuille Bases c'est déjà une très bonne chose :)

c'est du bon boulot tout ça ;)


encore merci :)
 

michoulu

XLDnaute Nouveau
Re : VBA Besoin d’aide pour création d’un code.

Yeah :cool: Super !

Le programme progresse grâce au forum, mes erreurs de débutant sont nombreuses ... enfin bref.

Je vais à présent présenter le code que je propose pour sélectionner automatiquement la semaine, le jour (merci de me dire si le code est bon) :


Code:
Dim feuille as worksheet, jour, mvt, col as string
For Each feuille In Worksheets
    If feuille.Name = Cells(4,8) in worksheet ("Bases") Then
      feuille.Activate
    End If
  Next
' une fois la feuille choisie j'affecte mes choix pour la bonne cellule :
jour = Cells (3,8) 'la cellule H3 indique Lundi, Mardi ... à l'aide d'une macro crée qui s'exécute au démarrage...
  If jour = "Lundi" And mvt = "Sortie" Then col = 9 in worksheet.activate
  If jour = "Lundi" And mvt = "Entrée" Then col = 10 in worksheet.activate
  If jour = "Mardi" And mvt = "Sortie" Then col = 12 in worksheet.activate
  If jour = "Mardi" And mvt = "Entrée" Then col = 13 in worksheet.activate
  If jour = "Mercredi" And mvt = "Sortie" Then col = 15 in worksheet.activate
  If jour = "Mercredi" And mvt = "Entrée" Then col = 16 in worksheet.activate
  If jour = "Jeudi" And mvt = "Sortie" Then col = 18 in worksheet.activate
  If jour = "Jeudi" And mvt = "Entrée" Then col = 19 in worksheet.activate
  If jour = "Vendredi" And mvt = "Sortie" Then col = 21 in worksheet.activate
  If jour = "Vendredi" And mvt = "Entrée" Then col = 22 in worksheet.activate
  If jour = "Samedi" And mvt = "Sortie" Then col = 24 in worksheet.activate
  If jour = "Samedi" And mvt = "Entrée" Then col = 25 in worksheet.activate

' suivi du code déjà existant :

 'No de la ligne
  For j = 10 To 200
    xrefplaqcol = Range("C" & j).Value
      If xrefplaqchoix = xrefplaqcol Then
        xlgn = j
        xqtesexist = Cells(xlgn, xcol).Value
        xqtesnouv = xqtesexist + xqtes
        Cells(xlgn, xcol).Value = xqtesnouv
        Exit For
      End If
 

Discussions similaires

Réponses
5
Affichages
1 K