Modifier plusieurs lignes
Bonjour le forum, une macro me permet de modifier une commande. Sauf qu'une commande contient plusieurs lignes et j'aimerai toutes les modifier en une seule fois et pour l'instant seule une ligne se modifier a chaque fois. Je joins le fichier. Merci d'avance.
Bonjour Vince-10, Exceleurs(es),
Dans ton code :
Sub recherche_N_commande()
Dim n_commande As String
Dim celluletrouvee As Range
Dim nom_entreprise As String
Dim n_ligne As Double
Dim AR_recu As String
Dim commande_reçue As String
Dim date_AR As Date
Dim date_livraison As Date
Dim date_livraison_recu As String
Dim nb_jour_avt_livraison As Date
Dim date_aujourdhui As Date
Dim couleurs As String
Dim n_article As String
Dim nb_article As Double
Dim modifier As String
n_commande = InputBox("Entrez le N° de commande recherché")
Set celluletrouvee = Range("A8:A1000").Find(n_commande, lookat:=xlWhole)
If celluletrouvee Is Nothing Then
MsgBox ("Pas de commande dans le fichier")
Else
n_ligne = celluletrouvee.Row
Range("A" & n_ligne).Select
modifier = InputBox("Voulez-vous modifier la ligne ? (Y pour oui, N pour non)")
If modifier = "Y" Then
AR_recu = InputBox("Accusé de réception reçu ? (Y pour oui, N pour non)")
Range("D" & n_ligne).Select
ActiveCell.FormulaR1C1 = AR_recu
If AR_recu = "Y" Or AR_recu = "y" Then
date_AR = InputBox("Entrez la date de l'accusé de réception")
Range("E" & n_ligne).Select
ActiveCell.FormulaR1C1 = date_AR
End If
comm_recu = InputBox("Envoi commande ? (Y pour oui, N pour non)")
Range("C" & n_ligne).Select
ActiveCell.FormulaR1C1 = comm_recu
If comm_recu = "Y" Or comm_recu = "y" Then
comm_recu = InputBox("Entrez la date d'envoi")
Range("D" & n_ligne).Select
ActiveCell.FormulaR1C1 = date_AR
End If
End If
End If
End Subsi tu veux modifier tous les lignes correspondant à n_commande, il te manque une boucle do while au remplissage.
mais comme tu affectes qu'une seule valeur à celluletrouvee, c'est normal qu'il te le fasse qu'une fois, soit tu transformes celluletrouvee en un tableau qui cherche tous les n_commande, quand tu veux remplir; for each cl in celluletrouvee tu remplis.
A te lire,
Cordiales.
Re, j'ai lu ton message mais je n'ai pas totalement compris l'histoire de la boucle .
Bonjour le fil, bonjour le forum,
Essaie comme ça :
Sub recherche_N_commande()
Dim n_commande As String
Dim CT As Range
Dim nom_entreprise As String
Dim n_ligne As Double
Dim AR_recu As String
Dim commande_reçue As String
Dim date_AR As Date
Dim date_livraison As Date
Dim date_livraison_recu As String
Dim nb_jour_avt_livraison As Date
Dim date_aujourdhui As Date
Dim couleurs As String
Dim n_article As String
Dim nb_article As Double
Dim modifier As String
Dim nl As Byte
n_commande = InputBox("Entrez le N° de commande recherché")
Set CT = Range("A8:A1000").Find(n_commande, lookat:=xlWhole)
If CT Is Nothing Then
MsgBox ("Pas de commande dans le fichier")
Exit Sub
Else
PA = CT.Address
n_ligne = CT.Row
Do
nl = CT.Offset(0, 1).Value
Set CT = Range("A8:A1000").FindNext(CT)
Loop While Not CT Is Nothing And CT.Address <> PA
End If
modifier = InputBox("Voulez-vous modifier la ou les lignes ? (Y pour oui, N pour non)")
If UCase(modifier) = "Y" Then
AR_recu = InputBox("Accusé de réception reçu ? (Y pour oui, N pour non)")
Range("D" & n_ligne).Resize(nl, 1).Value = UCase(AR_recu)
If UCase(AR_recu) = "Y" Then
date_AR = InputBox("Entrez la date de l'accusé de réception")
Range("E" & n_ligne).Resize(nl, 1).Value = date_AR
End If
comm_recu = InputBox("Envoi commande ? (Y pour oui, N pour non)")
Range("C" & n_ligne).Resize(nl, 1) = UCase(comm_recu)
If comm_recu = "Y" Or comm_recu = "y" Then
comm_recu = InputBox("Entrez la date d'envoi")
Range("D" & n_ligne).Resize(nl, 1).Value = date_AR
End If
End If
End SubSalut ThauThème, merci pour ton aide. Par contre, le code ne modifie qu'une ligne de la commande et non la commande entière..
Re,
Ha ! J'ai testé avec ton fichier et chez moi ça marche...
Re Vince-10, Exceleurs(es),
DO WHILE cells(i,1).value=n_commande and i<1000
I=I+1
if cells(i,1)=n_commande then
cells(i,3)=comm_recu
cells(i,4)=AR_recu
cells(i,5 )=date_AR
END IF
LOOPA tester
Re,
Tu t'étais un peu mélangé les pinceaux avec le colonnes il me semble et moi j'avais pas bien testé. Le code correct :
Sub recherche_N_commande()
Dim n_commande As String
Dim CT As Range
Dim nom_entreprise As String
Dim n_ligne As Double
Dim AR_recu As String
Dim commande_reçue As String
Dim date_AR As Date
Dim date_livraison As Date
Dim date_livraison_recu As String
Dim nb_jour_avt_livraison As Date
Dim date_aujourdhui As Date
Dim couleurs As String
Dim n_article As String
Dim nb_article As Double
Dim modifier As String
Dim nl As Byte
n_commande = InputBox("Entrez le N° de commande recherché")
Set CT = Range("A7:A1000").Find(n_commande, Range("A7"), lookat:=xlWhole)
If CT Is Nothing Then
MsgBox ("Pas de commande dans le fichier")
Exit Sub
Else
PA = CT.Address
n_ligne = CT.Row
Do
nl = CT.Offset(0, 1).Value
Set CT = Range("A8:A1000").FindNext(CT)
Loop While Not CT Is Nothing And CT.Address <> PA
End If
modifier = InputBox("Voulez-vous modifier la ou les lignes ? (Y pour oui, N pour non)")
If UCase(modifier) = "Y" Then
AR_recu = InputBox("Accusé de réception reçu ? (Y pour oui, N pour non)")
Range("E" & n_ligne).Resize(nl, 1).Value = UCase(AR_recu)
If UCase(AR_recu) = "Y" Then
date_AR = InputBox("Entrez la date de l'accusé de réception")
Range("F" & n_ligne).Resize(nl, 1).Value = date_AR
End If
comm_recu = InputBox("Envoi commande ? (Y pour oui, N pour non)")
Range("C" & n_ligne).Resize(nl, 1) = UCase(comm_recu)
If comm_recu = "Y" Or comm_recu = "y" Then
comm_recu = InputBox("Entrez la date d'envoi")
Range("D" & n_ligne).Resize(nl, 1).Value = comm_recu
End If
End If
End SubRe, oui je pense que j'ai fais une erreur quelque part, merci beaucoup cela fonctionne !!