Microsoft 365 Effacer le contenu de cellule sur la même ligne d'une autre feuille

ShrekL

XLDnaute Junior
Bonjour à vous.

J'ai une question qui je l'espère, sera p-e simple pour vous.

J'ai besoin d'une macro qui me permet d'agir sur une plage de cellule d'une même ligne que dans la feuille active, mais dans une autre feuille.

Pour être plus précis :
- En supposant que je suis sur cellule F5 la feuil1.
- Je veux agir sur les colonnes B et C de la même ligne de la feuil 2. Comme par exemple, en effacer le contenu.

Je me suis créé une variable qui mémorise l'adresse de la ligne sur laquelle je me trouve sur la Feuil1. Je peux ensuite aller effacer le contenu d'une cellule de cette ligne sur la Feuil2 mais avec un code comme celui-ci :
VB:
Sub test()
    Dim rng1 As Range
    Set rng1 = Cells(ActiveCell.Row, 1)
    
    Sheets("Feuil2").Range(rng1.Address).Offset(0, 2).ClearContents
    
End Sub

là où ça se gâte, c'est si je veux agir sur une plage de cellule à partir de cette référence qu'est ma variable rng1
Par exemple, si je veux fusionner les cellules des colonnes G et H de cette même ligne. J'ai essayé un code du type :
Code:
Sub test()
    Dim rng1 As Range
    Set rng1 = Cells(ActiveCell.Row, 1)
    
    Sheets("Feuil2").Range(rng1.Address).Offset(0, 6):Range(rng1.Address).Offset(0, 7).Merge
    
End Sub

Naturellement ça ne fonctionne pas mais je me dis qu'il y a sans doute un moyen facile.

Voir le petit fichier test ci-joint

Merci beaucoup de votre aide.
 

Pièces jointes

  • Classeur_test.xlsm
    13.5 KB · Affichages: 2
Solution
Bonjour

Sans avoir ouvert votre fichier, ceci devrait le faire. S'il n'y a que la ligne de Rng1 qui vous intéresse, utilisez sa propriété ROW.

VB:
Sheets("Feuil2").Cells(rng1.Row, 7).Resize(, 2).Merge
Ou
Code:
Sheets("Feuil2").Cells(rng1.Row, "G").Resize(, 2).Merge

En sachant qu' activecell n'est pas forcément sur la feuille feuil1 mais sur la feuille active lorsque vous appelez votre macro.

Cordialement

Oups, bonjour @Robert

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour ShrekL, bonjour le forum,

Si tu veux agir sur la même ligne, utilise la ligne comme variable et pas l'adresse... Après tu adaptes :

VB:
Sub test()
Dim LI As Integer

LI = ActiveCell.Row
Sheets("Feuil2").Cells(LI,"A").ClearContents
End Sub
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour

Sans avoir ouvert votre fichier, ceci devrait le faire. S'il n'y a que la ligne de Rng1 qui vous intéresse, utilisez sa propriété ROW.

VB:
Sheets("Feuil2").Cells(rng1.Row, 7).Resize(, 2).Merge
Ou
Code:
Sheets("Feuil2").Cells(rng1.Row, "G").Resize(, 2).Merge

En sachant qu' activecell n'est pas forcément sur la feuille feuil1 mais sur la feuille active lorsque vous appelez votre macro.

Cordialement

Oups, bonjour @Robert
 

ShrekL

XLDnaute Junior
Bonjour

Sans avoir ouvert votre fichier, ceci devrait le faire. S'il n'y a que la ligne de Rng1 qui vous intéresse, utilisez sa propriété ROW.

VB:
Sheets("Feuil2").Cells(rng1.Row, 7).Resize(, 2).Merge
Ou
Code:
Sheets("Feuil2").Cells(rng1.Row, "G").Resize(, 2).Merge

En sachant qu' activecell n'est pas forcément sur la feuille feuil1 mais sur la feuille active lorsque vous appelez votre macro.

Cordialement

Oups, bonjour @Robert
Eureka!!!

