Microsoft 365 VBA test : si la ou les colonnes à côté sont masquées, les enjamber

Viro_Major

XLDnaute Nouveau
Bonjour, suite à un event de changement de valeur, j’aimerais que le curseur se place sur la cellule de la première colonne à droite visible (affichée et non masquée)

Exemples :
* cellule C3 active, colonnes D et E masquées à détecté alors je veux sélectionner F3
* cellule C3 active, colonne D affichée (non masquée), alors sélectionner D3
* cellule C3 active, colonne D masquée et E affichée, alors sélectionner E3

Le bout de code devrait être générique pour fonctionner sur une plage de cellule, genre C3:Z20

Je n’arrive qu’à coder un embryon de ce dont j’ai besoin. Merci d’avance pour toute aide
 

Rouge

XLDnaute Impliqué
Bonjour,

A mettre dans le module de la feuille
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C3:Z20")) Is Nothing Then
        For i = Target.Column + 1 To 26
            If Columns(i).Hidden = False Then
                Cells(Target.Row, i).Select
                End
            End If
        Next i
    End If
End Sub

Cdlt
 

Viro_Major

XLDnaute Nouveau
Bonjour le fil

Si j'ai bien compris
On peut se passer de macro
Quand on saisit une valeur dans une cellule et qu'on valide avec la touche Tabulation au lieu d'ENTREE, on se retrouve dans la première cellule visible à droite (donc après les colonnes masquées si il y en a)

Intéressant ! Merci je ne connaissais pas cette astuce. Remarque, j’utilise un VPS via une tablette et son clavier n’a pas la touche Tabulation donc je me cantonnerai à la macro mais merci du tuyau

@Rouge merci infiniment. Je m’en servirai de support ultérieurement aussi pour d’autres besoins

Bon dimanche à tous
 

Viro_Major

XLDnaute Nouveau
@Staple1600

Un VPS (Virtual Private Server) est un compartiment d‘environnement virtualisé appartenant à un serveur dédié.
Bref, au lieu d’utiliser un ordinateur à la maison, depuis plusieurs années, je loue des machines distantes, auxquelles je me connecte via RDP (app gratuite à télécharger) sur ma tablette. Elles peuvent tourner sous Windows ou Linux
J’ai donc accès à Windows au travers de ma tablette, comme un ordi normal (difficile de faire la distinction) sauf qu’il n’est pas en ma possession physique.

Ca a de nombreux avantages. Notamment, aucun bruit, pas de chaleur dissipée, et c’est économique. Pas d’entretien à prévoir car les sociétés qui commercialisent les VPS s’occupent d’upgrader les composants périodiquement. Enfin, je peux laisser mon PC distant allumé jour et nuit H24 7/7, étant prévu pour, sans ralentissement, sans reboot. Donc je gagne du temps en manipulation aussi.
Et donc on peut s’y connecter par un téléphone, une tablette, ou bien un PC tout pourri qui tient tout juste la route, et tout de même jouir de machines très puissantes

Quelques sociétés qui en commercialisent
Avec Hetzner on peut les déployer au besoin, pour le temps voulu. Il n’y a pas d’échéance

Même principe mais en serveur dédié (machines plus grosses et cette fois complètes, pas partagées avec d’autres utilisateurs)

Il est aussi possible d’installer des templates de Windows gratuitement sans le louer (par exemple, Hetzner, société allemande, ne loue Windows que pour leurs serveurs mais pas pour les VPS. Ils acceptent qu’on installe sa propre copie !)
 

Viro_Major

XLDnaute Nouveau
Avec plaisir, je partage volontiers mes connaissances, et j’appelle au secours lorsque j’en manque :p jusque là, logique

69B1CE27-498C-4FE6-BFA3-3DF984E3685A.jpeg


De quelle façon suis-je sensé déclaré la variable i ? (Béaba, je me doute)
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Viro_Major, Staple, le fil,

moi, j'utilise Long pour les lignes, et Integer suffit pour les colonnes :

colonne maxi = XFD = 16384 : ça tient dans la plage d'un Integer

donc :
Dim i As Integer ou : Dim i%

Dim adr$, col%, lig&, i%

(col aussi en Integer)

soan
 

Viro_Major

XLDnaute Nouveau
Bonjour Viro_Major, Staple, le fil,

moi, j'utilise Long pour les lignes, et Integer suffit pour les colonnes :

colonne maxi = XFD = 16384 : ça tient dans la plage d'un Integer

donc :
Dim i As Integer ou : Dim i%

Dim adr$, col%, lig&, i%

(col aussi en Integer)

soan

merci ! Chiadé l’explication perfectionniste ;)

hum ok pour le Else, donc je le décolle : d’un espace pour lui redonner son sens originel ?
edit: non, ça se recolle, donc je supprime au lieu de ça
 

Discussions similaires