Macro excel rechercher et remplacer une ligne
Résolu/Fermé
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
-
Modifié le 1 mars 2020 à 00:46
yg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 - 2 mars 2020 à 11:56
yg_be Messages postés 23329 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 - 2 mars 2020 à 11:56
A voir également:
- Macro excel rechercher et remplacer une ligne
- Rechercher et remplacer word - Guide
- Aller à la ligne excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Si et excel - Guide
- Liste déroulante excel - Guide
11 réponses
jordane45
Messages postés
38289
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2024
4 703
1 mars 2020 à 00:35
1 mars 2020 à 00:35
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
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
Modifié le 1 mars 2020 à 11:37
Modifié le 1 mars 2020 à 11:37
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
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
Modifié le 1 mars 2020 à 11:28
Modifié le 1 mars 2020 à 11:28
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
jordane45
Messages postés
38289
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2024
4 703
Modifié le 1 mars 2020 à 11:48
Modifié le 1 mars 2020 à 11:48
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
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
1 mars 2020 à 12:43
1 mars 2020 à 12:43
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
yg_be
Messages postés
23329
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 novembre 2024
1 551
1 mars 2020 à 14:25
1 mars 2020 à 14:25
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.
peux-tu être plus précis et plus concret?
il faut éviter d'utiliser "active" et "select", donc aussi activecell.
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
>
yg_be
Messages postés
23329
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 novembre 2024
1 mars 2020 à 18:05
1 mars 2020 à 18:05
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".
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
1 mars 2020 à 14:22
1 mars 2020 à 14:22
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
yg_be
Messages postés
23329
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 novembre 2024
1 551
Modifié le 1 mars 2020 à 18:23
Modifié le 1 mars 2020 à 18:23
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
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
>
yg_be
Messages postés
23329
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 novembre 2024
1 mars 2020 à 18:46
1 mars 2020 à 18:46
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
jordane45
Messages postés
38289
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2024
4 703
1 mars 2020 à 18:24
1 mars 2020 à 18:24
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
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
2 mars 2020 à 06:13
2 mars 2020 à 06:13
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
yg_be
Messages postés
23329
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 novembre 2024
1 551
Modifié le 2 mars 2020 à 08:45
Modifié le 2 mars 2020 à 08:45
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
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
Modifié le 2 mars 2020 à 10:26
Modifié le 2 mars 2020 à 10:26
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
yg_be
Messages postés
23329
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 novembre 2024
1 551
2 mars 2020 à 10:49
2 mars 2020 à 10:49
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
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
2 mars 2020 à 11:01
2 mars 2020 à 11:01
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"?
yg_be
Messages postés
23329
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 novembre 2024
1 551
2 mars 2020 à 11:41
2 mars 2020 à 11:41
chez moi, quand je modifie un devis et refais tourner la macro, la ligne du devis se modifie dans "suiviclient". bizarre, non?
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
2 mars 2020 à 11:45
2 mars 2020 à 11:45
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!!!!
yg_be
Messages postés
23329
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 novembre 2024
1 551
2 mars 2020 à 11:56
2 mars 2020 à 11:56
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.
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.