VBA - Macro recherche et remplacer ligne X

Bonjour,

Je cherche à créer une macro afin de remplacer les informations d'une réservation présente dans une base de données.

L'onglet modification de réservation me permet de retrouver les informations et de les modifier si nécessaires.

La macro doit remplacer la ligne dans la base de donnée, et remettre les recherche V dans l'onglet de modifications.

La partie remettre les recherche V marche, en revanche la macro me dit à chaque fois qu'il ne trouve pas la réservation...

De plus je ne suis pas sur de l'écriture pour coller dans la ligne particulière (la ligne correspondant au numéro de réservation.)

Ci-joint le fichier avec la macro.

Avez-vous une solution pour moi ?

Merci pour votre aide.

97classeur1.xlsm (72.48 Ko)

Bonjour,

juste un coup d’œil sur ton code permet de voir que ton "Next i" est au mauvais endroit !

de plus, je rajouterai un "Exit for" à la fin de ta condition "si vrai" pour eviter une répétition de Msgbox inutile !

A plus

Bonjour et merci de ta réponse rapide

Cependant, je suis novice sur VBA, j'ai essayé d'écrire la macro en m'aidant d'une macro trouvé sur internet. Je ne sait pas vraiment où mettre le Next i, ainsi que le Exit for.

De plus, pense tu que le reste de la macro est correct ?

Etant donné que tu as surement utilisé l'enregistreur de macro, il y a forcément des lignes inutiles.

J'ai effectué quelques changements pour alléger la macro.

A plus

166classeur1-2.xlsm (74.83 Ko)

Merci beaucoup c'est exactement ce que je recherche à un petit détails.

Par exemple pour la réservation 9, il me dit 8x que la réservation n'existe pas car il interroge par exemple la ligne de la réservation 1 et donc conclus que ma conditions if est fausse. Est-il possible de lui dire de mettre le message une fois que la macro à interroge l'ensemble des ligne de la base de données ? En bref, qu'il indique le message seulement si la réservation n'est pas du tout présente dans la base de données.

Merci encore une fois.

Bonsoir Marco, Braters,

bonsoir le forum,

voici ma vision personnelle de ton fichier!

La vérification du n° de réservation se fait dès son encodage en [C5] avec avertissement en cas de dépassement et, dès lors, affichage forcé du dernier n° de réservation connu.

Le n° de ligne est sauvegardé en bout de ligne 1.

A mon sens, mais ça n'engage que moi, des formules n'ont que faire dans un module de modification... destiné à être modifié, donc, incluant des encodages directs dans les cellules = écrasement des formules!

Corollaire, simplification du problème et du codage.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim wks As Worksheet
Set wks = Worksheets("BDD2017C&O")
'
If Target.Address = [C5].Address Then
    Application.EnableEvents = False
    With wks
        iRow = .Range("A" & Rows.Count).End(xlUp).Row
        iFlag = 0
        For x = 2 To iRow
            If [C5] = .Cells(x, 1) Then
                iFlag = x
                Cells(1, Columns.Count) = x
                Exit For
            End If
        Next
        If iFlag = 0 Then
            MsgBox "La réservation " & [C5] & " n'existe pas!" & Chr(10) & "Le n° le plus élevé est le " & .Cells(iRow, 1)
            Cells(1, Columns.Count) = iRow
            [C5] = .Cells(iRow, 1)
            iFlag = iRow
        End If
        wks.Range("A" & iFlag & ":J" & iFlag).Copy Destination:=Range("B9:K9")
        wks.Range("K" & iFlag & ":T" & iFlag).Copy Destination:=Range("B12:K12")
    End With
    Application.EnableEvents = True
End If
'
End Sub

Public Sub Sauvegarder()
'
Dim wks As Worksheet
Set wks = Sheets("BDD2017C&O")
'
iRow = Cells(1, Columns.Count)
'
Range("B9:K9").Copy Destination:=wks.Range("A" & iRow & ":J" & iRow)
Range("B12:K12").Copy Destination:=wks.Range("K" & iRow & ":T" & iRow)
'
ActiveWorkbook.Save
'
MsgBox "Modification effectuée avec succès!"
'
End Sub

Comme l'a très bien compris Braters (salut Braters! ), le bouton 'Recherche' est supprimé, l'encodage du n° en [C5] suffisant largement à toute bonne macro pour s'en sortir comme une grande!

Cela dit, la désignation explicite de la feuille BDD2017 posera inévitablement un souci... en 2018! Il te faudra prévoir un nommage strict et calculable pour passer le nom de la feuille de recherche en variable et, ainsi, pérenniser la macro!

A tester, grandeur nature!

Bon travail!

A+

88reservations.xlsm (71.05 Ko)

Bonjour,

Merci pour ta réponse.

Ta version est super car elle nous dit que la réservation n'existe pas dès que l'on rentre le numéro dans le champs.

Cependant je souhaiterai rester sur la version précédente car elle est très simple à comprendre étant donnée que cet outils ne sera pas utilisé seulement par moi. De plus, lorsque l'on modifie une donnée dans une cellule et que l'on change de cellule pour en modifier une autre; la donnée initiale revient sur la première cellule.

Petite détails que je n'ai pas précisé les numéro de réservation sont dans le fichier une suite, cependant dans le fichier finale les numéro de réservation seront une série de Chiffre et Lettre avec aucun ordres précis. Donc l'infos du numéro le plus élevé ne sera pas intégrable dans ma version.

En revanche je garde ton outils sous le coude pour une amélioration future (quand je serais un peu plus expert de VBA).

Je te remercie encore pour l'aide précieuse, d'ailleurs sait-tu si à la version faite par Braters on peu ajouté un macro qui m'indique si le numéro de réservation existe ou non avant même d'appuyer sur modifier ?

Merci d'avance pour votre aide

Salut tou(te)s les deux,

Voilà j'ai rajouté le code qui empêche la répétition du message d'erreur, celui-ci apparaît au moment de la saisie du numéro de réservation comme curulis a eu l'idée.

Ensuite, pour le problème de l'année, si le format du nom de ta feuille ne change pas tu peux l'écrire comme ceci :

Dim Ws As Worksheet
Set Ws = Sheets("BDD" & Year(Date) & "C&O")

A plus !

138classeur1-2.xlsm (76.35 Ko)
Rechercher des sujets similaires à "vba macro recherche remplacer ligne"