Création d'un bon de commande

Pour le numéro du bon, il suffit juste de modifier la ligne du code de Feuil1, comme ceci :

Target.Value = Format(Date, "yy") & Format(Date, "mm") & Format(dernier_numéro_bon.Value + 1, "000")

Sinon comment revenir en arrière du N° de bon en cas de faute de frappe ou d'annulation de l'impression,

via la touche F10, le numéro de séquence est rectifiable.

ce N° ne peut-il pas ce mettre automatiquement lorsque l'on appui sur impression ?

Il me semble que le mieux est d'abord d'afficher le numéro lors de la saisie et ensuite de valider l'incrémentation du numéro de séquence au lancement de impression (code modifié dans ce sens)

Pour l'archivage, je ne sais pas ce qui est possible physiquement de faire avec excel ? La encore, est-ce que le fait de cliquer sur impression peut incrémenter une ligne dans une autre feuille du classeur excel ? Il suffirai de se rendre alors sur cette feuille et de cliquer sur cette ligne pour ouvrir l'archive ?

Le plus simple est d'archiver en PDF sous "BON" + numéro de bon, dans le même répertoire que celui où se trouve le bon de commande (code modifié dans ce sens, en supposant que le numéro de bon se trouve dans la cellule N2)

ci-joint nouvelle version (code associé à Thisworkbook)

Salut Thev,

Tout est bien recopier mais je rencontre un petit problème pour le numéro de bon.

celui-ci est en cellule "C5" donc Range ("N5") .Address Then,

moi j'ai besoin que cette cellule "C5" soit fusionnée avec les 2 suivantes qui sont "O et P"

donc j'ai modifié comme suit: Range ("N5:P5) .Address Then mais cela ne fonctionne pas !

Retour en image de ce probléme

J'ai en premier la boite "erreur 424 visual basic" et après avoir cliqué sur débogage j'ai le visual basic avec la ligne jaune ?

Merci

debog ligne jaune

Il faut créer sur Feuil1, le contrôle TextBox contenant le dernier numéro de bon.

1- menu Développeur --> insertion --> contrôles ActiveX

2- sélectionner zone de texte et l'installer à côté des cellules N5 à P5

3- sélectionner le contrôle et cliquer sur propriétés dans le menu Développeur

4- dans la fenêtre Propriétés du contrôle,

a) remplacer dans (Name), Textbox1 par dernier_numéro_bon

b) mettre Visible = False

5- passer au mode normal en cliquant sur Mode Création dans le menu Développeur.

Supprimer l'instruction

dernier_numéro_bon.Value = dernier_numéro_bon.Value + 1

car elle a été reportée dans la procédure avant impression (code Thisworkbook)

Thev

OK c'est nickel, tes travaux ce mettent en place tranquillement dans mon tableau de bon de commande. J'en profites pour faire les dernières mise ne forme et tests une fois que les cellules sont verrouillées ou non !

Dis moi au passage, comment faire en sorte qu'une info s'affiche au passage de la souris sur cette cellule ?

Merci

samybot86 a écrit :

Dis moi au passage, comment faire en sorte qu'une info s'affiche au passage de la souris sur cette cellule ?

de quelle cellule s'agit-il ?

Thev,

Peux importe la cellule, je pense qu'avec un exemple sur la cellule de ton choix que je saurais lire le code et le reproduire le cas échéant sur mes cellules concernées.

Ensuite je suis sur une mise en forme forcée MAJUSCULE pour certaines cellules (c'est à dire que même si une personne écrit en minuscule sans activer la touche 'VerrMaj' du clavier, sa saisie apparaitra en majuscule dans la cellule sélectionnée) , j'ai ce code ci-dessous que je place dans ThisWorkbook

"Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)

Target = UCase(Target)

End Sub"

Seulement, j'ai cru comprendre qu'à cet emplacement, ce code prenait en compte toutes les feuilles Excel du classeur. Hors moi je ne souhaiterais que quelques plages de cellules Excel de la feuille 1 uniquement.

Code à mettre dans la feuille 1, mais comment pour selection de plages de cellules concernées ?

Merci

Il suffit de mettre ce code dans la feuille 1 (par exemple pour les cellules A1, A3 et B5

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("A1,A3,B5")) Is Nothing Then
      Target = UCase(Target)
    End If

End Sub

Pour qu'une info s'affiche dans une cellule de la Feuille1, puis disparaisse, voici une solution par exemple pour la cellule A1

Dim Target_old As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Target_old Is Nothing Then Target_old.Comment.Delete: Set Target_old = Nothing
    If Target.Address = Range("A1").Address Then
        Set Target_old = Target
        Target.AddComment "INFO CELLULE"
    End If

Thev,

le code est mis a jour mais il me faut recliquer sur cette cellule pour que cela bascule en majuscule, j'au rai souhaité que cela bascule sur la touche entrée

Pas bien compris.

Peux-tu décrire la séquence des opérations sur la cellule avec l'identification de cette cellule.

1-sélection cellule ??

2- contrôle cellule ?

3- info cellule ?

4- conversion majuscule ?

thev a écrit :

Pas bien compris.

Peux-tu décrire la séquence des opérations sur la cellule avec l'identification de cette cellule.

1-sélection cellule ??

2- contrôle cellule ?

3- info cellule ?

4- conversion majuscule ?

Thev,

Apres essai "info cellule", je me suis aperçu que cela revenais exactement à la même chose que d'insérer un commentaire. Donc je te remercie mais je vais laisser tombé ce travail d'info cellule qui au bout du compte ne sers pas à grand chose. A retenir pour les fois suivante...

J'ai bien copier ton code pour la mise forcée des cellules en MAJUSCULE. Cela fonctionne uniquement après devoir recliqué sur cette même cellule, j'explique:

je rentre par exemple dans la cellule "A1" "pierrot" et j'appui sur ENTREE, la sélection bascule sur la cellule "A2" mais "pierrot reste en minuscule.

Il faut que je sélectionne de nouveau le cellule "A1" pour que "pierrot" bascule automatiquement en "PIERROT".

Si tu peux me rendre cette bascule automatiquement en MAJUSCULE, se serait beaucoup mieux

Merci

tu n'as pas dû mettre le code correspondant sous le bon événement

Private Sub Worksheet_Change(ByVal Target As Range)

et non

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Pour l'info de la cellule, je me suis effectivement servi du commentaire sauf que ce commentaire n'est que temporaire.

Thev,

Début d'utilisation de ce nouveau bon de commande et premier couac dans l'utilisation de l'horaire. Il s'avère qu'il est impossible de renseigner les horaires de 14h... à 19h59 ?

Peux tu regarder la macro et voir le problème ? Par contre de 20h00 à 23h59 cela fonctionne très bien comme de 00h01 à 13h59.

Merci

Thev,

Pour la macro horaire, c'est résolu en supprimant "case 1" dans le code du VBA les choses sont rentré dans l'ordre.

Le projet à bien pris forme et touche à sa fin avec sa mise en ligne aujourd'hui pour voir les remontés des quelques couac.

Par contre, je n'ai rien compris sur l'archivage: comment il se fait ou peux se faire et ou s'enregistre t-il ?

Merci beaucoup

Bien pour la résolution du Bug sur le contrôle horaire. C'est noté.

L'archivage se fait dans le répertoire où se trouve ton classeur, les bons de commandes sont enregistrés en PDF. Il est situé dans la procédure évènementielle (BeforePrint) de ThisWorkBook.

Thev,

C'est noté pour l'emplacement de l'archivage, par contre je reste sur ma mise forcée en majuscule d'une plage de cellule comme expliqué précédemment sur un message avec mon exemple de "pierrot".

Tu peux résoudre çà stp, je te copie mon code:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect(Target, Range("B45,B46,B47,B48,B49,B51,B52,B53,B54,B55,B57,B58,B59,B60,B61,B62,B63,B64,B65,B66,B67,B68,B69,B70,B71,B72,B73,B74,B75,B76,B77,B78,B79,B80,B81,B82,B83,B85,B86")) Is Nothing Then
 Target = UCase(Target)
  End If
End Sub

Merci

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("B45:,B86")) Is Nothing Then

Target = UCase(Target)

End If

End Sub

Range("B45:,B86") est beaucoup plus simple et équivaut à

range("B45,B46,B47,B48,B49,B51,B52,B53,B54,B55,B57,B58,B59,B60,B61,B62,B63,B64,B65,B66,B67,B68,B69,B70,B71,B72,B73,B74,B75,B76,B77,B78,B79,B80,B81,B82,B83,B85,B86")

je sais Thev, mais dans ("B45:B86") il y a 2 cellules que ne doivent pas être concernées...

Mais là, tu me donne juste un raccourci du code, pas la résolution au probléme ?

La résolution du problème est de mettre ton code dans la procédure liée à l'événement Worksheet_Change (et non pas dans celle liée à Worksheet_SelectionChange) , soit

Private Sub Worksheet_Change(ByVal Target As Range)
       ton code ....
End Sub

Range("B45:,B49,B51:B83,B85,B86") est beaucoup plus simple et équivaut à

range("B45,B46,B47,B48,B49,B51,B52,B53,B54,B55,B57,B58,B59,B60,B61,B62,B63,B64,B65,B66,B67,B68,B69,B70,B71,B72,B73,B74,B75,B76,B77,B78,B79,B80,B81,B82,B83,B85,B86

Rechercher des sujets similaires à "creation bon commande"