IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Saut de cellule parametrable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 55
    Points : 31
    Points
    31
    Par défaut Saut de cellule parametrable
    Bonjour,

    Je voudrais savoir si c'est possible de parametrer en fonction des cellules
    le saut des cellules sur les colonnes "C" et "D"

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Je suis sur range("C2") et je veux aller directement à range("C5"), je saisie une valeur et en faisant Entr, je suis positionné en range("C5") et ainsi de suite.
    Est-ce que c'est possible?
    Je suis sur range("C5") et je veux aller directement à range("C10").
    Je suis sur range("C10") et je veux aller directement à range("C13").
    Je suis sur range("C13") et je veux aller directement à range("C19").
    Je suis sur range("C19") et je veux aller directement à range("C24").
     
    Je suis sur range("D2") et je veux aller directement à range("D2").
    Je suis sur range("D5") et je veux aller directement à range("D10").
    Je suis sur range("D10") et je veux aller directement à range("D13").
    Je suis sur range("D13") et je veux aller directement à range("D19").
    Je suis sur range("D19") et je veux aller directement à range("D24").
    Merci par avance de votre aide.

    Très cordialement

    Norbert

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Jète un oeil à Offset, ça correspond à ce que tu veux... mais je ne comprends pas vraiment ce que tu veux...

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Il y a toujours la protection de la feuille + déverouiller les cellules voulues mais tu es pris dans une séquence 'Colonne C ensuite Colonne D ensuite Colonne C' ...

    Mais si tu veux pouvoir sortir de ta séquence d'une colonne et sélectionner d'autres cellules, voici un exemple de code qui pourrait faire l'affaire et que tu peux modifier selon tes besoins. Tout ça sans protéger la feuille...

    Dans le module de ThisWorkbook:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    Public SequenceCellulesC As New Collection
    Public SequenceCellulesD As New Collection
    Public PrevCell As Range
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Set SequenceCellulesC = Nothing
        Set SequenceCellulesD = Nothing
    End Sub
     
    Private Sub Workbook_Open()
        Dim wks As Worksheet
     
        Set wks = Worksheets("Feuil1")
        With SequenceCellulesC
            .Add wks.Range("C2")
            .Add wks.Range("C5")
            .Add wks.Range("C10")
            .Add wks.Range("C13")
            .Add wks.Range("C19")
            .Add wks.Range("C24")
        End With
     
        With SequenceCellulesD
            .Add wks.Range("D2")
            .Add wks.Range("D5")
            .Add wks.Range("D10")
            .Add wks.Range("D13")
            .Add wks.Range("D19")
            .Add wks.Range("D24")
        End With
        Set PrevCell = Selection.Cells(1)
    End Sub
     
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        Dim i As Long
     
        If TypeName(Sh) = "Worksheet" Then
            If Sh.Name = "Feuil1" Then
                ' Tester pour la colonne C
                For i = 1 To SequenceCellulesC.Count
                    If PrevCell.Address = SequenceCellulesC(i).Address Then
                        Application.EnableEvents = False
                        ' Le If suivant pourrait être :
                        '   If i = SequenceCellulesD.Count Then
                        '       SequenceCellulesD(1).Select
                        '   End If
                        ' si l'utilisateur doit aller en colonne D
                        If Not i = SequenceCellulesC.Count Then
                            SequenceCellulesC(i + 1).Select
                        End If
                        Application.EnableEvents = True
                        Set PrevCell = Selection
                        Exit Sub
                    End If
                Next i
     
                ' Tester pour la colonne D
                For i = 1 To SequenceCellulesD.Count
                    If PrevCell.Address = SequenceCellulesD(i).Address Then
                        Application.EnableEvents = False
                        ' Le If suivant pourrait être :
                        '   If i = SequenceCellulesD.Count Then
                        '       SequenceCellulesC(1).Select
                        '   End If
                        ' si l'utilisateur doit aller en colonne C
                        If Not i = SequenceCellulesD.Count Then
                            SequenceCellulesD(i + 1).Select
                        End If
                        Application.EnableEvents = True
                        Set PrevCell = Selection
                        Exit Sub
                    End If
                Next i
                Set PrevCell = Selection
            End If
        End If
    End Sub

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    Bonjour Singular,

    C'est parfait mais cela ne fonctionne que sur 1 feuille d'un classeur, pour 9 feuilles dans le même classeur.
    C'est possible????????????????????????????
    Merci pour ton aide

    Très cordialement

    Norbert

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Bonsoir,
    Tu peux tester ça

    Dans toutes les feuilles de code de tes feuilles de calculs tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Adres
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Adres = "" Then _
            Test (Target.Address(False, False))
    End Sub
    et dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Test(Adres)
    Dim Tablo As Variant, i As Integer
    Tablo = Array("C2", "C5", "C10", "C13", "C19", "C24", "D2", "D5", "D10", "D13", "D19", "D24")
    For i = 0 To UBound(Tablo) - 1
        If Adres = Tablo(i) Then ActiveSheet.Range(Tablo(i + 1)).Select
    Next
    End Sub
    A+

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Je ne crois pas que la méthode de ouskel'n'or fera ton affaire mais il emploit des raccourcis que j'aurais dû employer moi-même.

    Voici un code que tu peux adapter pour faire ce que tu veux et qui te permet de sortir de la séquence en fin de colonne.

    Tu mets tout ça dans le module de ThisWorkbook.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Dim AdressesCellulesC As Variant
    Dim AdressesCellulesD As Variant
    Dim NomsFeuilles As Variant
    Dim AddressePecedante As Variant
     
    Private Sub Workbook_Open()
        NomsFeuilles = Array("Feuil1", "Feuil2") ' En fait, tu mets les noms des feuilles que tu veux traiter
        AddressePecedante = Array("A1", "A1") ' Autant d'élements que dans NomsFeuilles
        AdressesCellulesC = Array("C2", "C5", "C10", "C13", "C19", "C24")
        AdressesCellulesD = Array("D2", "D5", "D10", "D13", "D19", "D24")
    End Sub
     
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        Dim lNom As Long
        Dim lCellule As Long
     
        If TypeName(Sh) = "Worksheet" Then
            For lNom = LBound(NomsFeuilles) To UBound(NomsFeuilles)
                If Sh.Name = NomsFeuilles(lNom) Then
                    ' La feuille fait partie des feuilles gérées...
     
                    ' Tester pour la colonne C
                    For lCellule = LBound(AdressesCellulesC) To UBound(AdressesCellulesC)
                        If AddressePecedante(lNom) = AdressesCellulesC(lCellule) Then
                            If Not lCellule = UBound(AdressesCellulesC) Then
                                Application.EnableEvents = False
                                Sh.Range(AdressesCellulesC(lCellule + 1)).Select
                                Application.EnableEvents = True
                                AddressePecedante(lNom) = Selection.Address(RowAbsolute:=False, ColumnAbsolute:=False)
                                Exit Sub
                            End If
                        End If
                    Next lCellule
     
                    ' Tester pour la colonne D
                    For lCellule = LBound(AdressesCellulesD) To UBound(AdressesCellulesD)
                        If AddressePecedante(lNom) = AdressesCellulesD(lCellule) Then
                            If Not lCellule = UBound(AdressesCellulesD) Then
                                Application.EnableEvents = False
                                Sh.Range(AdressesCellulesD(lCellule + 1)).Select
                                Application.EnableEvents = True
                                AddressePecedante(lNom) = Selection.Address(RowAbsolute:=False, ColumnAbsolute:=False)
                                Exit Sub
                            End If
                        End If
                    Next lCellule
                    ' Bonne feuille mais pas une cellule gérée donc,
                    AddressePecedante(lNom) = Selection.Address(RowAbsolute:=False, ColumnAbsolute:=False)
                    Exit Sub
                End If
            Next lNom
        End If
    End Sub

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 55
    Points : 31
    Points
    31
    Par défaut
    Bonjour Homme de l'OR et Homme de l'AR,

    J'ai testé vos deux versions mais sans vouloir blesser Ouskel'n'or, je préfère
    la méthode de Singular.

    C'est comme d'habitude parfait.

    Encore une fois un très grand merci.

    Amicalement

    Norbert

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] VBA - Equivalent Wraptext pour saut de cellule
    Par corty69 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/12/2010, 11h18
  2. saut de cellule
    Par fmris dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/06/2007, 16h47
  3. [VBA-E] Saut de cellule non demandé
    Par luudii dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/04/2007, 16h33
  4. [JTable] Saut de ligne dans la cellule d'une JTable
    Par enocet dans le forum Composants
    Réponses: 3
    Dernier message: 15/12/2005, 13h16
  5. Export vers Excel et saut de ligne dans cellule
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo