Copier ligne en effaçant le contenu de certaines cellules
Fermé
Fat17
Messages postés
87
Date d'inscription
vendredi 25 août 2017
Statut
Membre
Dernière intervention
30 mars 2021
-
24 sept. 2017 à 11:54
Fat17 - 1 oct. 2017 à 21:24
Fat17 - 1 oct. 2017 à 21:24
A voir également:
- Copier ligne en effaçant le contenu de certaines cellules
- Partage de photos en ligne - Guide
- Site de vente en ligne particulier - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Aller à la ligne dans une cellule excel - Guide
- Fusionner deux cellules excel en gardant le contenu - Guide
20 réponses
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
24 sept. 2017 à 12:46
24 sept. 2017 à 12:46
Bonjour
Il faut d'autres précisions :
-ligne copiée où ?
- pour être collée où ?
Le mieux est de joindre un exemple de ton fichier en le postant sur cjoint.com, faire créer un lier, le copier et revenir le coller ici
Cdlmnt
Via
Il faut d'autres précisions :
-ligne copiée où ?
- pour être collée où ?
Le mieux est de joindre un exemple de ton fichier en le postant sur cjoint.com, faire créer un lier, le copier et revenir le coller ici
Cdlmnt
Via
Fat17
Messages postés
87
Date d'inscription
vendredi 25 août 2017
Statut
Membre
Dernière intervention
30 mars 2021
24 sept. 2017 à 15:51
24 sept. 2017 à 15:51
Re-Bonjour
Il s'agit de n'importe quelle ligne qui est copiée.
Ensuite on choisit une cellule dans la colonne A (qui peut être n'importe où) et on copie la ligne en effaçant le contenu des cellules F, P et U et tout en gardant la mise en forme globale et le contenu des autres cellules.
Ce n'est peut être pas évident !
Cordialement
Fat
Il s'agit de n'importe quelle ligne qui est copiée.
Ensuite on choisit une cellule dans la colonne A (qui peut être n'importe où) et on copie la ligne en effaçant le contenu des cellules F, P et U et tout en gardant la mise en forme globale et le contenu des autres cellules.
Ce n'est peut être pas évident !
Cordialement
Fat
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
24 sept. 2017 à 17:18
24 sept. 2017 à 17:18
Ca ne me dit toujours pas où la copier !!
Postes un exemple de ton fichier comme demandé en donnant un exemple d'une ligne à copier et de l'endroit ou la copier
Cdlmnt
Via
Postes un exemple de ton fichier comme demandé en donnant un exemple d'une ligne à copier et de l'endroit ou la copier
Cdlmnt
Via
Fat17
Messages postés
87
Date d'inscription
vendredi 25 août 2017
Statut
Membre
Dernière intervention
30 mars 2021
24 sept. 2017 à 17:38
24 sept. 2017 à 17:38
Bonsoir,
Voici un modèle de ce que je cherche à faire
Salutations
A+
http://www.cjoint.com/c/GIypK7DUhiN
Voici un modèle de ce que je cherche à faire
Salutations
A+
http://www.cjoint.com/c/GIypK7DUhiN
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
24 sept. 2017 à 20:53
24 sept. 2017 à 20:53
Re
Ton fichier avec une macro qui se déclenche au double-clic sur une cellule de la ligne à copier (ALT+F11 pour voir la macro)
https://mon-partage.fr/f/Mzi8FER8/
Cdlmnt
Via
Ton fichier avec une macro qui se déclenche au double-clic sur une cellule de la ligne à copier (ALT+F11 pour voir la macro)
https://mon-partage.fr/f/Mzi8FER8/
Cdlmnt
Via
Merci beaucoup Via,
Ca marche bien, mais dans mon fichier d'origine, j'ai déjà utilisé le double clic pour la date du jour de saisie.
Voici la macro :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Target = Date
Target.Value = Target.Value
Cancel = True
End Sub
Il y a donc une confusion pour les deux macro qui bloquent.
Peut-on avoir à la place du double clic un raccourci du type Ctrl+F9 par exemple ?
Bonne soirée
Cordialement
Fat
Ca marche bien, mais dans mon fichier d'origine, j'ai déjà utilisé le double clic pour la date du jour de saisie.
Voici la macro :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Target = Date
Target.Value = Target.Value
Cancel = True
End Sub
Il y a donc une confusion pour les deux macro qui bloquent.
Peut-on avoir à la place du double clic un raccourci du type Ctrl+F9 par exemple ?
Bonne soirée
Cordialement
Fat
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
24 sept. 2017 à 22:43
24 sept. 2017 à 22:43
Re
Dans ce cas :
1) Créer un module : ouvrir editeur VBA - Insertion - Module
2) Dans ce module mettre la macro suivante :
3)Dans le Ruban Excel - Developpeur - Macros - Selectionner la macro puis Options et là tu peux définir le raccourci clavier de ton choix
Cdlmnt
Via
Dans ce cas :
1) Créer un module : ouvrir editeur VBA - Insertion - Module
2) Dans ce module mettre la macro suivante :
Sub recop() ligneC = InputBox("Entrer le n* de la ligne à recopier", "Copie d'une nouvelle ligne vierge") If ligneC <> "" Then If MsgBox("Etes-vous certain de vouloir copier la ligne " & ligneC & " en fin de tableau ?", vbYesNo, "Demande de confirmation") = vbYes Then 'première ligne vide Dim Ligne As Long Ligne = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1 'copier-coller Range("A" & ligneC & ":Z" & ligneC).Select Selection.Copy Range("A" & Ligne).Select ActiveSheet.Paste 'Effacements Range("F" & Ligne).Select ActiveCell.FormulaR1C1 = "" Range("P" & Ligne).Select ActiveCell.FormulaR1C1 = "" Range("U" & Ligne).Select ActiveCell.FormulaR1C1 = "" End If End If End Sub
3)Dans le Ruban Excel - Developpeur - Macros - Selectionner la macro puis Options et là tu peux définir le raccourci clavier de ton choix
Cdlmnt
Via
Fat17
Messages postés
87
Date d'inscription
vendredi 25 août 2017
Statut
Membre
Dernière intervention
30 mars 2021
25 sept. 2017 à 17:18
25 sept. 2017 à 17:18
Bonjour,
Merci Via pour la peine que tu t'es donnée.
J'aurais voulu supprimer les boîtes de dialogue et placer la ligne copiée non pas à la fin du tableau, mais à la première ligne vide représentée par exemple par la colonne F (Désignation Client) et ça par Ctrl+w.
(On peut éventuellement revenir au double clic après avoir désactivé celui de la date de saisie)
En effet, mon tableau contient une centaine de lignes partiellement vides qui donnent la chronologie et les enchaînements de numéros; et la copie doit se faire à la suite des lignes pleines.
Je renvoie le fichier actualisé pour info.
Cordialement
Fat
http://www.cjoint.com/c/GIzpodUHC6r
Merci Via pour la peine que tu t'es donnée.
J'aurais voulu supprimer les boîtes de dialogue et placer la ligne copiée non pas à la fin du tableau, mais à la première ligne vide représentée par exemple par la colonne F (Désignation Client) et ça par Ctrl+w.
(On peut éventuellement revenir au double clic après avoir désactivé celui de la date de saisie)
En effet, mon tableau contient une centaine de lignes partiellement vides qui donnent la chronologie et les enchaînements de numéros; et la copie doit se faire à la suite des lignes pleines.
Je renvoie le fichier actualisé pour info.
Cordialement
Fat
http://www.cjoint.com/c/GIzpodUHC6r
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
25 sept. 2017 à 18:02
25 sept. 2017 à 18:02
Bonjour,
1° solution : macro à mettre dans un module, lui affecter après le raccourci voulu :
La ligne choisie est recopiée en 1ere ligne vide trouvée en colonne G et donc se fait à la suite
On ne peut pas se passer de la boîte de dialogue car on doit bien indiquer quelle ligne copier, Excel ne peut le deviner !
2° solution : si comme je le pense la ligne à copier est forcement la dernière complétée en colonne F c'est cette macro qu'il faut appliquer, et là plus de boite de dialogue
Cdlmnt
Via
1° solution : macro à mettre dans un module, lui affecter après le raccourci voulu :
Sub recop() ligneC = InputBox("Entrer le n* de la ligne à recopier", "Copie d'une nouvelle ligne vierge") If ligneC <> "" Then 'première ligne vide en colonne H Dim Ligne As Long Ligne = Columns(8).Find("*", , , , xlByColumns, xlPrevious).Row + 1 'copier-coller Range("A" & ligneC & ":Z" & ligneC).Select Selection.Copy Range("A" & Ligne).Select ActiveSheet.Paste 'Effacements Range("F" & Ligne).Select ActiveCell.FormulaR1C1 = "" Range("P" & Ligne).Select ActiveCell.FormulaR1C1 = "" Range("U" & Ligne).Select ActiveCell.FormulaR1C1 = "" End If End Sub
La ligne choisie est recopiée en 1ere ligne vide trouvée en colonne G et donc se fait à la suite
On ne peut pas se passer de la boîte de dialogue car on doit bien indiquer quelle ligne copier, Excel ne peut le deviner !
2° solution : si comme je le pense la ligne à copier est forcement la dernière complétée en colonne F c'est cette macro qu'il faut appliquer, et là plus de boite de dialogue
Sub recop() 'dernière ligne remplie en colonne F ligneC = Columns(6).Find("*", , , , xlByColumns, xlPrevious).Row 'première ligne vide en colonne H Dim Ligne As Long Ligne = Columns(8).Find("*", , , , xlByColumns, xlPrevious).Row + 1 'copier-coller Range("A" & ligneC & ":Z" & ligneC).Select Selection.Copy Range("A" & Ligne).Select ActiveSheet.Paste 'Effacements Range("F" & Ligne).Select ActiveCell.FormulaR1C1 = "" Range("P" & Ligne).Select ActiveCell.FormulaR1C1 = "" Range("U" & Ligne).Select ActiveCell.FormulaR1C1 = "" End Sub
Cdlmnt
Via
Bonsoir,
La 2ème solution est parfaite, et la dernière ligne pleine en F est bien recopiée dans la première ligne vide en I (au lieu de H) avec un simple Ctrl+w !
Seul bémol : Les cellules F, P et U restent pleines.
L'effacement ne se fait pas même s'il est mentionné dans la macro !
Quoi faire ?
Merci de trouver la parade, ça serait vraiment magique !
Sincères salutations
Fat
La 2ème solution est parfaite, et la dernière ligne pleine en F est bien recopiée dans la première ligne vide en I (au lieu de H) avec un simple Ctrl+w !
Seul bémol : Les cellules F, P et U restent pleines.
L'effacement ne se fait pas même s'il est mentionné dans la macro !
Quoi faire ?
Merci de trouver la parade, ça serait vraiment magique !
Sincères salutations
Fat
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
25 sept. 2017 à 20:30
25 sept. 2017 à 20:30
Re
Tu as bien recopié la macro exactement ?
Chez moi elle fonctionne, voir ce fichier :
https://www.cjoint.com/c/GIzsEknPcMC
Cdlmnt
Via
Tu as bien recopié la macro exactement ?
Chez moi elle fonctionne, voir ce fichier :
https://www.cjoint.com/c/GIzsEknPcMC
Cdlmnt
Via
Bonsoir,
Effectivement, la macro fonctionne très bien sur le fichier modèle, mais sur l'original. Pourtant, j'ai fait un "copier / coller".
J'ai même déplacer la macro du module vers la feuille concernée, mais le résultat est le même.
Mystère et boule de gomme !
Le temps fera bien les choses.
Merci beaucoup pour l'intérêt que tu as porté à ce sujet.
Si je peux me permettre une autre question :
Je n'arrive pas à concaténer les 3 formules suivantes (qui fonctionnent bien séparément) en une seule formule.
=INDEX(BEA!$D$2:$D$9999;EQUIV(D10;BEA!$G$2:$G$9999;0))
=INDEX(BNP!$D$2:$D$9999;EQUIV(D10;BNP!$G$2:$G$9999;0))
=INDEX(CAS!$D$2:$D$9999;EQUIV(D10;CAS!$G$2:$G$9999;0))
Il s'agit d'une recherche dans 3 feuilles distinctes avec le critère commun à gauche de la donnée recherchée.
Merci 1000 fois
Cordialement
Fat
Effectivement, la macro fonctionne très bien sur le fichier modèle, mais sur l'original. Pourtant, j'ai fait un "copier / coller".
J'ai même déplacer la macro du module vers la feuille concernée, mais le résultat est le même.
Mystère et boule de gomme !
Le temps fera bien les choses.
Merci beaucoup pour l'intérêt que tu as porté à ce sujet.
Si je peux me permettre une autre question :
Je n'arrive pas à concaténer les 3 formules suivantes (qui fonctionnent bien séparément) en une seule formule.
=INDEX(BEA!$D$2:$D$9999;EQUIV(D10;BEA!$G$2:$G$9999;0))
=INDEX(BNP!$D$2:$D$9999;EQUIV(D10;BNP!$G$2:$G$9999;0))
=INDEX(CAS!$D$2:$D$9999;EQUIV(D10;CAS!$G$2:$G$9999;0))
Il s'agit d'une recherche dans 3 feuilles distinctes avec le critère commun à gauche de la donnée recherchée.
Merci 1000 fois
Cordialement
Fat
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
25 sept. 2017 à 22:12
25 sept. 2017 à 22:12
Que veux tu dire pas concaténer ?
Tu veux les 3 résultats des 3 INDEX à la suite ? en ce cas
=INDEX(BEA!$D$2:$D$9999;EQUIV(D10;BEA!$G$2:$G$9999;0))
& "-" & INDEX(BNP!$D$2:$D$9999;EQUIV(D10;BNP!$G$2:$G$9999;0))
& " -" & INDEX(CAS!$D$2:$D$9999;EQUIV(D10;CAS!$G$2:$G$9999;0))
ou alors tu veux le 2nd résultat si le 1er ne donne rien et le 3eme si le 2nd non plus ? en ce cas il faut passer par SIERREUR :
=SIERREUR(INDEX(BEA!$D$2:$D$9999;EQUIV(D10;BEA!$G$2:$G$9999;0));SIERREUR(INDEX(BNP!$D$2:$D$9999;EQUIV(D10;BNP!$G$2:$G$9999;0));INDEX(CAS!$D$2:$D$9999;EQUIV(D10;CAS!$G$2:$G$9999;0)) ))
Cdlmnt
Via
Tu veux les 3 résultats des 3 INDEX à la suite ? en ce cas
=INDEX(BEA!$D$2:$D$9999;EQUIV(D10;BEA!$G$2:$G$9999;0))
& "-" & INDEX(BNP!$D$2:$D$9999;EQUIV(D10;BNP!$G$2:$G$9999;0))
& " -" & INDEX(CAS!$D$2:$D$9999;EQUIV(D10;CAS!$G$2:$G$9999;0))
ou alors tu veux le 2nd résultat si le 1er ne donne rien et le 3eme si le 2nd non plus ? en ce cas il faut passer par SIERREUR :
=SIERREUR(INDEX(BEA!$D$2:$D$9999;EQUIV(D10;BEA!$G$2:$G$9999;0));SIERREUR(INDEX(BNP!$D$2:$D$9999;EQUIV(D10;BNP!$G$2:$G$9999;0));INDEX(CAS!$D$2:$D$9999;EQUIV(D10;CAS!$G$2:$G$9999;0)) ))
Cdlmnt
Via
Magnifique !
C'était la 2ème variante qui était recherchée.
En fait, il s'agit d'un état de dates de références de paiement de factures par rapport à 3 comptes différents.
J'ai les bonnes dates pour les paiements avec références (N° Chèque) et ce qui était recherché.
J'ai 00-01-00 pour les paiements avec références mais sans date
Et j'ai #N/A pour les factures non encore payées, donc absentes dans les relevés de compte.
Ça serait chouette si on pouvait avoir du blanc à la place pour les 2 derniers cas!
Je suis sincèrement admiratif pour la pertinence des réponses apportées.
1000 fois merci !
Bonne nuit
Fat
C'était la 2ème variante qui était recherchée.
En fait, il s'agit d'un état de dates de références de paiement de factures par rapport à 3 comptes différents.
J'ai les bonnes dates pour les paiements avec références (N° Chèque) et ce qui était recherché.
J'ai 00-01-00 pour les paiements avec références mais sans date
Et j'ai #N/A pour les factures non encore payées, donc absentes dans les relevés de compte.
Ça serait chouette si on pouvait avoir du blanc à la place pour les 2 derniers cas!
Je suis sincèrement admiratif pour la pertinence des réponses apportées.
1000 fois merci !
Bonne nuit
Fat
Re-bonsoir
J'ai pu supprimer les #N/A en ajoutant SIERREUR( au début de ta formule, et ;"") à la fin, et ça marche très bien !
Je suis content
A+
J'ai pu supprimer les #N/A en ajoutant SIERREUR( au début de ta formule, et ;"") à la fin, et ça marche très bien !
Je suis content
A+
Fat17
Messages postés
87
Date d'inscription
vendredi 25 août 2017
Statut
Membre
Dernière intervention
30 mars 2021
27 sept. 2017 à 17:48
27 sept. 2017 à 17:48
Bonjour Via,
J'ai pu trouver la faille qui empêchait la macro de fonctionner chez moi.
En fait, j'avais la macro ci dessous pour avoir le code article en Colonne I toujours en Majuscule
Private Sub WorkSheet_Change(ByVal Target As Range)
If Target.Count > 1 Then End
If Not Application.Intersect(Target, Range("i4:i9999")) Is Nothing Then
If Not IsEmpty(Target) Then
Application.EnableEvents = False
Target.Value = UCase(Target.Value)
Application.EnableEvents = True
End If
Else
End If
End Sub
J'ai déplacé cette macro dans un module, mais elle ne répond plus.
(il doit y avoir une correction d'écriture à faire pour l'affecter à partir du module à une ou plusieurs feuilles)
La bonne nouvelle, c'est que la macro "copier ligne avec effacement) qui est aussi dans un module tourne très bien !
Salutations amicales
Fat
J'ai pu trouver la faille qui empêchait la macro de fonctionner chez moi.
En fait, j'avais la macro ci dessous pour avoir le code article en Colonne I toujours en Majuscule
Private Sub WorkSheet_Change(ByVal Target As Range)
If Target.Count > 1 Then End
If Not Application.Intersect(Target, Range("i4:i9999")) Is Nothing Then
If Not IsEmpty(Target) Then
Application.EnableEvents = False
Target.Value = UCase(Target.Value)
Application.EnableEvents = True
End If
Else
End If
End Sub
J'ai déplacé cette macro dans un module, mais elle ne répond plus.
(il doit y avoir une correction d'écriture à faire pour l'affecter à partir du module à une ou plusieurs feuilles)
La bonne nouvelle, c'est que la macro "copier ligne avec effacement) qui est aussi dans un module tourne très bien !
Salutations amicales
Fat
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
27 sept. 2017 à 18:15
27 sept. 2017 à 18:15
Bonsoir Fat,
Bien !
Ta macro Private Sub WorkSheet_Change(ByVal Target As Range) ets une macro d'événement de feuille et doit donc être dans le worksheet de la feuille et pas dans un module
Remets ta macro dans le worksheet de la feuille 1 et pour faire concilier les deux il suffit de shunter ta macro lorsque la mienne s'applique, pour cela :
1) En début de ta macro tu rajoutes la ligne :
If macro = 1 Then Exit Sub
2 Dans ma macro tu rajoutes en début la ligne :
macro=1
et en fin de macro :
macro=0
3) Dans module avant ma macro tu déclares cette variable macro avec cette ligne :
Public macro As Integer
Cdlmnt
Via
Bien !
Ta macro Private Sub WorkSheet_Change(ByVal Target As Range) ets une macro d'événement de feuille et doit donc être dans le worksheet de la feuille et pas dans un module
Remets ta macro dans le worksheet de la feuille 1 et pour faire concilier les deux il suffit de shunter ta macro lorsque la mienne s'applique, pour cela :
1) En début de ta macro tu rajoutes la ligne :
If macro = 1 Then Exit Sub
2 Dans ma macro tu rajoutes en début la ligne :
macro=1
et en fin de macro :
macro=0
3) Dans module avant ma macro tu déclares cette variable macro avec cette ligne :
Public macro As Integer
Cdlmnt
Via
Bonsoir Via,
Désolé, j'ai du m'absenter.
J'ai appliqué les consignes données, mais je n'ai pas de résultat.
Alors une précision STP:
Point 1 / En début de macro = avant sub ?
Point 2 / En début de ligne = avant sub ? et En fin de macro = après sub ?
Point 3 / avant macro = avant sub ?
Cordialement
Fat
Désolé, j'ai du m'absenter.
J'ai appliqué les consignes données, mais je n'ai pas de résultat.
Alors une précision STP:
Point 1 / En début de macro = avant sub ?
Point 2 / En début de ligne = avant sub ? et En fin de macro = après sub ?
Point 3 / avant macro = avant sub ?
Cordialement
Fat
via55
Messages postés
14512
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2025
2 740
28 sept. 2017 à 20:47
28 sept. 2017 à 20:47
Bonsoir Fat
1)En début de macro = juste après Sub
2)En début de macro = juste après Sub
En fin de macro = juste avant End Sub
3) Avant Sub
Cdlmnt
Via
1)En début de macro = juste après Sub
2)En début de macro = juste après Sub
En fin de macro = juste avant End Sub
3) Avant Sub
Cdlmnt
Via