Macro excel rechercher et remplacer une ligne

Résolu
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. Modérateur
    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
    1. 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
      1. 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
        1. Modérateur
          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
          1. 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. Contributeur
              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
            2. @yg_beQuand 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
          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. Contributeur
              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
            2. @yg_beEn 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
          3. Bonjour,

            Voila mon fichier avec les explications dessus

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

            Merci pour votre aide
            0
            1. Contributeur
              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
          4. 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. Contributeur
              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
          5. 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. Contributeur
              chez moi, quand je modifie un devis et refais tourner la macro, la ligne du devis se modifie dans "suiviclient". bizarre, non?
              0
          6. Ah Oui si ca fonctionne très bien...Milles excuses!!!!

            Génial ca fonctionne!!!!

            Merci pour ton aide tu es top!!!!
            0
            1. Contributeur
              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