Ajouter du texte selon deux boutons dans un Userform
Bonjour,
Lorsque le code "406" est ajouté à la colonne "CODE" dans mon fichier, j'ai programmé une macro qui fait apparaître un userform permettant de choisir entre deux transporteurs.
Toutefois, je n'arrive pas à programmer la Macro qui permettrait d'ajouter à la colonne "COMMENTAIRES" de mon fichier le nom du transporteur voulu en fonction du choix fait sur l'Userform. Si on clique sur UPS, cela inscrit "Transporteur est UPS" dans la colonne commentaires... et vice versa pour DHL.
Je vous joins mon fichier de test
Je vous remercie par avance pour votre aide
Baptiste.
Bonjour,
ton userform se déclenche quand tu valides 406 dans une cellule …. ce qui veut dire que la cellule active sera celle du dessous.
Ton code vba doit donc chercher la ligne active et retirer 1. ensuite écrire sur cette ligne en colonne 13.
Nota si un utilisateur clic sur une autre case avant de cliquer sur le nom du transporteur alors l'info n'ira pas dans ligne et colonne voulue.
Bonjour Xmenpl
Merci pour ton aide !
Je me permets deux petits questions :
- Lorsque nous remplissions le fichier nous utilisons les flèches directionnelles pour se déplacer de gauche à droite une fois qu'une nouvelle ligne est créée (avec le bouton nouvelle fiche). Actuellement le nom du transporteur apparaît dans la colonne commentaire uniquement lorsque l'utilisateur fait "entrer" après avoir indiqué "406". Est-il possible de modifier la macro pour que cela fonctionne également avec les flèches directionnelles ?
Nota si un utilisateur clic sur une autre case avant de cliquer sur le nom du transporteur alors l'info n'ira pas dans ligne et colonne voulue.
Il y a pas un moyen d'avoir l'userform au premier plan sans possibilité de toucher aux autres cellules ?
Il me semble que c'est ainsi que se comporte les msgbox.
(J'ai réparé le bouton "nouvelle fiche" qui ne fonctionnait pas.)
Merci encore pour ton aide.
Baptiste
Rebonjour
Comme suite à ton message sur la réparation du bouton nouvelle fiche ; je vois deux solutions :
1ère solution si la personne utilise la flèche pour passer dans la colonne suivant alors il reste sur la même ligne donc
le -1 dans le code VBA ne sert plus.
Private Sub CommandButton1_Click()
X = ActiveCell.Row
Worksheets("Suivi commandes").Cells(X, 13).Value = "Transporteur D.H.L"
Unload Me
End Sub
Private Sub CommandButton2_Click()
X = ActiveCell.Row
Worksheets("Suivi commandes").Cells(X, 13).Value = "Transporteur U.P.S"
Unload Me
End Sub
2ème solution j'imagine que les cellules sont renseignées juste aprés avoir cliqué sur le bouton nouvelle ligne ?
dans ce cas ta macro insére une ligne donc la ligne de saisie en cours est toujours la ligne trois.
On peut alors remplacer le X par 3 dans le code ci-dessus.
La dernière solution tu crées un Userform indépendant de ta feuille avec la totalité des informations à saisir et un bouton
Valider pour alimenter ton tableau.
Re-bonjour
J'ai effectué les modifications que tu m'as indiqué et cela fonctionne parfaitement. Notamment car la plupart du temps nous faisons ainsi :
2ème solution j'imagine que les cellules sont renseignées juste aprés avoir cliqué sur le bouton nouvelle ligne ?
Je me suis dis que pour éviter tout problème, on pourrait délimiter à la ligne 3 uniquement l'exécution de l'userform lorsque la valeur entrée est 406 dans la colonne G. J''ai essayé de bidouiller de la façon suivante mon code mais j'ai toujours l'userform qui apparaît pour les autres lignes ...
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("E3") Then
If Target.Value = 406 Then
UserFormBM.Show
End If
End If
If Target.Column = 7 And Target.Count = 1 Then
If Target.Value >= 404 And Target.Value <= 499 Then
40 Target.Offset(0, 1).Value = Feuil3.Range("A1:B78").Find(Target.Value).Offset(0, 1).Value
End If
End If
If Target.Column = 9 And Target.Count = 1 Then
If Target.Value = "24H" Then
Target.Offset(0, 1).Value = Target.Offset(0, -8).Value + 1
ElseIf Target.Value = "72H" Then
Target.Offset(0, 1).Value = Target.Offset(0, -8).Value + 3
ElseIf Target.Value = "96H" Then
Target.Offset(0, 1).Value = Target.Offset(0, -8).Value + 4
ElseIf Target.Value = "" Then
Target.Offset(0, 1).Value = ""
End If
End If
Application.ScreenUpdating = False
Call MFC
'Target.Activate 'ne pas activer / retour à la cellule précédente
End Sub
Encore merci pour ton aide
Baptiste.
Si tu limites à la ligne 3 cela revient à limiter à la valeur qui sera saisie en G3
Dans ce cas plus besoin d'un target
If Target.Value = 406 Then
UserFormBM.Show
End If
Ce sera plutôt
If Range("G3").Value = 406 Then
UserFormBM.Show
End If
Super ça fonctionne
Du coup j'imagine que peux aussi enlever la ligne suivante :
X = ActiveCell.Row
Au code de l'userform ?
Private Sub CommandButton1_Click()
X = ActiveCell.Row
Worksheets("Suivi commandes").Cells(3, 13).Value = "Transporteur D.H.L"
Unload Me
End Sub
Private Sub CommandButton2_Click()
X = ActiveCell.Row
Worksheets("Suivi commandes").Cells(3, 13).Value = "Transporteur U.P.S"
Unload Me
End Sub
EDIT: j'ai testé entre temps et ça fonctionne en retirant ce bout de code.
Un seul mot, MERCI
Baptiste.
En effet mais tu pouvais aussi
écrire X=3 cela t'évitait de modifier toutes les lignes suivantes.