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.
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
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!
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+
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 !