Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Pb Range dynamique

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sevyber

XLDnaute Nouveau
Bonjour,
Je suis néophyte en programmation et du coup je construit mes Macros en récupérant des bouts de codes et en les remaniant pour mes besoins.
Par contre sur celle ci dessous, j'avoue ne réussir a faire fonctionner aucun des codes que j'essaye.
J'explique le besoin:
J'ai un tableau constitué de x lignes.Ces lignes seront affectées ou non a une nouvelle page par des cases a cochés ("x") dans des colonnes en bout de lignes.Les pages sont nommés automatiquement de l’entête des colonnes. (cette partie du code est effectuée et fonctionne).Je cherche maintenant a recopier sur chacune des pages crées l'ensemble des lignes cochés de la colonne portant le même nom.

Sur ce point je bloque car je n'arrive pas à définir le code portant la plage dynamique.
J'ai essayé des codes du style Set PlageB = .Range(.Cells(2, col), .Cells(nbLig, col)) en ayant définie nbLig et col, mais je me fais jeter "reference incomplete ou non qualifié"..Bref je vous remercie d'avance de toutes aide que vous pourriez m'apporter sur ce sujet.
 

Pièces jointes

Re : Pb Range dynamique

Bonjour,
si ta question porte sur la manière de rechercher dans une plage sa dernière ligne et sa dernière colonne de manière à travailler sur la plage "utile", tu peux regarder ici sur le site de JB.
A+
 
Re : Pb Range dynamique

Re,
Merci pour le lien, mais malheureusement je l'ai déjà consulté sans succès.J'arrive a définir une plage quand j'ai au moins une donnée (col ou lig) qui est fixe (comme tu le dis par exemple si je travail sur la dernière colonne).Ici, les colonnes d'affectations sont multiples et chacune correspond avec une feuille. Il doit donc y avoir X colonnes d'attribution (ex:6002,6003,6004,6...) avec X feuilles de recopie (6002,6003,6004,6...). La seule donnée invariable c'est que la 1ere colonne commence en H.
Pour l'instant le code ce limite a ça:

Sub creerFeuilles()
Dim curCell As Range
Dim ong As Worksheet
Dim curWsht As Worksheet
Dim cell As Range
Dim col As Integer
Application.DisplayAlerts = False

'J'efface d'abord toutes les feuilles autre que celle de référence pour ne pas générer d'erreur

For Each curWsht In ThisWorkbook.Sheets
If curWsht.Name <> "Matrice TS" Then curWsht.Delete
Next curWsht
Application.DisplayAlerts = True

'Je crée autant de nouvelles feuilles qu'ils y a de colonnes d'affectation dans le fichier de réference

Set curCell = ThisWorkbook.Sheets("Matrice TS").Range("H1")
While curCell.Value <> vbNullString
ThisWorkbook.Sheets.Add after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = curCell.Value
col = curCell.Column

'C'est ici qu'il faut que je recopie le tableau en fonction des coches sur la colonne correspondante a la feuille

Set curCell = curCell.Offset(0, 1)
Wend
ThisWorkbook.Sheets("Matrice TS").Select
End Sub


A vous lire, A+
 
Dernière édition:
Re : Pb Range dynamique

Re Bonjour,
J'ai avancé sur le code, mais je n'arrive toujours pas a bien définir le range, du coup, je ne copie que quelques lignes...
je jette l'éponge pour aujourd'hui, mais je ne desepere pas.

Sub DupliquerFeuilles()
Dim curCell As Range
Dim curWsht As Worksheet
Dim cel As Range
Dim rgSource As Range
Dim debut As String
Dim Dest As Range
Dim w1 As Worksheet
Dim w2 As Worksheet
Application.DisplayAlerts = False
For Each curWsht In ThisWorkbook.Sheets
If curWsht.Name <> "Matrice TS" Then curWsht.Delete
Next curWsht
Application.DisplayAlerts = True
Set curCell = ThisWorkbook.Sheets("Matrice TS").Range("H1")
Set w1 = Worksheets("Matrice TS")
While curCell.Value <> vbNullString
ThisWorkbook.Sheets.Add After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = curCell.Value

Set w2 = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
debut = curCell.Address(0, 0)
Set rgSource = w1.Range(debut, (debut & Range("H65536").End(xlUp).Row)) 'ce n'est pas bon!!
For Each cel In rgSource
If cel.Value <> "" Then
Set Dest = w2.Range("A65536").End(xlUp).Offset(1, 0)
Range(cel.Offset(0, -7), cel).Copy Dest 'il faut aussi que je fasse évoluer l'offset en même temps que l'ajout de feuille
End If
Next cel
Set curCell = curCell.Offset(0, 1)

Wend
ThisWorkbook.Sheets("Matrice TS").Select
End Sub
 
Dernière édition:
Re : Pb Range dynamique

Re
Le problème n'est pas seulement de définir une plage mais surtout de boucler sur les onglets pour recopier les lignes possédant une croix. Je te propose une solution qui n'est pas la plus rapide mais qui sera peut-être plus compréhensible.
Je t'ai laissé la partie du code que tu as fournie et l'ai complétée avec une autre Sub.
La macro se déclenche en appuyant sur le bouton "Extraction".
A+
 

Pièces jointes

Dernière édition:
Re : Pb Range dynamique

La première chose qui me vient c'est "impressionnant", je n'imaginais pas un résultat si probant aussi vite. Bon il faut que je prenne du temps a comprendre ce que tu a écrits (comme , Application.Match(CDbl(Sheet..) mais le resultat est la et je t'en remercie.
A bientot
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

R
Réponses
6
Affichages
3 K
richardM
R
B
Réponses
4
Affichages
1 K
bool2gom
B
N
  • Question Question
Réponses
5
Affichages
3 K
N
Réponses
0
Affichages
2 K
N
B
Réponses
4
Affichages
2 K
blondain
B
D
Réponses
3
Affichages
2 K
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…