Macro excel rechercher et remplacer une ligne
Résolu
alex141077
Messages postés
52
Statut
Membre
-
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 24281 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
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
A voir également:
- Macro excel rechercher et remplacer une ligne
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Word et excel gratuit - Guide
- Rechercher et remplacer word - Guide
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
11 réponses
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
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
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
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?
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
EDIT :
Correction du LANGAGE dans les balises de code.
Les macro Excel.. c'est du BASIC ... pas du CSHARP
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
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
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
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
puis plus bas tu écris :
au passage, vu que tu as déclarer la variable WsDestination .. autant l'utiliser
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
Elle s'effectue dans la colonne B de la feuille ACTIVE.
Si tu veux chercher dans la feuille WsDepart il faut mettre
Je t'invite également à éviter les instruction SELECT .. et d'utiliser directement les coordonnées des cellules.
Donc:
NB: Le langage pour les balises de code correspondant aux macros.. c'est le BASIC pas le CSHARP.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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é.
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
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".
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".
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
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:
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
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.
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
Je crois que le plus simple serait que tu nous mettes un fichier à disposition
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers
Bonjour,
Voila mon fichier avec les explications dessus
https://www.cjoint.com/c/JCcfmLbTptT
Merci pour votre aide
Voila mon fichier avec les explications dessus
https://www.cjoint.com/c/JCcfmLbTptT
Merci pour votre aide
serait-il possible que ta macro soit dans un autre fichier, que tu n'as pas partagé?
suggestion, non testée:
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
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
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
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
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"?
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"?
Ah Oui si ca fonctionne très bien...Milles excuses!!!!
Génial ca fonctionne!!!!
Merci pour ton aide tu es top!!!!
Génial ca fonctionne!!!!
Merci pour ton aide tu es top!!!!