Microsoft 365 VBA Sélection plages non contigües

chris6999

XLDnaute Impliqué
Bonjour le FORUM

Je tente de trouver un code pour sélectionner des plages non contiguës.
Le but est de sélectionner un première plage fixe de A1 à J42 et une plage variable (car je ne connais pas par avance le nombre de ligne) : L2 à X?(dernière ligne).

Voici le code que j'ai essayé de tester sans succès malheureusement

Sub test()
'Selectionne la plages à imprimer par rapport dernière cellule nion vide sous y
With Sheets("TEST")
Derlig = Sheets("TEST").Range("X" & Rows.Count).End(xlUp).Row
Dim pag1 As Range
Dim Pag2 As Range
pag1 = Range(Cells(1, "A"), Cells(43, "J"))
Pag2 = Range(Cells(2, "L"), Cells(Derlig, "Y"))
Union(pag1, Pag2).Select
End With
End Sub


Quelqu'un aurait-il une idée du pourquoi ça bloque?
Merci par avance pour votre aide

Bonne soirée à tous
 

Pièces jointes

  • TEST SELECTION PLAGES NON CONTIGUES.xlsm
    17.4 KB · Affichages: 14

kiki29

XLDnaute Barbatruc
Salut,
VB:
Option Explicit

Sub test()
Dim pag1 As Range, Pag2 As Range
Dim DerLig As Long
    With Feuil1
        DerLig = .Range("X" & Rows.Count).End(xlUp).Row
        Set pag1 = .Range(Cells(1, "A"), Cells(43, "J"))
        Set Pag2 = .Range(Cells(2, "L"), Cells(DerLig, "Y"))
        Union(pag1, Pag2).Select
    End With
End Sub
 

kiki29

XLDnaute Barbatruc
Re, curieux avec
VB:
Option Explicit

Sub Test()
Dim Pag1 As Range, Pag2 As Range, Pag3 As Range
Dim DerLig As Long, Rng As Range
    With Feuil1
        DerLig = .Range("X" & Rows.Count).End(xlUp).Row
        Set Pag1 = .Range(Cells(1, "A"), Cells(43, "J"))
        Set Pag2 = .Range(Cells(2, "L"), Cells(DerLig, "Y"))
        Set Pag3 = .Range("L34:P66")
        Set Rng = Union(Pag1, Pag2, Pag3)
        Rng.Select
    End With
    ActiveSheet.PageSetup.PrintArea = Rng.Address
End Sub

J'obtiens ce pdf
 

Pièces jointes

  • union.png
    union.png
    300.2 KB · Affichages: 10
  • Classeur2.pdf
    75.1 KB · Affichages: 7

pierrejean

XLDnaute Barbatruc
Bonjour kiki
Salut Chris699
tester:
VB:
Sub test()

'Selectionne la plages à imprimer par rapport dernière cellule nion vide sous y
With Sheets("TEST")
Derlig = Sheets("TEST").Range("X" & Rows.Count).End(xlUp).Row
Dim pag1 As Range
Dim Pag2 As Range
Set pag1 = Range(Cells(1, "A"), Cells(43, "J"))
Set Pag2 = Range(Cells(2, "L"), Cells(Derlig, "Y"))
Union(pag1, Pag2).Select
End With
End Sub

C'est le set qui fait la différence
 

patricktoulon

XLDnaute Barbatruc
bonjour a tous
l'erreur est normal et est connue
je la met en évidence en rouge
Set Pag1 = .Range(.Cells(1, "A"), .Cells(43, "J"))
et pareil pour l'autre

VB:
Sub test()
Dim pag1 As Range, pag2 As Range
'Selectionne la plages à imprimer par rapport dernière cellule nion vide sous y
With Sheets("TEST")
Set pag1 = .Range(.Cells(1, "A"), .Cells(43, "J"))
Set pag2 = .Range(.Cells(2, "L"), .Cells(Rows.Count, "x").End(xlUp))
Union(pag1, pag2).Select
End With
End Sub
 

chris6999

XLDnaute Impliqué
Re, curieux avec
VB:
Option Explicit

Sub Test()
Dim Pag1 As Range, Pag2 As Range, Pag3 As Range
Dim DerLig As Long, Rng As Range
    With Feuil1
        DerLig = .Range("X" & Rows.Count).End(xlUp).Row
        Set Pag1 = .Range(Cells(1, "A"), Cells(43, "J"))
        Set Pag2 = .Range(Cells(2, "L"), Cells(DerLig, "Y"))
        Set Pag3 = .Range("L34:P66")
        Set Rng = Union(Pag1, Pag2, Pag3)
        Rng.Select
    End With
    ActiveSheet.PageSetup.PrintArea = Rng.Address
