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 :

Définition de commandes en Français et Anglais [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Points : 73
    Points
    73
    Par défaut Définition de commandes en Français et Anglais
    Bonjour à tous,
    Voici mon sujet.
    J'ai ce petit bout de code qui me permet de définir la commande utilisée. Je traite ensuite le cas où celle ci est "Supprimer" ou "Effacer".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ......
    With Application.CommandBars("Standard")
                    'recherche de la liste de Undo
                    I = .FindControl(ID:=128).Index
                    c = .Controls(I).List(1)
                    'MsgBox ("C " & C)
                End With
                If c = "Supprimer" Or c = "Effacer" Then
                ........
    Ça marche très bien, mais j'ai besoin de traiter la version Anglaise de ma macro, pour mes collègues aux US.
    Je me doute que là bas, C n'aura jamais la valeur "Supprimer" ni "Effacer". Mais plutôt "Delete" ou "Arase"

    Mes questions :
    Quels sont les termes exacts?
    Si j'ajoute des OR à ma condition, est ce que ça marchera?

    Merci pour vos retours
    Benoit

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par BenoitL77 Voir le message
    Si j'ajoute des OR à ma condition, est ce que ça marchera?
    C'est fortement probable.

    La seule chose qui pourrait l'empêcher de fonctionner, c'est que les commandes "Effacer" et "Supprimer" correspondent à d'autres commandes dans la version US, ce qui est très improbable.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Points : 73
    Points
    73
    Par défaut
    Merci Menhir pour ton retour.

    Je vais tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If c = "Supprimer" Or c = "Effacer" Or c = "Delete" Or c = "Clear" Then
    avec mes collèges quand ils seront levés...
    J'ai quand même de gros doute sur les termes "Delete" et "Clear". Si quelqu'un connait les bons, je suis preneur !

    Merci
    Benoit

  4. #4
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonjour,
    Si j'ajoute des OR à ma condition, est ce que ça marchera?
    Et si tu test avec des OR est-ce ça marche ?

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Demande à tes correspondants US de faire tourner la macro suivante et de te renvoyer par mail ce qui sort dans la fenêtre d'exécution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
       Dim J As Long
       For J = 1 To Application.CommandBars("Standard").Controls.Count
          Debug.Print J, Application.CommandBars("Standard").Controls(J).TooltipText
       Next J
       For J = 1 To Application.CommandBars("Standard").Controls.Count
          Debug.Print J, Application.CommandBars("Standard").Controls(J).Caption
       Next J
    End Sub
    Ca te donnera peut-être une idée du texte de tes contrôles outre-atlantique.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Outre le fait que je ne comprends pas bien ce que tu veux dire par "définir la commande utilisée", je pense qu'il est plus fiable de s'appuyer sur les ID qui sont communs à toutes les versions linguistiques. C'est le but même de l'ID qui ne connait pas de différenciation linguistique comme le Caption.

    Dès lors que tu identifies l'ID 128, tu ne devrais pas avoir besoin de savoir comment s'appelle la commande qui est derrière...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 420
    Points : 2 179
    Points
    2 179
    Par défaut
    Bonjour Pierre,
    Encore faut-il que pour notre ami la définition de Id soit la même que la tienne,vu que l'information est écrit en dur !

  8. #8
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Points : 73
    Points
    73
    Par défaut
    Bonjour Pierre, Thumb down
    Merci pour vos retours

    C'est Pijaku qui m'avait écrit ce code. Et compte tenu de son efficacité et de mon petit niveau, je ne l'ai pas mis en doute.

    A noter : je ne passe dans ce code que si j'ai sélectionné une seule ligne complète.

    Je viens de tester et la valeur de I est toujours 14, qque soit l'action que je fait sur ma ligne sélectionnée :
    -clic droit, Effacer le contenu
    -clic droit, Supprimer
    -clic droit, Insérer
    -idem par le clavier
    ...

    Or, je ne veux rentrer dans mon IF que si j'ai Supprimer ou Effacer, mais pas Insérer.
    D'où le besoin de tester ensuite le texte c, qui lui change en fonction de l'action. C'est ce que je comprends.

    Mais si il existe des ID dédiés pour Supprimer et Effacer, alors effectivement, ça réglerait mon pb de Français/Anglais.
    Comment/où je peux trouver ces ID?

    Merci Menhir pour ta macro.

    Bon appétit !

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Pourrais-tu donner le code en amont (un code événementiel, je suppose)?

    Perso, application.commandbars("standard").controls.count renvoie 0 (XL 365)... Je voudrais voir dans quel contexte ton code renvoie 14 et sur quelle propriété il renvoie 14?

    Plus globalement, je voudrais comprendre ce que tu cherches à réaliser...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Points : 73
    Points
    73
    Par défaut
    Pierre,
    Ci dessous le code complet.
    Lorsque je supprime ou efface une ligne complète, si celle ci répond à certaines conditions, alors je veux proposer de supprimer l'onglet qui s'y attache (càd l'onglet qui porte le même nom que la valeur en colonne H).

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Option Explicit
     
    Dim ongletsupp As String
     
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'pour définir si la selection est éligible à worksheet_change
     
    ongletsupp = ""
    Dim x As Long
    x = Intersect(Target.EntireRow, Columns(1)).Cells.Count 'compte les lignes de la sélection, même si sélection multiple
     
    If x = 1 Then 'si sélection porte sur une seule ligne
        If Target.Address = Target.EntireRow.Address Then 'et si la selection est une ligne complète
            If Target.Columns(7) = "" Then 'et si "" en G
                If IsError(Target.Columns(8)) Then  'si erreur car si l'onglet est déjà supprimé, colonne H est #REF et ça bug
                ongletsupp = ""
                Else
                ongletsupp = Target.Columns(8) 'si tout bon !
                End If
            Else
            ongletsupp = "" 'si "option en G
            End If
        Else
        ongletsupp = "" 'si pas une ligne complète
        End If
    Else 'si selection porte sur plusieurs lignes
    ongletsupp = ""
    End If
     
    'MsgBox ongletsupp & "  " & x
     
    End Sub
     
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    'si suppression d'une seule ligne, on propose de supprimer l'onglet correspondant
     
    Dim c As String, I As Long
    If ongletsupp <> "" Then   'si il y a un code (donc une seule ligne sélectionnée), on propose de supprimer l'onglet correspondant
    ongletexiste = False
        For Each onglet In Worksheets   'vérifier que l'onglet demandé existe dans l'offre, au cas où il aurait déjà été supprimé
            If onglet.Name = ongletsupp Then
            ongletexiste = True
            End If
        Next onglet
            If ongletexiste = False Then
            ongletsupp = ""
            'MsgBox "existe pas"
            Exit Sub
            Else
                'on vérifie l'action faite dans la barre d'outils
                With Application.CommandBars("Standard")
                    On Error Resume Next    'permet de passer outre si l'action n'est pas dans la liste Control, notamment "afficher"
                                            'C sera ="", donc on ne passera pas dans la boucle IF suivante
                    'recherche de la liste de Undo
                    I = .FindControl(ID:=128).Index
                    MsgBox ("I = " & I)
                    c = .Controls(I).List(1)
                    'MsgBox ("C " & c)
                End With
                If c = "Supprimer" Or c = "Effacer" Or c = "Delete" Or c = "Clear" Then         's'il s'agit d'un "Supprimer" ou Effacer (obtenu en faisant Ctrl+X puis Suppr)
                    Dim A As Boolean
                    A = False
                    If Worksheets("Selection").Range("h4").Value = "Français" Then
                        If MsgBox("Vous avez supprimé la ligne " & ongletsupp & "." & Chr(13) & Chr(10) & "Voulez vous aussi supprimer l'onglet correspondant?", vbYesNo, "Confirmation") = vbYes Then
                        A = True
                        End If
                    Else
                        If MsgBox("You have delete lign " & ongletsupp & "." & Chr(13) & Chr(10) & "Do you wish also to delete attached sheet?", vbYesNo, "Confirmation") = vbYes Then
                        A = True
                        End If
                    End If
                    If A = True Then
                    Application.DisplayAlerts = False
                    Sheets(ongletsupp).Delete
                    Application.DisplayAlerts = True
                    End If
                End If
                c = ""      'raz pour ne pas garder une valeur en mémoire
                I = 0
            End If
    ongletsupp = "" 'raz pour ne pas garder une valeur en mémoire
     
    End If
     
    End Sub
    J'espère que ça t'éclairera et que ma façon de coder ne te piquera pas trop les yeux....

    Merci de ton aide
    Benoit

  11. #11
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Perso, application.commandbars("standard").controls.count renvoie 0 (XL 365)... Je voudrais voir dans quel contexte ton code renvoie 14 et sur quelle propriété il renvoie 14?
    J'ai testé ça en le tapant simplement dans la fenêtre d'exécution (précédé d'un "?") avec Excel 2013 et ça m'a répondu "23".
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Merci Menhir pour le test... Bizarre cette différence entre XL2013 et XL365

    Cela étant dit, si j'ai bien compris, on cherche à identifier si on supprime une ligne entière ou pas et l'on doit réagir si on supprime UNE ligne entière en testant que la feuille dont le nom est inscrit en H de cette ligne existe et en la supprimant si elle existe.

    Si c'est bien de cela dont il s'agit, il n'est pas nécessaire de passer par des tests sur des caption de commandbars...

    Au changement de sélection, on teste si on sélectionne une et une seule ligne entière. Si oui, on mémorise dans une variable du module de la feuille la valeur en H de la ligne sélectionnée, ainsi que la cellule en A de la ligne suivante et le numéro de la ligne suivante.

    Lors du Change, on teste si on est sur une ligne entière et s'il y a eu suppression. Il y a eu suppression si la ligne de la cellule témoin n'est plus la même que la ligne mémorisée. Si suppression de la ligne entière, on teste l'existence de la feuille grâce à une fonction dans un module standard (perso, sans Exit For) et on supprime au besoin

    Fonction du module standard qui teste l'existence de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function SheetExists(Name As String) As Boolean
      Dim Counter As Long
      Counter = 1
      Do While Counter <= Worksheets.Count And Not SheetExists
        SheetExists = StrComp(Name, Worksheets(Counter).Name, vbTextCompare) = 0
        Counter = Counter + 1
      Loop
    End Function
    Le code de SelectionChange et Change de la feuille avec les variables de module.
    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
    Option Explicit
     
    Private Value As String
    Private TestRange As Range
    Private TestRow As Long
     
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Rows.Count = 1 And Target.Count = 16384 Then
        If TestRow <> TestRange.Row Then
          If SheetExists(Value) Then Worksheets(Value).Delete
        End If
      End If
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Target.Rows.Count = 1 And Target.Count = 16384 Then
        Value = Target(8).Value
        Set TestRange = Target(2, 1)
        TestRow = TestRange.Row
      Else
        Value = ""
      End If
    End Sub

    Cela me semble moins hasardeux que de tabler sur les libellés des boutons. De plus, sur mon pc, le libellé du bouton Supprimer n'est pas Supprimer mais &Supprimer (car le S est souligné). De plus, il semble y avoir des disparités relatives à la gestion des commandbars entre les versions, ce qui rend problématique l'utilisation sur différentes versions.

    Cela correspond-til à ce que tu souhaites mettre en place?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Points : 73
    Points
    73
    Par défaut
    C'est beau quand c'est simple comme ça!!!
    Respect...
    Je vais tester de ce pas. De mémoire j'avais galéré quand il s'agissait d'insérer une ligne copiée.
    A bientôt

  14. #14
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Points : 73
    Points
    73
    Par défaut
    C'est prometteur.
    2 points néanmoins :

    -Quand j'insérer une ligne vierge, il le fait, mais il supprime également l'onglet correspondant à la ligne sur laquelle j'ai fait clic droit.
    Je n'ai pas le problème quand j'insère une ligne précédemment copiée

    -J'aimerai également qu'il supprime l'onglet si j'efface le contenu d'une ligne. Et ça, si j'ai bien compris, ça met par terre ton If TestRow <> TestRange.Row

    Si tu as encore un peu de temps à me consacrer, c'est bien, sinon je me contenterai de mes commandbar.

    MErci
    Benoit

  15. #15
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Voici la procédure Change adaptée. Elle teste que le numéro de ligne mémorisé est plus grand que le numéro de ligne de la cellule de test (=> suppression) ou qu'il est identique ET que la cellule en H a été vidée... Je pense que ça couvre tous les cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Rows.Count = 1 And Target.Count = 16384 Then
        If TestRow > TestRange.Row Or (TestRow = TestRange.Row And Target(8) = "") Then
          If SheetExists(Value) Then Worksheets(Value).Delete
        End If
      End If
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Points : 73
    Points
    73
    Par défaut
    Bonjour Pierre, bonjour Forum
    Voici mon code, complété avec mon msgbox (bilingue) qui permet de choisir si on garde ou pas l'onglet.

    A ceux qui seraient intéressés par le code de Pierre, il y manque un "end if"

    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
    Option Explicit
     
    Private ongletsupp As String
    Private TestRange As Range
    Private TestRow As Long
     
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Rows.Count = 1 And Target.Count = 16384 Then    'si une seule ligne
        If TestRow > TestRange.Row Or (TestRow = TestRange.Row And Target(8) = "") Then 'si effacé ou supprimer la ligne
          If SheetExists(ongletsupp) Then 'si l'onglet existe dans le fichier, cf module ongletexiste
     
            Dim A As Boolean
            A = False
     
            If Worksheets("Selection").Range("h4").Value = "Français" Then
                If MsgBox("Vous avez supprimé la ligne " & ongletsupp & "." & Chr(13) & Chr(10) & "Voulez vous aussi supprimer l'onglet correspondant?", vbYesNo, "Confirmation") = vbYes Then
                A = True
                End If
            Else
                If MsgBox("You have delete lign " & ongletsupp & "." & Chr(13) & Chr(10) & "Do you wish also to delete associated sheet?", vbYesNo, "Confirmation") = vbYes Then
                A = True
                End If
            End If
     
            If A = True Then
            Application.DisplayAlerts = False
            Worksheets(ongletsupp).Delete
            Application.DisplayAlerts = True
            End If
     
          End If
        End If
      End If
    End Sub
     
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Target.Rows.Count = 1 And Target.Count = 16384 Then
        ongletsupp = Target(8).Value
        'MsgBox Value
        Set TestRange = Target(2, 1)
        TestRow = TestRange.Row
      Else
        ongletsupp = ""
      End If
    End Sub

    Avec ce code, j'ai le msgbox à chaque fois que j'efface ou supprime une seule ligne.
    Je peux aussi insérer une ligne vierge et la supprimer, copier/insérer une ligne complète, couper/insérer une ligne complète sans déclencher le msgbox.
    idem pour les cas ci dessus mais avec plusieurs lignes à la fois.
    Et c'est très bien.

    Il reste le cas du "déplacer une ligne"
    Si je déplace une ligne de 1 ou plusieurs lignes vers le haut, j'ai le msgbox,
    Si je déplace une ligne de de plusieurs lignes vers le bas, j'ai le msgbox
    Si je déplace une ligne de 1 ligne vers la bas, le code plante sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If TestRow > TestRange.Row Or (TestRow = TestRange.Row And Target(8) = "") Then 'si effacé ou supprimer la ligne
    avec un 1er message d'erreur : objet requis
    puis un 2ème : Variable objet ou Variable de bloc With non définie

    Sur ces 3 cas, il ne faudrait pas le msgbox puisque je ne supprime rien.
    Ça devient vraiment tordu...
    J'ai testé 2-3 trucs sur les conditions du IF, mais sans succès.
    Alors, encore une fois, Pierre, si tu as le temps merci d'avance mais je ne voudrais pas abuser, sinon, je reviens à l'option des commandbar.
    Cordialement
    Benoit

  17. #17
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Mes codes sont toujours testés. Il ne manque pas de End If...

    Cela dit, effectivement, le déplacement d'une ligne pose problème. Je n'avais pas essayé de réaliser un simple déplacement d'une ligne entière vers le bas. Je regarde cela.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  18. #18
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par BenoitL77 Voir le message
    A ceux qui seraient intéressés par le code de Pierre, il y manque un "end if"
    Tu devrais mieux te renseigner sur la structure If...Then avant d'affirmer cela.
    Si le If ne provoque qu'une unique action et qu'elle est mise sur la même ligne, pas besoin de End If.
    On peut même ajouter un Else.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  19. #19
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Points : 73
    Points
    73
    Par défaut
    Bien sûr que je l'ai testé. Sinon comment aurais-je pu faire tous ces retours.

    J'ai compris ce qui c'est passé.
    Quand j'ai testé ton 1er code, j'ai de suite ajouté un msgbox pour mieux comprendre comment ça fonctionnait.
    Ce faisant, et par habitude, j'ai mis le IF sur 2 lignes. Qqch comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Rows.Count = 1 And Target.Count = 16384 Then
        If TestRow > TestRange.Row Or (TestRow = TestRange.Row And Target(8) = "") Then
          If SheetExists(Value) Then
          MsgBox ("Supprime " & Value)
          Worksheets(Value).Delete
        End If
      End If
    End Sub
    Et avec un IF sur 2 lignes, pour le coup, il manque bien le end if.
    Sauf que c'est de ma faute...
    cqfd
    Et j'aurai appris qu'on pouvait écrire un IF sand end if, si on le mettait sur une seule ligne.

    Merci

  20. #20
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Points : 73
    Points
    73
    Par défaut
    @Menhir..ben voilà, c'est fait, me suis renseigné.
    Comme mon 1er test avait donné un message "bloc if sans end if", je n'ai pas cherché plus loin.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. requete ajout français to anglais
    Par choubak dans le forum Access
    Réponses: 3
    Dernier message: 06/06/2007, 12h02
  2. Développement en français ou anglais
    Par robert_trudel dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 28/05/2007, 18h02
  3. Cherche un Listing de tous les mots Français et Anglais
    Par Fabien Celaia dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 11/04/2007, 17h35
  4. traduire un logiciel du français en anglais
    Par ghorbel mouna dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/09/2006, 12h36
  5. En français ou anglais pour débuter?
    Par Vol dans le forum Débuter
    Réponses: 8
    Dernier message: 21/12/2005, 09h56

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