Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de sélection d'une plage de cellules

9 réponses
Avatar
Bear76
Bonjour à toute la communauté,

A l'aide dune procédure, j'essaie de sélectionner une plage de cellule,
mais je n'y arrive pas. C'est au niveau du Set ZoneDateops que je
n'arrive pas à formuler correctement le second Cells(,)

Sub TestPlage()
Sheets("DONNEES").Select
Dim LibDateOps As Range, ZoneDateOps As Range
Dim Ligne As Integer, Colonne As Integer, DernièreLigne As Integer
Dim Cancel As Boolean
Set LibDateOps = Range(Cells(1, 1), Cells(1,
Range("IV1").End(xlToLeft).Column)).Find("DateOps", lookat:=xlWhole)
If LibDateOps Is Nothing Then
Cancel = True
Else
Ligne = LibDateOps.Row + 1
Colonne = LibDateOps.Column
Set ZoneDateOps = Range(Cells(Ligne, Colonne), Cells(Ligne,
Colonne).End(xlUp))
ZoneDateOps.Select
End If
End Sub

Merci d'avance

9 réponses

Avatar
Daniel.C
Bonjour.
Ca paraît correct et ça ne produit pas d'erreur chez moi. Tu peux
simplifier :
Set LibDateOps = Range(Cells(1, 1),
Range("IV1").End(xlToLeft)).Find("DateOps", lookat:=xlWhole)
Quel est ton problème ? une erreur ? ou ça ne fait pas ce que tu veux ?
Daniel

Bonjour à toute la communauté,

A l'aide dune procédure, j'essaie de sélectionner une plage de cellule, mais
je n'y arrive pas. C'est au niveau du Set ZoneDateops que je n'arrive pas à
formuler correctement le second Cells(,)

Sub TestPlage()
Sheets("DONNEES").Select
Dim LibDateOps As Range, ZoneDateOps As Range
Dim Ligne As Integer, Colonne As Integer, DernièreLigne As Integer
Dim Cancel As Boolean
Set LibDateOps = Range(Cells(1, 1), Cells(1,
Range("IV1").End(xlToLeft).Column)).Find("DateOps", lookat:=xlWhole)
If LibDateOps Is Nothing Then
Cancel = True
Else
Ligne = LibDateOps.Row + 1
Colonne = LibDateOps.Column
Set ZoneDateOps = Range(Cells(Ligne, Colonne), Cells(Ligne,
Colonne).End(xlUp))
ZoneDateOps.Select
End If
End Sub

Merci d'avance
Avatar
Daniel.C
Oups. Mon message précédent concernait "LibDateOps" comme tu as pu le
voir.
Daniel

Bonjour à toute la communauté,

A l'aide dune procédure, j'essaie de sélectionner une plage de cellule, mais
je n'y arrive pas. C'est au niveau du Set ZoneDateops que je n'arrive pas à
formuler correctement le second Cells(,)

Sub TestPlage()
Sheets("DONNEES").Select
Dim LibDateOps As Range, ZoneDateOps As Range
Dim Ligne As Integer, Colonne As Integer, DernièreLigne As Integer
Dim Cancel As Boolean
Set LibDateOps = Range(Cells(1, 1), Cells(1,
Range("IV1").End(xlToLeft).Column)).Find("DateOps", lookat:=xlWhole)
If LibDateOps Is Nothing Then
Cancel = True
Else
Ligne = LibDateOps.Row + 1
Colonne = LibDateOps.Column
Set ZoneDateOps = Range(Cells(Ligne, Colonne), Cells(Ligne,
Colonne).End(xlUp))
ZoneDateOps.Select
End If
End Sub

Merci d'avance
Avatar
Daniel.C
Sinon, mets :
Set ZoneDateOps = Range(Cells(Ligne, Colonne), Cells(65536,
Colonne).End(xlUp))
Daniel

Bonjour à toute la communauté,

A l'aide dune procédure, j'essaie de sélectionner une plage de cellule, mais
je n'y arrive pas. C'est au niveau du Set ZoneDateops que je n'arrive pas à
formuler correctement le second Cells(,)

