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 Sub

si 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 Sub

Salut 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

LOOP

A 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 Sub

Re, oui je pense que j'ai fais une erreur quelque part, merci beaucoup cela fonctionne !!

Rechercher des sujets similaires à "modifier lignes"