Supprimer une ligne existante pas une recherche V

Fermé
batou25 - 30 mars 2015 à 18:37
 Baptou - 1 avril 2015 à 08:44
Bonjour,

Je suis sur un fichier Excel et je n'arrive pas à m'en sortir. J'ai 3 feuilles sur mon classeur.

Le premier feuillet correspond à un bon de livraison avec un certain nombre de données qui s'incrémentent automatiquement dans des champs par des boites de dialogues. Ces données proviennent du feuillet n°2. Le point d'entrée de recherche est l'article acheté.

Des boites de dialogues me demandent le code article les quantités et les prix. Puis Excel va chercher les données nécessaires au remplissage du BL dans le second feuillet dont ces données ont été saisies en amont.

Le moment où je bloque est le moment où je dois enlever la ligne correspondant à l'article sur le feuillet 2. Lorsque le point d'entrée a été mis sur un BL. On "solde" ou on archive cette ligne. Je veux que cette ligne se coupe et colle sur un troisième feuillet. De plus il faut que certaines cases se remplissent en automatique.

Il faut donc une recherche V pour retrouver et couper collé la ligne que l'on souhaite, depuis le point d'entrée du bon de livraison.

Avez-vous bien compris mon problème ?

Merci d'avance de vos réponses.

4 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
30 mars 2015 à 19:41
bonsoir Batou, bonsoir le forum,

"Des boites de dialogues me demandent le code article les quantités et les prix. Puis Excel va chercher les données nécessaires au remplissage du BL dans le second feuillet dont ces données ont été saisies en amont."

C'est à ce moment qu'il faut stocker dans une variable le numéro de ligne correspondant (ou utiliser un tableau de variables si plusieurs lignes) et ensuite utiliser cette variable (ou ce tableau de variables) pour le couper/coller. Mais sans le fichier qui va avec, difficile de t'aider davantage...
0
Je vous envoie ci-joint un fichier Excel qui ressemble à mon fichier que je ne peux mettre en ligne (Propriété d'entreprise).

Alors en fait quand je fais un retour, et que je fais ma fiche de retour, je souhaiterais que la ligne de l'article retournée soit suprimé de la feuille 2 et qu'elle s'incrémente avec d'autre donné remplis en manuel sur la feuille 1. De plus je voudrais faire une vérif pour que si le code article apparait sur la feuille 3 alors pas possible d'aller plus loin sur la boite de dialogue.

Je ne sais pas si je me fais comprendre. En tout cas merci de ta réponse rapide.
Par contre peux tu me dire comment t'envoyer le fichier?
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
30 mars 2015 à 22:07
Bonsoir Batou, bonsoir le forum,

Pour le fichier voir : https://www.cjoint.com/
0
Merci pour le lien. Voici le lien vers mon fichier Excel : dans l'idée c'est la même façon de faire que mon vrai fichier, mais en plus simple.

Par contre faire attention avec ce fichier si la macro ne marche pas il faut ouvrir le feuillet deux et normalement c'est bon.

http://www.cjoint.com/15ma/ECFizYLG69D.htm

Merci.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
31 mars 2015 à 22:03
Bonsoir Batou, bonsoir le forum,

Désolé pour le retard... En pièce jointe ton fichier modifié avec le code commenté. J'ai utilisé une UserForm pour gérer les données avec le code ci-dessous :

Private O1 As Worksheet 'déclare la variable O1 (Onglet 1)
Private O2 As Worksheet 'déclare la variable O2 (Onglet 2)
Private O3 As Worksheet 'déclare la variable O3 (Onglet 3)
Private LI As Integer 'déclare la variable LI (LIgne)

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)

Set O1 = Sheets("Feuil1 BL") 'définit l'onglet O1
Set O2 = Sheets("Feuil2 Articles achetés") 'définit l'onglet O2
Set O3 = Sheets("Feuil3 Articles retour fourniss") 'définit l'onglet O3
DL = O2.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O2
Me.ComboBox1.List = O2.Range("A2:A" & DL).Value 'alimente la ComboBox1
End Sub

Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
LI = Me.ComboBox1.ListIndex + 2 'définit la ligne LI
For I = 1 To 7 'boucle sur les 7 premières textboxes
    'récupère la valeur de la cellule ligne LI, colonne I + 1 de l'onglet O2 dans la textbox(I)
    Me.Controls("TextBox" & I).Value = O2.Cells(LI, I + 1)
Next I 'prochaie textbox de la boucle
Me.TextBox8.SetFocus 'place le curseur dan sla TextBox8 (Motif du Retour)
Me.TextBox9.Value = O2.Cells(LI, 5) 'place la Quantité Réceptionnée par défaut dans la TextBox9 (Quantuté Retournée)
Me.TextBox10.Value = Date 'renvoie la date du jour par défaut dans la Textbox10
End Sub

Private Sub CommandButton1_Click() 'bouton "Valider"
Dim LD As Integer 'déclare la variable LD (Ligne de Dstination)
Dim I As Byte 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)

'définit la ligne de destination LD (première ligne vide) de la colonne 1 (=A) de l'onglet O3
LD = O3.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1
O1.Cells(1, 2).Value = O1.Cells(1, 2).Value + 1 'incrémente la valeur de la cellule B1 de l'onglet O1
O1.Cells(3, 2).Value = Me.ComboBox1.Value 'renvoie le code article dans la cellule B3 de l'onglet O1
J = 5 'dinitialsie la variable J
For I = 1 To 10 'boucle sur les dis textboxes
    'renvoie dans la cellule ligne J, colonne 2 de l'onglet O1 la valeur de la TextBox (I)
   O1.Cells(J, 2).Value = Me.Controls("TextBox" & I).Value
   J = J + 2 'redéfinit la variable J
Next I 'prochaine textbox de la boucle
O3.Cells(LD, 1).Value = O1.Cells(3, 2) 'renvoie le code Article dans l'onglet O3
O3.Cells(LD, 2).Value = O1.Cells(5, 2) 'renvoie le Libéllé Article dans l'onglet O3
O3.Cells(LD, 3).Value = O1.Cells(7, 2) 'renvoie le Fournisseur dans l'onglet O3
O3.Cells(LD, 4).Value = O1.Cells(11, 2) 'renvoie la Quantité réceptionnée dans l'onglet O3
O3.Cells(LD, 5).Value = O1.Cells(17, 2) 'renvoie le Numéro de Commande dans l'onglet O3
O3.Cells(LD, 6).Value = O1.Cells(19, 2) 'renvoie le Motif dans l'onglet O3
O3.Cells(LD, 7).Value = O1.Cells(21, 2) 'renvoie la Quantité Retournée dans l'onglet O3
O3.Cells(LD, 8).Value = O1.Cells(23, 2) 'renvoie la Date du Retour dans l'onglet O3
O2.Rows(LI).Delete 'dpprime la ligne Li de l'onglet O2
Unload Me 'vide et ferme l'UserForm
End Sub

Private Sub CommandButton2_Click() 'bouton "Annuler"
Unload Me 'vide et ferme l'UserForm
End Sub


Le fichier :
https://www.cjoint.com/c/ECFwm5lSmBz

0
Merci cela marche. Merci pour ton temps.

Bye
0