Macro excel rechercher et remplacer une ligne

Résolu
alex141077 Messages postés 52 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Besoin d'un petit coup de main malgré mes recherche sur les forum.
Je ne comprends pas pourquoi mon code ne fonctionne pas.... alors je vais essayer d'expliquer au mieux mais je suis novice en la matière.

Fonctionnement du code:
Soit il crée une ligne sur la feuille "SuiviClient" avec le nom de l'onglet de la feuille active
Soit il recherche et modifie la ligne si le nom de l'onglet existe

Problemes:
1/Il ne trouve pas le nom de l'onglet s'il existe et ne le modifie pas
2/Il remplace la ligne existante par une autre ligne avec un nom d'onglet différent au lieu de passer sur la ligne suivante (Row + 1)

Je ne suis pas sur d'etre bien clair alors je mets le bout du code

Merci pour votre aide


Set WsDestination = Sheets("SuiviClient")
Set WsDepart = ActiveSheet

NomOnglet = ActiveSheet.Range("G3").Value & ActiveSheet.Range("I3").Value

nomcherche = NomOnglet

Sheets("SuiviClient").Activate

With ActiveSheet.Range("B3:B20")
Set cellule = .Find(nomcherche, LookIn:=xlValues)
If Not cellule Is Nothing Then cellule.ClearContents
'Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 1).Select
ActiveCell.Value = NomOnglet 'WsDepart.Range("H9").Value 'N°devis
ActiveCell.Offset(0, 1).Value = WsDepart.Range("d15") 'Date de l'évenement
ActiveCell.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
ActiveCell.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
ActiveCell.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
ActiveCell.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
ActiveCell.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
ActiveCell.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer

Set C = Columns("B:B").Find(What:=nomcherche, LookIn:=xlValues, LookAt:=xlPart)
If C Is Nothing Then
Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 1).Select

'MsgBox "on créé la ligne"
ActiveCell.Value = NomOnglet 'WsDepart.Range("H9").Value 'N°devis
ActiveCell.Offset(0, 1).Value = WsDepart.Range("d15") 'Date de l'évenement
ActiveCell.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
ActiveCell.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
ActiveCell.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
ActiveCell.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
ActiveCell.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
ActiveCell.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer

Else

'Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 0).Select

'ActiveCell.Value = NomOnglet 'WsDepart.Range("H9").Value 'N°devis
'ActiveCell.Offset(0, 1).Value = WsDepart.Range("d15") 'Date de l'évenement
'ActiveCell.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
'ActiveCell.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
'ActiveCell.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
'ActiveCell.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
'ActiveCell.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
'ActiveCell.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer

End If

Set C = Nothing
End With
Activer:
shAct.Select

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub


Configuration: Windows / Chrome 80.0.3987.122