Sub TestPlage()
Sheets("DONNEES").Select
Dim LibDateOps As Range, ZoneDateOps As Range
Dim Ligne As Integer, Colonne As Integer, DernièreLigne As Integer
Dim Cancel As Boolean
Set LibDateOps = Range(Cells(1, 1), Cells(1,
Range("IV1").End(xlToLeft).Column)).Find("DateOps", lookat:=xlWhole)
If LibDateOps Is Nothing Then
Cancel = True
Else
Ligne = LibDateOps.Row + 1
Colonne = LibDateOps.Column
Set ZoneDateOps = Range(Cells(Ligne, Colonne), Cells(Ligne,
Colonne).End(xlUp))
ZoneDateOps.Select
End If
End Sub

Merci d'avance
Avatar
michdenis
Bonjour,

A ) Le fait de publier un bout de code ne devrait pas t'empêcher
de définir ton problème. Comme le code n'est pas fonctionnel
ce n'est pas toujours simple de définir tes attentes.

B ) Regroupe tes variables sous la ligne de déclaration de la procédure.

C ) Pour manipuler une plage de cellules, nul besoin de la sélectionner.
Les variables objets sont là pour ça et cela rendre l'exécution du code
plus fluide et rapide !

D ) Pour rechercher une date, lorsque c'est possible, "Match" est plus
efficace que "Find"

Une suggestion de code pour ta procédure
(pas sûr d'avoir compris ce que tu veux faire)

'-----------------------------------------
Sub TestPlage()
'Déclaration des variables
Dim LibDateOps As Range, ZoneDateOps As Range
Dim DateOps As Date, Col As Variant
Dim Cancel As Boolean

DateOps = DateSerial(2010, 3, 20)

With Sheets("DONNEES")
Set LibDateOps = .Range("A1", .Cells(1, .Range("IV1").End(xlToLeft).Column))
End With
Col = Application.Match(CLng(DateOps), LibDateOps, 0)
If IsError(Col) Then
Cancel = True
Else
Set ZoneDateOps = LibDateOps.Offset(1, Col - 1) _
.Resize(, LibDateOps.Columns.Count - (Col - 1))
MsgBox "ZoneDateOps = " & ZoneDateOps.Address
End If
End Sub
'-----------------------------------------



"Bear76" a écrit dans le message de groupe de discussion :

Bonjour à toute la communauté,

A l'aide dune procédure, j'essaie de sélectionner une plage de cellule,
mais je n'y arrive pas. C'est au niveau du Set ZoneDateops que je
n'arrive pas à formuler correctement le second Cells(,)

Sub TestPlage()
Sheets("DONNEES").Select
Dim LibDateOps As Range, ZoneDateOps As Range
Dim Ligne As Integer, Colonne As Integer, DernièreLigne As Integer
Dim Cancel As Boolean
Set LibDateOps = Range(Cells(1, 1), Cells(1,
Range("IV1").End(xlToLeft).Column)).Find("DateOps", lookat:=xlWhole)
If LibDateOps Is Nothing Then
Cancel = True
Else
Ligne = LibDateOps.Row + 1
Colonne = LibDateOps.Column
Set ZoneDateOps = Range(Cells(Ligne, Colonne), Cells(Ligne,
Colonne).End(xlUp))
ZoneDateOps.Select
End If
End Sub

Merci d'avance
Avatar
Bear76
Dans son message précédent, Daniel.C a écrit :
Sinon, mets :
Set ZoneDateOps = Range(Cells(Ligne, Colonne), Cells(65536,
Colonne).End(xlUp))
Daniel

Bonjour à toute la communauté,

A l'aide dune procédure, j'essaie de sélectionner une plage de cellule,
mais je n'y arrive pas. C'est au niveau du Set ZoneDateops que je n'arrive
pas à formuler correctement le second Cells(,)

Sub TestPlage()
Sheets("DONNEES").Select
Dim LibDateOps As Range, ZoneDateOps As Range
Dim Ligne As Integer, Colonne As Integer, DernièreLigne As Integer
Dim Cancel As Boolean
Set LibDateOps = Range(Cells(1, 1), Cells(1,
Range("IV1").End(xlToLeft).Column)).Find("DateOps", lookat:=xlWhole)
If LibDateOps Is Nothing Then
Cancel = True
Else
Ligne = LibDateOps.Row + 1
Colonne = LibDateOps.Column
Set ZoneDateOps = Range(Cells(Ligne, Colonne), Cells(Ligne,
Colonne).End(xlUp))
ZoneDateOps.Select
End If
End Sub

Merci d'avance





Bonjour Daniel,
Ça ne marche pas chez moi, où alors j'ai peut-être mal expliquer mon
problème.
Si je sélectionne l'instance LibDateOps, cela me sélectionne dans ma
feuille de calculs la cellule J1 (résultat attendu)
Avec l'instance ZoneDateOps, je voudrais pouvoir sélectionner la plage
qui s'étendera de J2 jusqu'à hauteur de la dernière ligne de mon
tableau. En clair la plage J2:J900.
Actuellement ce qui est sélectionné, c'est J1:J2 ! lol
Cdlt
Avatar
michdenis
Selon tes commentaires apportés à une réponse précédente :

tu cherches plutôt ceci :

'--------------------------------------
Sub TestPlage()

'Déclaration des variables
Dim LibDateOps As Range, ZoneDateOps As Range
Dim DateOps As Date, Col As Variant
Dim Cancel As Boolean, DerLig As Long

DateOps = DateSerial(2010, 3, 20)

With Sheets("DONNEES")
Col = Application.Match(CLng(DateOps), .Range("1:1"), 0)
If IsError(Col) Then
Cancel = True
Else
With .Columns(Col)
DerLig = .Find(What:="*", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
End If
Set ZoneDateOps = .Range(.Cells(2, Col), .Cells(DerLig, Col))
MsgBox "ZoneDateOps = " & ZoneDateOps.Address
End With

End Sub
'--------------------------------------




"michdenis" a écrit dans le message de groupe de discussion :

Bonjour,

A ) Le fait de publier un bout de code ne devrait pas t'empêcher
de définir ton problème. Comme le code n'est pas fonctionnel
ce n'est pas toujours simple de définir tes attentes.

B ) Regroupe tes variables sous la ligne de déclaration de la procédure.

