Recuperer les numeros de colonne en selection multiple
Résolu/Fermé
eeam78
Messages postés
17
Date d'inscription
vendredi 22 juillet 2016
Statut
Membre
Dernière intervention
27 octobre 2016
-
23 août 2016 à 16:33
eeam78 Messages postés 17 Date d'inscription vendredi 22 juillet 2016 Statut Membre Dernière intervention 27 octobre 2016 - 24 août 2016 à 18:16
eeam78 Messages postés 17 Date d'inscription vendredi 22 juillet 2016 Statut Membre Dernière intervention 27 octobre 2016 - 24 août 2016 à 18:16
A voir également:
- Recuperer les numeros de colonne en selection multiple
- Comment récupérer les messages supprimés sur whatsapp - Guide
- Recuperer video youtube - Guide
- Whatsapp 2 numéros - Guide
- Comment récupérer un compte facebook piraté - Guide
- Déplacer une colonne excel - Guide
9 réponses
jordane45
Messages postés
38138
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 avril 2024
4 649
23 août 2016 à 16:45
23 août 2016 à 16:45
Bonjour,
Selection est un objet de type RANGE
Il a donc une propriété Columns
Tu peux donc faire :
Selection est un objet de type RANGE
Il a donc une propriété Columns
Tu peux donc faire :
For Each C In Selection.Columns Debug.Print "Colonne :" & C.Column Next
eeam78
Messages postés
17
Date d'inscription
vendredi 22 juillet 2016
Statut
Membre
Dernière intervention
27 octobre 2016
23 août 2016 à 16:51
23 août 2016 à 16:51
aie ! ....
je voulais adapter type de la recherche ( le "C" ) , alors qu'il suffisait d'adapter la zone de recherche (le "Selection") .
voilà pourquoi je trouvais pas ... c'est super simple .
dslé ... :-(
merci jordane45 !
eeam.
je voulais adapter type de la recherche ( le "C" ) , alors qu'il suffisait d'adapter la zone de recherche (le "Selection") .
voilà pourquoi je trouvais pas ... c'est super simple .
dslé ... :-(
merci jordane45 !
eeam.
eeam78
Messages postés
17
Date d'inscription
vendredi 22 juillet 2016
Statut
Membre
Dernière intervention
27 octobre 2016
23 août 2016 à 19:04
23 août 2016 à 19:04
re bjr ...
néanmoins : toujours sous les mêmes hypotheses , pourquoi ne peut on pas appeler directement le xieme element selectionné ??
En effet, si je veux la 4ieme colonne seulement , je ne peut pas faire
pourquoi me donne t il la 4eme colonne apres la 1ere ? c'est la 4eme parmi les selectionnees que je devrait recupérer . non ?
merci de vos eclaircissements ...
eeam
néanmoins : toujours sous les mêmes hypotheses , pourquoi ne peut on pas appeler directement le xieme element selectionné ??
En effet, si je veux la 4ieme colonne seulement , je ne peut pas faire
Debug.Print "4eme Colonne :" & Selection.Columns(4).Column
pourquoi me donne t il la 4eme colonne apres la 1ere ? c'est la 4eme parmi les selectionnees que je devrait recupérer . non ?
merci de vos eclaircissements ...
eeam
Utilisateur anonyme
Modifié par albkan le 23/08/2016 à 22:21
Modifié par albkan le 23/08/2016 à 22:21
Bonsoir eeam78,
Lorsque tu fais une sélection multiple, celle-ci comporte donc
à l'évidence plusieurs zones, dont le nombre est donné par
Selection.Areas.Count ; voici un petit exercice :
Sur ta feuille, fais cette sélection multiple :
colonnes C:E, I:L, O:Q
L'instruction : MsgBox Selection.Areas.Count
affichera 3, car il y a 3 zones.
Si par exemple tu veux modifier la largeur de la colonne K,
qui est la 3ème colonne de ta 2ème zone :
Si ton problème est réglé, merci d'aller en haut de page
pour cliquer sur « Marquer comme résolu ».
Cordialement. 😊
Lorsque tu fais une sélection multiple, celle-ci comporte donc
à l'évidence plusieurs zones, dont le nombre est donné par
Selection.Areas.Count ; voici un petit exercice :
Sur ta feuille, fais cette sélection multiple :
colonnes C:E, I:L, O:Q
L'instruction : MsgBox Selection.Areas.Count
affichera 3, car il y a 3 zones.
Si par exemple tu veux modifier la largeur de la colonne K,
qui est la 3ème colonne de ta 2ème zone :
Selection.Areas(2).Columns(3).ColumnWidth = 50
Si ton problème est réglé, merci d'aller en haut de page
pour cliquer sur « Marquer comme résolu ».
Cordialement. 😊
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
eeam78
Messages postés
17
Date d'inscription
vendredi 22 juillet 2016
Statut
Membre
Dernière intervention
27 octobre 2016
24 août 2016 à 11:46
24 août 2016 à 11:46
Bonjour Albkan , et merci de ta reponse .
En effet cela me rapproche de la solution .
Neanmoins, cela m'oblige a connaitre la zone de la colonne souhaitée.
Alors que ce qui m'interesse ici c'est de selectionner la xième colonne .
exemple : dans ton exemple de selection du dessus C:E, I:L, O:Q , la colonne K est la 6ieme de la selection.
mais si je selectionne C:F , J:L , O:Q
ton instruction ne me donnera pas la colonne K , alors que celle ci est encore en 6ieme position .
mais peut-etre n'est ce pas possible ...
merci en tt cas .
eeam
En effet cela me rapproche de la solution .
Neanmoins, cela m'oblige a connaitre la zone de la colonne souhaitée.
Alors que ce qui m'interesse ici c'est de selectionner la xième colonne .
exemple : dans ton exemple de selection du dessus C:E, I:L, O:Q , la colonne K est la 6ieme de la selection.
mais si je selectionne C:F , J:L , O:Q
ton instruction ne me donnera pas la colonne K , alors que celle ci est encore en 6ieme position .
mais peut-etre n'est ce pas possible ...
merci en tt cas .
eeam
jordane45
Messages postés
38138
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 avril 2024
4 649
24 août 2016 à 12:09
24 août 2016 à 12:09
Tu peux essayer ça et me dire si ça te va ?
Sub colTest() Dim ColSelect As Areas Dim nbCol As Long 'Colonnes selectionnées Set ColSelect = Selection.Areas 'Nombre de zone selectionnées (colonnes y compris celles contigues) nbCol = ColSelect.Count 'Liste des colonnes selectionnées For Each C In ColSelect Debug.Print "Colonne :" & C.Column Next 'On modifie la largeur d'une colonne en particulier (ici la deuxième de ma selection) ColSelect(2).ColumnWidth = 5 End Sub
eeam78
Messages postés
17
Date d'inscription
vendredi 22 juillet 2016
Statut
Membre
Dernière intervention
27 octobre 2016
24 août 2016 à 12:47
24 août 2016 à 12:47
pas vraiment en fait ... :
par exemple , la boucle FOR ne me liste pas les colonnes , mais liste la 1ere colonne de chaquie zone ; par exemple ds la seletion C:E, I:L, O:Q
il donne "colonne 3 , colonne 9, colonne 15" .
par ailleurs , chez moi, le ColSelect(2).ColumnWidth ne passe pas ..
dslé.
par exemple , la boucle FOR ne me liste pas les colonnes , mais liste la 1ere colonne de chaquie zone ; par exemple ds la seletion C:E, I:L, O:Q
il donne "colonne 3 , colonne 9, colonne 15" .
par ailleurs , chez moi, le ColSelect(2).ColumnWidth ne passe pas ..
dslé.
jordane45
Messages postés
38138
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 avril 2024
4 649
Modifié par jordane45 le 24/08/2016 à 14:14
Modifié par jordane45 le 24/08/2016 à 14:14
Bon finalement je pense qu'en stockant dans un array c'est plus simple.
Voici un exemple complet.... dis moi ce que tu en penses.
Cordialement,
Jordane
Voici un exemple complet.... dis moi ce que tu en penses.
Sub colTest() Dim ColSelect As Areas Dim nbCol As Long Dim tblCol() Dim x As Long Dim numColonne As Long Dim monChoix As Long 'Colonnes selectionnées Set ColSelect = Selection.Areas 'Nombre de zone selectionnées (colonnes y compris celles contigues) nbCol = ColSelect.Count 'On Alimente l'array avec la Liste des colonnes selectionnées ReDim Preserve tblCol(0) For Each A In ColSelect If A.Columns.Count > 1 Then For Each C In A.Columns x = UBound(tblCol) + 1 ReDim Preserve tblCol(x) tblCol(x - 1) = C.Column Next Else x = UBound(tblCol) + 1 ReDim Preserve tblCol(x) tblCol(x - 1) = A.Column End If Next 'On affiche la liste des colonnes For i = 0 To UBound(tblCol) - 1 numColonne = tblCol(i) Debug.Print "Colonne N° " & numColonne & " => " & LettreColonne(numColonne) Next 'On cible une colonne en particulier (via son numero d'ordre ) monChoix = 3 'je cible la troisième colonne de ma liste ActiveSheet.Columns(tblCol(monChoix - 1)).Interior.Color = 5 End Sub Function LettreColonne(NumCol As Long) As String Dim reste, quotient As Long quotient = Int(NumCol / 26) reste = NumCol Mod 26 If quotient = 0 And reste = 0 Then Exit Function End If If quotient = 0 Then LettreColonne = Chr(64 + reste) Else If reste = 0 Then quotient = quotient - 1 If quotient = 0 Then LettreColonne = Chr(64 + 26) Else LettreColonne = Chr(64 + quotient) & Chr(64 + 26) End If Else LettreColonne = Chr(64 + quotient) & Chr(64 + reste) End If End If End Function
Cordialement,
Jordane
eeam78
Messages postés
17
Date d'inscription
vendredi 22 juillet 2016
Statut
Membre
Dernière intervention
27 octobre 2016
24 août 2016 à 18:16
24 août 2016 à 18:16
Merci Jordane,
En effet, ca fonctionne .
Je m'en étais "tiré" en faisant simplement une boucle FOR en incrementant un compteur a chaque colonne et en testant si le compteur etait = à x .
Mais j'en conviens ce n'est pas très élégant comme programmation , et souhaitais une approche, sinon plus simple, en tout cas plus académique . ce qui est fait . merci encore .
eeam.
En effet, ca fonctionne .
Je m'en étais "tiré" en faisant simplement une boucle FOR en incrementant un compteur a chaque colonne et en testant si le compteur etait = à x .
Mais j'en conviens ce n'est pas très élégant comme programmation , et souhaitais une approche, sinon plus simple, en tout cas plus académique . ce qui est fait . merci encore .
eeam.