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 :

Selectionner un tab dans un StripTab en fonction d'une variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut Selectionner un tab dans un StripTab en fonction d'une variable
    Bonjour,

    J'ai crée un StripTab avec des onglets, je voudrai sélectionner / activer le tab qui aura pour intitulé le contenu d'une variable.

    par exemple, si la variable "nom_onglet" contient "MUR", je voudrai que l'onglet 'MUR' soit sélectionné :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim nom_onglet as String
    Dim i as byte
     
     
    For i = 0 To Me.TabStrip.Tabs.Count
     
        If Me.TabStrip.Tabs(i).Caption = nom_onglet Then
     
            Me.TabStrip.Value = i
     
        End If
     
    Next i

    Pour l'instant, j'ai l'erreur : 4argument ou appel de procédure incorrecte.
    La ligne suivante est pointée pour cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.TabStrip.Tabs(i).Caption = nom_onglet Then

    Pouvez vous m'indiquer ce qui pose problème svp ?
    Merci a vous,

  2. #2
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Points : 219
    Points
    219
    Par défaut
    Voici une procédure similaire, et qui fonctionne (sur office365:
    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
    Private Sub UserForm_Click()    
        Dim nom_onglet As String
        Dim i As Long
     
        nom_onglet = "Mur"
     
        For i = 0 To Me.MultiPage1.Pages.Count - 1
           If Me.MultiPage1.Pages(i).Caption = nom_onglet Then
     
               Me.MultiPage1.Value = i
               Debug.Print Me.MultiPage1.Value
     
           End If
        Next i
    End Sub

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    C'est curieux ça ne fonctionne toujours pas, je suis en Excel 2021.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Me.TabStrip.Tabs(i).Caption
    Cette ligne renvoi bien le nom du 1er onglet et c'est lorsque le code teste si le nom de l'onglet correspond à la variable que ça plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.TabStrip.Pages(i).Caption = nom_onglet Then
    Peut etre que la variable ne doit pas être déclarée comme String ?

  4. #4
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Points : 219
    Points
    219
    Par défaut
    Essayez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.TabStrip.Pages(i).Caption = "'" & nom_onglet & "'" Then
    'apostrophe entre guillemets

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    Désolé mais ça la condition "if" ne se réalise toujours pas.

    On dirait qu'on ne peut pas comparer une string avec Tabs.Caption, pourtant lorsqu'on cherche à l'afficher via msgbox, la valeur attendue est bien présente

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Attention, il me semble que dans cette discussion, on mélange les contrôles TabStrip et MultiPage

    Voici un exemple de code dans un UserForm qui contient les deux contrôles et qui modifie la propriété Caption du deuxième onglet pour TabStrip et la deuxième page du MutlitPage et qui les sélectionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub UserForm_Initialize()
      With Me
       ' Contrôle d'onglet
       With .TabStrip1
       .Tabs(1).Caption = "Afrique"
       .Value = 1         ' Sélection
       End With
       ' Multipage
       With .MultiPage1
       .Pages(1).Caption = "Afrique"
       .Value = 1         ' Sélection
       End With
      End With
    End Sub
    Nom : 220927 dvp TabStrip - MutliPage.png
Affichages : 259
Taille : 3,0 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    Merci,

    Je cherche à tester les Tabs, mais la condition if ne se réalise pas, pouvez vous me dire pourquoi ?
    Dans msgbox, la valeur attendue est bien présente cependant



    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
            ' Selectionne l'onglet dans le TabStrip en fonction du titre de la fiche chargée
     
            Dim j as Byte
            Dim var as String
     
            For j = 0 To Me.TabStrip.Tabs.Count - 1
     
                val = "'" & titre_onglet & "'"
     
                If Me.TabStrip.Tabs(j).Caption = val Then
     
                    MsgBox Me.TabStrip.Tabs(j).Caption
     
                    Me.TabStrip.Value = j
     
                    Debug.Print Me.TabStrip.Value
     
                End If
     
            Next j

  8. #8
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2022
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Points : 219
    Points
    219
    Par défaut
    En effet, Philippe a raison; voir son exemple !

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un exemple d'une procédure qui renvoie la position du nom de l'onglet cherché (sa propriété Caption)
    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
    Function TabPosition(Ctrl As msforms.TabStrip, TabName As String) As Integer
      ' Renvoie la position de l'onglet cherché
      ' Arguments
      '   Ctrl      Objet TabStrip
      '   TabName   Nom de l'onglet (propriété Caption de Tabs)
      Dim e As Integer
      Dim Flag As Boolean
      With Ctrl
        While (Not Flag) And .Tabs.Count > e
          Flag = (StrComp(TabName, .Tabs(e).Caption, vbTextCompare) = 0)
          If Flag Then TabPosition = e
          e = e + 1
        Wend
      End With
    End Function
    Exemple d'une procédure qui l'invoque et qui sélectionne l'onglet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub cmdGo_Click()
      Me.TabStrip1.Value = TabPosition(Me.TabStrip1, "client")
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    Merci beaucoup Philippe, ce code fonctionne parfaitement.

    je n'aurai pas été capable de l'écrire moi même.

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Après relecture de votre demande, je crois que votre problème vient du début de la boucle For i = 0 To Me.TabStrip.Tabs.Count -1 où il y a lieu d'ajouter -1 ce qui explique l'erreur à la ligne If Me.TabStrip.Tabs(i).Caption = nom_onglet Then

    Explication
    Si vous avez 3 onglets, la propriété Count renvoie 3 mais comme la numérotation des collections commence à 0, c'est Tabs(0), Tabs(1) et Tabs(2) et comme la boucle commence de 0 à Me.TabStrip.Tabs.Count (qui vaut 3), il y a une erreur lorsque la variable i vaut 3
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Points : 52
    Points
    52
    Par défaut
    Merci pour cette précision,

    sur le même principe, si on veut une fonction pour effacer tout les tabs on pourrait partir sur une solution comme celle-ci ?

    ce code ne fonctionne pas non plus ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            For n = 0 To Me.TabStrip.Tabs.Count - 1
                TabStrip.Tabs.Remove (n)
            Next n

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme pour la suppression des lignes et colonnes d'une feuille excel, il faut partir de la valeur maximale et Il faut conserver un onglet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub ExempleRemove()
      Dim i As Integer
      With Me.TabStrip1.Tabs
        For i = .Count - 1 To 1 Step -1
          .Remove i
        Next
      End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/02/2010, 14h29
  2. Réponses: 2
    Dernier message: 05/03/2008, 22h01
  3. Réponses: 0
    Dernier message: 18/02/2008, 22h05
  4. Réponses: 1
    Dernier message: 06/12/2007, 19h42
  5. Réponses: 4
    Dernier message: 12/06/2006, 11h46

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