VBA - Sélectioner une plage de cellules
Résolu
zivodul8
Messages postés
229
Date d'inscription
Statut
Membre
Dernière intervention
-
zivodul8 Messages postés 229 Date d'inscription Statut Membre Dernière intervention -
zivodul8 Messages postés 229 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Manipuler un range ou plage de données en vba
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image de manchots sur une image de plage. retrouvez l'image originale de la plage. que cachent les manchots ? ✓ - Forum Windows
- Input signal out of range - Forum Ecran
- Trier des données excel - Guide
6 réponses
salut,
je pense pouvoir t'aider mais je ne saisis pas trop la partie qui pose problème :
comment est-ce-que tu détermines la plage à sélectionner si tu ne connais pas la première ligne et la dernière ligne de cette plage ?
précise un peu s'il te plaît
je pense pouvoir t'aider mais je ne saisis pas trop la partie qui pose problème :
comment est-ce-que tu détermines la plage à sélectionner si tu ne connais pas la première ligne et la dernière ligne de cette plage ?
précise un peu s'il te plaît
RefEdit est un "bouton" qui s'intègre à un UserForm et qui permet de sélectionner directement dans une feuille de calcul une plage de donnée. Et en gros :
UserForm1.RefEdit1.Value = "Données!$C$2:$C$11"
Peut être qu'il y a un autre moyen de sélectionner une plage de données directement mais je ne vois que celle là.
UserForm1.RefEdit1.Value = "Données!$C$2:$C$11"
Peut être qu'il y a un autre moyen de sélectionner une plage de données directement mais je ne vois que celle là.
au temps pour moi, je ne connaissais pas. je viens de tester et de découvrir à quoi ça sert !
ceci dit j'ai cherché un peu et bidouillé ça :
'tu récupères ce qu'il y a dans ton RefEdit
MaChaine = UserForm1.RefEdit1.Value
Tableau = Split(MaChaine, "!")
Sheets(1).Range("A1").Value = MaChaine
'première partie du split
Sheets(1).Range("A2").Value = Tableau(0)
'deuxième partie du split
Sheets(1).Range("A3").Value = Tableau(1)
'récupérer les adresses
Tableau2 = Split(Tableau(1), ":")
'1ere cellule
Sheets(1).Range("A4").Value = Tableau2(0)
'derniere cellule
Sheets(1).Range("A4").Value = Tableau2(1)
ceci dit j'ai cherché un peu et bidouillé ça :
'tu récupères ce qu'il y a dans ton RefEdit
MaChaine = UserForm1.RefEdit1.Value
Tableau = Split(MaChaine, "!")
Sheets(1).Range("A1").Value = MaChaine
'première partie du split
Sheets(1).Range("A2").Value = Tableau(0)
'deuxième partie du split
Sheets(1).Range("A3").Value = Tableau(1)
'récupérer les adresses
Tableau2 = Split(Tableau(1), ":")
'1ere cellule
Sheets(1).Range("A4").Value = Tableau2(0)
'derniere cellule
Sheets(1).Range("A4").Value = Tableau2(1)
bonjour
il faut déclencher par un bouton (ou autre) dans l'usf
à adapter
il faut déclencher par un bouton (ou autre) dans l'usf
Private Sub CommandButton1_Click() Dim zone As String zone = RefEdit1.Value With Range(zone) MsgBox "ligne haute: " & .Row MsgBox "ligne basse: " & .Row + .Rows.Count - 1 End With
à adapter
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
C'est exactement ça, merci Michel! Désolé ed555, j'ai pas compris comment tu procédés et c'est un peu long à mon goût.
Du coup j'ai voulu pousser un peut plus et extraire la colonne. Grâce à :
Le souci c'est que pour la colonne C par exemple, il me renvoi 3. Comment faire pour la convertir en caractère?
Du coup j'ai voulu pousser un peut plus et extraire la colonne. Grâce à :
With Range(plage) Pligne = .Row Dligne = .Row + .Rows.Count - 1 colonne = .Column End With
Le souci c'est que pour la colonne C par exemple, il me renvoi 3. Comment faire pour la convertir en caractère?
tu as eu raison de prendre la solution de michel_m, elle est meilleure !
pour ce qui est de convertir le numéro de colonne en lettre j'ai bien une idée mais pas très élégante... en gros tu actives une cellule de la colonne avec cells(1,n_colonne).Activate puis :
'tu récupères l'adresse
n = ActiveCell.Address
'dans l'adresse tu récupères seulement la lettre de la colonne
lettre_colonne = Right(Left(n, 2), 1)
pour ce qui est de convertir le numéro de colonne en lettre j'ai bien une idée mais pas très élégante... en gros tu actives une cellule de la colonne avec cells(1,n_colonne).Activate puis :
'tu récupères l'adresse
n = ActiveCell.Address
'dans l'adresse tu récupères seulement la lettre de la colonne
lettre_colonne = Right(Left(n, 2), 1)
Généralement en VBA on bosse avec la valeur numérique, plus facile (boucle par ex) à manipuler et moins vorace en RAM qu'un string
par exemple cells(2,3) est équivalent à range("C2")
mais on peutx bricoler une fonction pour retrouver la lettre
ci dessous mon bidouillage pour 2003 (colonne maxi 256 = IV) à améliorer
mais ce n'est pas ce que j'ai fait de mieux et son utilité m'a rarement convaincu
par exemple cells(2,3) est équivalent à range("C2")
mais on peutx bricoler une fonction pour retrouver la lettre
ci dessous mon bidouillage pour 2003 (colonne maxi 256 = IV) à améliorer
Function car_col(num As Integer) As String Dim serie As Byte Select Case num Case Is = 0 car_col = "#########" Case Is < 27 car_col = Chr(64 + num) Case Else serie = Int((num - 26) / 27) + 1 car_col = Chr(64 + serie) & Chr(64 + num - 26 * serie) End Select End Function
mais ce n'est pas ce que j'ai fait de mieux et son utilité m'a rarement convaincu
1 partout!!
J'y avais pensé aussi mais j'attendais de voir s'il y avait mieux mais finalement je vais prendre la solution proposer par ed555. J'ai toujours travailler avec Range("A1").Value (une bêtise apparemment), donc je me vois mal modifier toute ma macro
Merci à vous deux donc et bonne continuation =)
J'y avais pensé aussi mais j'attendais de voir s'il y avait mieux mais finalement je vais prendre la solution proposer par ed555. J'ai toujours travailler avec Range("A1").Value (une bêtise apparemment), donc je me vois mal modifier toute ma macro
Merci à vous deux donc et bonne continuation =)