11 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    A l'avenir, merci d'Ajouter le langage dans les balises de code pour avoir la coloration syntaxique .
    Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Tu dis

    mon code recherche une ligne sur une autre feuille

    mais.. tu fais ta recherche sur ActiveSheet.. donc sur la feuille courante...

    Au cas où, voici un exemple d'utilisation de find :
    https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel

    0
  2. alex141077 Messages postés 52 Statut Membre 2
     
    Bonjour,

    Merci de votre réponse et je vais remettre le code avec coloration et j'ai fait le trie....
    Je ne comprends toujours ou est l'erreur.

    Effectivement, j'utilise ActiveSheet pour utiliser la feuille courante mais ma macro travaille sur l'autre feuille......

    Mais avec ce code, j'ai l'impression qu'il trouve la ligne et qu'il créé une nouvelle ligne en dessous de la ligne trouver!!! du coup cela efface la ligne du dessous alors que je ne veux pas....peux etre ca qui cloche?

    Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 1).Select


    J'aurais besoin que le code recherche une ligne et si elle la trouve elle remplace cette ligne et si elle ne le trouve pas elle cree une nouvelle ligne mais sur la dernière ligne trouvé et pas sur la ligne juste dessous.

    Merci pour votre aide, c 'est tres sympa

    Sub Rectangle28_Cliquer()
    On Error Resume Next
    Dim shAct As Worksheet
    Set shAct = ActiveSheet
    Dim C As Range
    Dim NomFeuil As String, NexistePas As Boolean, Caractere As String
    Dim Code As String
    Dim Objet As OLEObject
    Dim X As String
    Dim NextLine As Long
    Dim WsDepart As Worksheet
    Dim WsDestination As Worksheet
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    Set WsDestination = Sheets("SuiviClient")
    Set WsDepart = ActiveSheet
    
    NomOnglet = ActiveSheet.Range("G3").Value & ActiveSheet.Range("I3").Value   
    nomcherche = NomOnglet 'Range("H1").Value 'Nom client
    
    Sheets("SuiviClient").Activate
    
    
    Set C = Columns("B:B").Find(What:=nomcherche, LookIn:=xlValues, LookAt:=xlPart)
    If C Is Nothing Then
    Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 1).Select
    
            'MsgBox "on créé la ligne"
    ActiveCell.Value = NomOnglet 'WsDepart.Range("H9").Value 'N°devis
    ActiveCell.Offset(0, 1).Value = WsDepart.Range("d15") 'Date de l'évenement
    ActiveCell.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
    ActiveCell.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
    ActiveCell.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
    ActiveCell.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
    ActiveCell.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
    ActiveCell.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer
    
    Else
    
    Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 0).Select
    
    ActiveCell.Value = NomOnglet 'WsDepart.Range("H9").Value 'N°devis
    ActiveCell.Offset(0, 1).Value = WsDepart.Range("d15") 'Date de l'évenement
    ActiveCell.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
    ActiveCell.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
    ActiveCell.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
    ActiveCell.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
    ActiveCell.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
    ActiveCell.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer
    
    End If
    
        Set C = Nothing
    'End With
    Activer:
    shAct.Select
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    End Sub
    


    EDIT :
    Correction du LANGAGE dans les balises de code.
    Les macro Excel.. c'est du BASIC ... pas du CSHARP
    0
  3. alex141077 Messages postés 52 Statut Membre 2
     
    J'avance un peu lol

    en fait comment dire à la ligne du code ci dessous de rechercher la dernière ligne libre?

    Mais peut etre que le probleme ne vient pas de la? arfff

    Merci pour votre réponse

    Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 1).Select
    0
  4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    On reprend.. car je ne suis pas sûr que tu saches ce que font chaque ligne de code ( que tu dois certainement copier/coller sans savoir ce qu'elles font... )

    Donc
    Au départ tu indiques
    Set WsDestination = Sheets("SuiviClient")
    Set WsDepart = ActiveSheet
    


    puis plus bas tu écris :
    Sheets("SuiviClient").Activate
    

    au passage, vu que tu as déclarer la variable WsDestination .. autant l'utiliser
    WsDestination.Activate
    


    Le problème est donc là......
    Tu ACTIVES la feuille WsDestination ..... et vu son nom.. je suppose que c'est la feuille DANS LAQUELLE tu veux mettre les informations que tu cherches (je suppose dans la feuille WsDepart )

    Et vu que tu fais ta recherches de la façon suivante
    Set C = Columns("B:B").Find(What:=nomcherche, LookIn:=xlValues, LookAt:=xlPart)
    

    Elle s'effectue dans la colonne B de la feuille ACTIVE.

    Si tu veux chercher dans la feuille WsDepart il faut mettre
    Set C = WsDepart.Columns("B:B").Find(What:=nomcherche, LookIn:=xlValues, LookAt:=xlPart)
    


    Je t'invite également à éviter les instruction SELECT .. et d'utiliser directement les coordonnées des cellules.
    Donc:
    
        LastRow = WsDestination.Cells(WsDestination.Rows.Count, "B").End(xlUp).Row + 1
       
       WsDestination.cells(LastRow ,2).Value = WsDepart.Range("d15").value  'Date de l'évenement
    
    


    NB: Le langage pour les balises de code correspondant aux macros.. c'est le BASIC pas le CSHARP.

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. alex141077 Messages postés 52 Statut Membre 2
     
    Merci beaucoup pour ton aide...

    Pour répondre à ta question "Si tu veux chercher dans la feuille WsDepart il faut mettre"
    Alors non c'est bien dans la feuille de destination que je veux rechercher donc j'ai remplacé par "WsDestination".

    Mais le probleme persiste toujours.
    Je crée une ligne et ca fonctionne
    Je créé une seconde ligne ca fonctionne aussi

    Je lance à nouveau le code avec le nom de la ligne deja existant et la problème ca me remplace la ligne juste en dessous de la ligne selectionnée.
    En fait je voudrais que la ligne selectionnée soit remplacé.

    Set C = WsDestination.Columns("B:B").Find(What:=nomcherche, LookIn:=xlValues, LookAt:=xlPart)
    If C Is Nothing Then
    LastRow = WsDestination.Cells(WsDestination.Rows.Count, "B").End(xlUp).Row + 1
    WsDestination.Cells(LastRow, 2).Value = NomOnglet
    WsDestination.Cells(LastRow, 3).Value = WsDepart.Range("d15").Value
    'ActiveCell.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
    'ActiveCell.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
    'ActiveCell.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
    'ActiveCell.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
    'ActiveCell.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
    'ActiveCell.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer
    '-------------------------------------------------------------------------------------------------------------------------
    End If
    Set C = WsDestination.Columns("B:B").Find(What:=nomcherche, LookIn:=xlValues, LookAt:=xlPart)
    If C Is Nothing Then
    
     LastRow = WsDestination.Cells(WsDestination.Rows.Count, "B").End(xlUp).Row + 1
            '----MsgBox "on créé la ligne"
    
    WsDestination.Cells(LastRow, 2).Value = NomOnglet
    WsDestination.Cells(LastRow, 3).Value = WsDepart.Range("d15").Value
    'ActiveCell.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
    'ActiveCell.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
    'ActiveCell.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
    'ActiveCell.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
    'ActiveCell.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
    'ActiveCell.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer
    
    Else
    
    
     LastRow = WsDestination.Cells(WsDestination.Rows.Count, "B").End(xlUp).Row + 0
    WsDestination.Cells(LastRow, 2).Value = NomOnglet
    WsDestination.Cells(LastRow, 3).Value = WsDepart.Range("d15").Value
    'ActiveCell.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
    'ActiveCell.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
    'ActiveCell.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
    'ActiveCell.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
    'ActiveCell.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
    'ActiveCell.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer
    
    
    End If
        Set C = Nothing
    'End With
    Activer:
    shAct.Select
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bonjour, que signifie "lancer à nouveau le code avec le nom de la ligne déjà existant"?
      peux-tu être plus précis et plus concret?
      il faut éviter d'utiliser "active" et "select", donc aussi activecell.
      0
      1. alex141077 Messages postés 52 Statut Membre 2 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Quand je crée un devis 1, devis 2, devis 3,etc.... mon code va créer une ligne pour chaque devis et coller des informations sur la meme ligne dans la feuille "suiviClient".
        Quand j'apporte des modifications sur le devis N°1 par exemple, etc... je voudrais que la macro retrouve la ligne du devis1 est apporte les modifications sur cette ligne dans la feuille "suiviClient".
        0
  7. alex141077 Messages postés 52 Statut Membre 2
     
    en fait ce qui cloche ceux sont ces lignes de code :

    Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 1).Select
    
    et
    
    Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 0).Select
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      pour moi, cela cloche car tu utilises Select et que tu ne précises pas dans quel onglet tu travailles. est-ce ton seul soucis? cela donne-t'il un message d'erreur?
      en fait, qu'attends-tu de cette instruction? l'instruction ne nous permet pas nécessairement de deviner ce que tu veux obtenir, d'autant plus que tu écris que cela cloche.

      pour le nom de l'onglet:
      NomOnglet = WsDepart .Name
      0
      1. alex141077 Messages postés 52 Statut Membre 2 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        En fait cela me dépasse un peu...mes connaissances sont largement dépassées et je ne comprends pas trop ce que tu me demandes comme renseignements.

        Ws départ correspond à la feuille active qui change de nom pour chaque nouvelle feuille. Donc j'avais pensé déclarer des variable.
        Sinon il n'y a pas de messages d'erreur. c'est juste que la macro ne réalise pas ce que je souhaite.

        Je remets mon code car j'ai fait du trie dedans car a force de bidouiller je m'y perd vraiment.

        Sub Rectangle28_Cliquer()
        On Error Resume Next
        Dim shAct As Worksheet
        Set shAct = ActiveSheet
        Dim C As Range
        Dim NomFeuil As String, NexistePas As Boolean, Caractere As String
        Dim Code As String
        Dim Objet As OLEObject
        Dim X As String
        Dim NextLine As Long
        Dim WsDepart As Worksheet
        Dim WsDestination As Worksheet
        
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
        
        Set WsDestination = Sheets("SuiviClient")
        Set WsDepart = ActiveSheet
        
        NomOnglet = ActiveSheet.Range("G3").Value & ActiveSheet.Range("I3").Value   'ActiveSheet.Name
        nomcherche = NomOnglet
        
        Sheets("SuiviClient").Activate
        
        
        Set C = Columns("B:B").Find(What:=nomcherche, LookIn:=xlValues, LookAt:=xlPart)
        If C Is Nothing Then
        Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 1).Select
        
                'MsgBox "on créé la ligne"
        ActiveCell.Value = NomOnglet 'WsDepart.Range("H9").Value 'N°devis
        ActiveCell.Offset(0, 1).Value = WsDepart.Range("d15") 'Date de l'évenement
        ActiveCell.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
        ActiveCell.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
        ActiveCell.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
        ActiveCell.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
        ActiveCell.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
        ActiveCell.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer
        
        Else
        
        Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 0).Select
        
        ActiveCell.Value = NomOnglet 'WsDepart.Range("H9").Value 'N°devis
        ActiveCell.Offset(0, 1).Value = WsDepart.Range("d15") 'Date de l'évenement
        ActiveCell.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
        ActiveCell.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
        ActiveCell.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
        ActiveCell.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
        ActiveCell.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
        ActiveCell.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer
        
        End If
        
            Set C = Nothing
        
        Activer:
        shAct.Select
        
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
        End Sub
        
        0
  8. alex141077 Messages postés 52 Statut Membre 2
     
    Bonjour,

    Voila mon fichier avec les explications dessus

    https://www.cjoint.com/c/JCcfmLbTptT

    Merci pour votre aide
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      serait-il possible que ta macro soit dans un autre fichier, que tu n'as pas partagé?
      suggestion, non testée:
      Option Explicit
      
      Sub Rectangle28_Cliquer()
      Dim shAct As Worksheet
      Dim C As Range
      Dim NomOnglet As String
      Dim WsDepart As Worksheet
      Dim WsDestination As Worksheet
      
      On Error Resume Next
      
      Application.DisplayAlerts = False
      Application.ScreenUpdating = False
      
      Set shAct = ActiveSheet
      Set WsDestination = Sheets("SuiviClient")
      Set WsDepart = ActiveSheet
      
      NomOnglet = WsDepart.Range("G3").Value & ActiveSheet.Range("I3").Value   'ActiveSheet.Name
      Set C = WsDestination.Columns("B:B").Find(What:=NomOnglet, LookIn:=xlValues, LookAt:=xlPart)
      If C Is Nothing Then
          'MsgBox "on créé la ligne"
          Set C = WsDestination.Range("B" & Range("B" & Cells.Rows.Count).End(xlUp).Row + 1)
      End If
      C.Value = NomOnglet 'WsDepart.Range("H9").Value 'N°devis
      C.Offset(0, 1).Value = WsDepart.Range("d15") 'Date de l'évenement
      C.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
      C.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
      C.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
      C.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
      C.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
      C.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer
      shAct.Select
      
      Application.DisplayAlerts = True
      Application.ScreenUpdating = True
      End Sub
      
      0
  9. alex141077 Messages postés 52 Statut Membre 2
     
    Bonjour,

    Merci beaucoup pour ton code. J'ai tester et le soucis persiste toujours...

    Je lance la macro qui crée la ligne DEVIS 142 dans la feuille "SuiviClient" = Ok
    Je lance la macro qui crée la ligne DEVIS 143 mais qui me supprime la ligne DEVIS 142.

    De plus la macro crée les nouvelles lignes uniquement sur la ligne 86?????
    Je ne vois pas pourquoi car dans le code il n'y a aucune instruction pour la ligne 86???

    Deuxièmement, je ne vois pas d'instruction pour rechercher une ligne existante par exemple DEVIS 142 et remplacer la ligne par un nouveau DEVIS142...

    Merci pour ton aide
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      et ainsi?
      Option Explicit
      
      Private Sub Rectangle28_Cliquer()
      Dim C As Range
      Dim NomOnglet As String
      Dim WsDepart As Worksheet
      Dim WsDestination As Worksheet
      
      On Error Resume Next
      
      Application.DisplayAlerts = False
      Application.ScreenUpdating = False
      
      Set WsDestination = Sheets("SuiviClient")
      Set WsDepart = ActiveSheet
      
      NomOnglet = WsDepart.Range("G3").Value & ActiveSheet.Range("I3").Value   'ActiveSheet.Name
      Set C = WsDestination.Columns("B:B").Find(What:=NomOnglet, LookIn:=xlValues, LookAt:=xlPart)
      If C Is Nothing Then
          'MsgBox "on créé la ligne"
          Set C = WsDestination.Range("B" & WsDestination.Range("B" & WsDestination.Cells.Rows.Count).End(xlUp).Row + 1)
      End If
      C.Value = NomOnglet 'WsDepart.Range("H9").Value 'N°devis
      C.Offset(0, 1).Value = WsDepart.Range("d15") 'Date de l'évenement
      C.Offset(0, 2).Value = WsDepart.Range("H9") ' Nom client
      C.Offset(0, 3).Value = WsDepart.Range("E15") 'Lieu de l'évenement
      C.Offset(0, 4).Value = WsDepart.Range("B19") 'Type de prestation
      C.Offset(0, 5).Value = WsDepart.Range("G19") 'Nombre de personne
      C.Offset(0, 6).Value = WsDepart.Range("N1") 'acompte versé
      C.Offset(0, 7).Value = WsDepart.Range("Q1") 'Reglement restant à payer
      
      Application.DisplayAlerts = True
      Application.ScreenUpdating = True
      End Sub
      
      0
  10. alex141077 Messages postés 52 Statut Membre 2
     
    Les nouvelles lignes se créent parfaitement.

    J'ai bien la ligne DEVIS 142 (Ligne 3)et la ligne DEVIS 143 (Ligne 4)

    Quand je veux modifier le DEVIS 142 par exemlpe sur ma feuille DEVIS 142 je change le prix, si je relance la macro, la modification ne se fait pas sur (Ligne3) de la feuille "SuiviClient"...
    Je pense que ca doit etre une histoire de "...Row + 0"?
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      chez moi, quand je modifie un devis et refais tourner la macro, la ligne du devis se modifie dans "suiviclient". bizarre, non?
      0
  11. alex141077 Messages postés 52 Statut Membre 2
     
    Ah Oui si ca fonctionne très bien...Milles excuses!!!!

    Génial ca fonctionne!!!!

    Merci pour ton aide tu es top!!!!
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      la ligne 18 fait la recherche, et, si trouvé, mémorise la position dans C.
      si pas trouvé, la ligne 21 memorise dans C la position de la ligne en dessous de la dernière ligne non vide.
      et ensuite, on remplit les cellules de la ligne où se trouve C.
      0