C ) Pour manipuler une plage de cellules, nul besoin de la sélectionner.
Les variables objets sont là pour ça et cela rendre l'exécution du code
plus fluide et rapide !

D ) Pour rechercher une date, lorsque c'est possible, "Match" est plus
efficace que "Find"

Une suggestion de code pour ta procédure
(pas sûr d'avoir compris ce que tu veux faire)

'-----------------------------------------
Sub TestPlage()
'Déclaration des variables
Dim LibDateOps As Range, ZoneDateOps As Range
Dim DateOps As Date, Col As Variant
Dim Cancel As Boolean

DateOps = DateSerial(2010, 3, 20)

With Sheets("DONNEES")
Set LibDateOps = .Range("A1", .Cells(1, .Range("IV1").End(xlToLeft).Column))
End With
Col = Application.Match(CLng(DateOps), LibDateOps, 0)
If IsError(Col) Then
Cancel = True
Else
Set ZoneDateOps = LibDateOps.Offset(1, Col - 1) _
.Resize(, LibDateOps.Columns.Count - (Col - 1))
MsgBox "ZoneDateOps = " & ZoneDateOps.Address
End If
End Sub
'-----------------------------------------



"Bear76" a écrit dans le message de groupe de discussion :

Bonjour à toute la communauté,

A l'aide dune procédure, j'essaie de sélectionner une plage de cellule,
mais je n'y arrive pas. C'est au niveau du Set ZoneDateops que je
n'arrive pas à formuler correctement le second Cells(,)

Sub TestPlage()
Sheets("DONNEES").Select
Dim LibDateOps As Range, ZoneDateOps As Range
Dim Ligne As Integer, Colonne As Integer, DernièreLigne As Integer
Dim Cancel As Boolean
Set LibDateOps = Range(Cells(1, 1), Cells(1,
Range("IV1").End(xlToLeft).Column)).Find("DateOps", lookat:=xlWhole)
If LibDateOps Is Nothing Then
Cancel = True
Else
Ligne = LibDateOps.Row + 1
Colonne = LibDateOps.Column
Set ZoneDateOps = Range(Cells(Ligne, Colonne), Cells(Ligne,
Colonne).End(xlUp))
ZoneDateOps.Select
End If
End Sub

Merci d'avance
Avatar
Bear76
michdenis a formulé la demande :
Bonjour,

A ) Le fait de publier un bout de code ne devrait pas t'empêcher
de définir ton problème. Comme le code n'est pas fonctionnel
ce n'est pas toujours simple de définir tes attentes.

B ) Regroupe tes variables sous la ligne de déclaration de la procédure.

C ) Pour manipuler une plage de cellules, nul besoin de la sélectionner.
Les variables objets sont là pour ça et cela rendre l'exécution du code
plus fluide et rapide !