Merci beaucoup Robert. Puisque dans ma variable, j'avais défini la ligne et la colonne, je n'avais pas réalisé que je pouvais redéfinir la ligne avec Row. Très logique. De plus, je ne connaissais pas la fonction Resize.

Inclue au tiroir de ma mémoire.

Merci encore et bonne journée.
 

soan

XLDnaute Barbatruc
Inactif
Bonjour ShrekL, le fil,

* sur "Feuil2", note qu'il y a "test" en B5:C5 (ce que tu avais déjà fait)
* fais Alt F8, et lance la macro test_clear ; lis le message (B5 et C5 sont inchangés)
* clique sur le bouton OK de la boîte de dialogue ; B5 et C5 sont effacés
* ça aurait fait pareil si tu avais lancé la macro depuis "Feuil1"

* sur "Feuil2", fais Alt F8 et lance la macro "test_merge" ; ça fait la fusion
des cellules B5 et C5 ; va dessus pour mieux le voir.
* si tu lances cette macro depuis "Feuil1", ça ne fait rien ! (c'est normal)



code VBA :

VB:
Option Explicit

Dim lig&

'cette sub peut être lancée à partir de "Feuil1" ou "Feuil2" (au choix).

Sub test_clear()
  Application.ScreenUpdating = 0
  With Worksheets("Feuil1")
    .Select: lig = ActiveCell.Row
  End With
  Worksheets("Feuil2").Select: Cells(lig, "B").Resize(, 2).ClearContents
  MsgBox "sur ""Feuil1"", la ligne de la cellule active est : " & lig
End Sub

'cette sub ne peut être lancée qu'à partir de "Feuil2", et APRÈS avoir exécuté
'la sub test_clear() ! car il faut que lig contienne le n° de la ligne active.

Sub test_merge()
  If ActiveSheet.Name <> "Feuil2" Then Exit Sub 'il faut être sur "Feuil2"
  If lig = 0 Then Exit Sub 'lig doit contenir un n° de ligne ; sortie si 0
  Cells(lig, "B").Resize(, 2).Merge
End Sub

soan
 

Pièces jointes

  • Classeur_test.xlsm
    18.4 KB · Affichages: 1

ShrekL

XLDnaute Junior
Bonjour ShrekL, le fil,

* sur "Feuil2", note qu'il y a "test" en B5:C5 (ce que tu avais déjà fait)
* fais Alt F8, et lance la macro test_clear ; lis le message (B5 et C5 sont inchangés)
* clique sur le bouton OK de la boîte de dialogue ; B5 et C5 sont effacés
* ça aurait fait pareil si tu avais lancé la macro depuis "Feuil1"

* sur "Feuil2", fais Alt F8 et lance la macro "test_merge" ; ça fait la fusion
des cellules B5 et C5 ; va dessus pour mieux le voir.
* si tu lances cette macro depuis "Feuil1", ça ne fait rien ! (c'est normal)



code VBA :

VB:
Option Explicit

Dim lig&

'cette sub peut être lancée à partir de "Feuil1" ou "Feuil2" (au choix).

Sub test_clear()
  Application.ScreenUpdating = 0
  With Worksheets("Feuil1")
    .Select: lig = ActiveCell.Row
  End With
  Worksheets("Feuil2").Select: Cells(lig, "B").Resize(, 2).ClearContents
  MsgBox "sur ""Feuil1"", la ligne de la cellule active est : " & lig
End Sub

'cette sub ne peut être lancée qu'à partir de "Feuil2", et APRÈS avoir exécuté
'la sub test_clear() ! car il faut que lig contienne le n° de la ligne active.

Sub test_merge()
  If ActiveSheet.Name <> "Feuil2" Then Exit Sub 'il faut être sur "Feuil2"
  If lig = 0 Then Exit Sub 'lig doit contenir un n° de ligne ; sortie si 0
  Cells(lig, "B").Resize(, 2).Merge
End Sub

soan
Merci beaucoup Soan et tous les autres. Vous m'avez vraiment aidé et j'ai "ENCORE" appris plein de petits trucs.
 

Discussions similaires