End Sub

J'obtiens ce pdf


Ouiii ça marche mais après avoir retiré les . devant Range...
Merci encore et bonne journée
 

patricktoulon

XLDnaute Barbatruc
NON NON NON !!!!!!
tu es dans un block (with sheets("test"))
les points sont alors obligatoires!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
met toi sur une autre feuille et lance ta sub tu va voir :rolleyes:
et puis pour selectionner il faut que la feuille test soit active
VB:
Sub test()
Dim pag1 As Range, pag2 As Range
'Selectionne la plages à imprimer par rapport dernière cellule nion vide sous y
With Sheets("TEST")
.Activate
Set pag1 = .Range(.Cells(1, "A"), .Cells(43, "J"))
Set pag2 = .Range(.Cells(2, "L"), .Cells(Rows.Count, "x").End(xlUp))
Union(pag1, pag2).Select
End With
End Sub
 

chris6999

XLDnaute Impliqué
Bonjour kiki
Salut Chris699
tester:
VB:
Sub test()

'Selectionne la plages à imprimer par rapport dernière cellule nion vide sous y
With Sheets("TEST")
Derlig = Sheets("TEST").Range("X" & Rows.Count).End(xlUp).Row
Dim pag1 As Range
Dim Pag2 As Range
Set pag1 = Range(Cells(1, "A"), Cells(43, "J"))
Set Pag2 = Range(Cells(2, "L"), Cells(Derlig, "Y"))
Union(pag1, Pag2).Select
End With
End Sub

C'est le set qui fait la différence

Bonjour

Oui à priori cet élément fait toute la différence...cela me rappelle que même si je progresse je me rends compte que je n'y comprends toujours rien ... je ne désespère pas de pouvoir avoir ce type de réflexe un jour !

Très bonne journée
 

chris6999

XLDnaute Impliqué
NON NON NON !!!!!!
tu es dans un block (with sheets("test"))
les points sont alors obligatoires!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
met toi sur une autre feuille et lance ta sub tu va voir :rolleyes:
et puis pour selectionner il faut que la feuille test soit active
VB:
Sub test()
Dim pag1 As Range, pag2 As Range
'Selectionne la plages à imprimer par rapport dernière cellule nion vide sous y
With Sheets("TEST")
.Activate
Set pag1 = .Range(.Cells(1, "A"), .Cells(43, "J"))
Set pag2 = .Range(.Cells(2, "L"), .Cells(Rows.Count, "x").End(xlUp))
Union(pag1, pag2).Select
End With
End Sub

Il ne faut pas s'énerver comme ça .. c'est pas bon pour la santé.
En plus tu as tout à fait raison. J'ai testé à nouveau en les remettant il ne me bloque plus mais cela nécessite effectivement d'être sur la feuille en question sinon il n'aime pas.
Je pensais qu'avec le with et le numéro de la feuille concernée je n'aurais pas ce problème .. car mon code se lance depuis une autre feuille.
C'est pas grave toutefois, je peux activer cette fameuse feuille.

Merci encore et bonne journée
 

kiki29

XLDnaute Barbatruc
Re,
VB:
Option Explicit

Sub Test()
Dim Pag1 As Range, Pag2 As Range, Pag3 As Range
Dim DerLig As Long, Rng As Range
    With Feuil1
        DerLig = .Range("X" & Rows.Count).End(xlUp).Row
        Set Pag1 = .Range("A1:J43")
        Set Pag2 = .Range("L2: Y" & DerLig)
        Set Pag3 = .Range("L34:P66")
        Set Rng = Union(Pag1, Pag2, Pag3)

        .PageSetup.PrintArea = Rng.Address

        .ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                             ThisWorkbook.Path & "\" & "Union.pdf", _
                             Quality:=xlQualityStandard, _
                             IncludeDocProperties:=True, _
                             IgnorePrintAreas:=False, _
                             OpenAfterPublish:=False
    End With
End Sub
 

Discussions similaires

Réponses
1
Affichages
160
Réponses
0
Affichages
137
Réponses
2
Affichages
140

Statistiques des forums

Discussions
312 113
Messages
2 085 430
Membres
102 889
dernier inscrit
monsef JABBOUR