D ) Pour rechercher une date, lorsque c'est possible, "Match" est plus
efficace que "Find"

Une suggestion de code pour ta procédure
(pas sûr d'avoir compris ce que tu veux faire)

'-----------------------------------------
Sub TestPlage()
'Déclaration des variables
Dim LibDateOps As Range, ZoneDateOps As Range
Dim DateOps As Date, Col As Variant
Dim Cancel As Boolean

DateOps = DateSerial(2010, 3, 20)

With Sheets("DONNEES")
Set LibDateOps = .Range("A1", .Cells(1,
.Range("IV1").End(xlToLeft).Column)) End With
Col = Application.Match(CLng(DateOps), LibDateOps, 0)
If IsError(Col) Then
Cancel = True
Else
Set ZoneDateOps = LibDateOps.Offset(1, Col - 1) _
.Resize(, LibDateOps.Columns.Count - (Col - 1))
MsgBox "ZoneDateOps = " & ZoneDateOps.Address
End If
End Sub
'-----------------------------------------



Bonjour,
Je travaille sur un tableau qui contient 9 colonnes et X lignes.
La première de mon tableau ne contient que des libellés.
Je souhaite pouvoir "automatiquement" dans la première cellule vide qui
suit le dernier libellés de cette ligne écrire le libellé "DateOps".
A l'aide de Find, je retrouve le libellé "DateOps" et à partir delà
pouvoir sélectionner ou définir la plage qui va s'étendre de la cellule
juste en dessous du libellé "DateOps" jusqu'à hauteur de la dernière
ligne de mon tableau.
Ensuite parcourir chaque cellule de cette plage pour écrire ou inscrire
une date (même date pour toute la plage). Date (sa valeur) pourrait
être appelée avec un inputbox.
Actuellement "DateOps" est en J1 et la plage à sélectionner ou à
définir s'étend de J2 à J900.
Cdlt
Avatar
michdenis
Bonjour,
Je travaille sur un tableau qui contient 9 colonnes et X lignes.
La première de mon tableau ne contient que des libellés.
Je souhaite pouvoir "automatiquement" dans la première cellule vide qui
suit le dernier libellés de cette ligne écrire le libellé "DateOps".
A l'aide de Find, je retrouve le libellé "DateOps" et à partir delà
pouvoir sélectionner ou définir la plage qui va s'étendre de la cellule
juste en dessous du libellé "DateOps" jusqu'à hauteur de la dernière
ligne de mon tableau.
Ensuite parcourir chaque cellule de cette plage pour écrire ou inscrire
une date (même date pour toute la plage). Date (sa valeur) pourrait
être appelée avec un inputbox.
Actuellement "DateOps" est en J1 et la plage à sélectionner ou à
définir s'étend de J2 à J900.
Cdlt
=========================================
Écrire une procédure en VBA n'est pas toujours facile, mais écrire
le libellé de sa question devrait l'être davantage... moi je trouve la
formulation déficiente !

Voici ma dernière réponse sur ce fil

'----------------------------------------
Sub TestPlage()

'Déclaration des variables
Dim LibDateOps As Range, ZoneDateOps As Range
Dim Col As Variant
Dim Cancel As Boolean, DerLig As Long

With Sheets("DONNEES")
Col = Application.Match("DateOps", .Range("1:1"), 0)
If IsError(Col) Then
Cancel = True
Else
With .Columns(Col)
DerLig = .Find(What:="*", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
End If
Set ZoneDateOps = .Range(.Cells(2, Col), Cells(DerLig, Col))
MsgBox "ZoneDateOps = " & ZoneDateOps.Address
End With

End Sub
'----------------------------------------
Avatar
Bear76
michdenis a formulé la demande :

Écrire une procédure en VBA n'est pas toujours facile, mais écrire
le libellé de sa question devrait l'être davantage... moi je trouve la
formulation déficiente !

Voici ma dernière réponse sur ce fil



Bonjour,
Désolé de n'avoir pu formuler correctement ma question. Je ferais
preuve d'une plus grande rigueur la prochaine fois.
Au bout du compte ma procédure fonctionnait tout comme celle de DanielC
et la votre bien entendu.
Le problème venait simplement du fait que les cellules de la plage
considérée étaient vides.
Merci de votre (DanielC et vous-même) aide.
Cdlt