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 :

Code VB avec drôle de réaction


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut Code VB avec drôle de réaction
    Bonjour à tous,

    J'ai créé, dans un module complémentaire, une macro qui passe toutes les cellules de ma sélection en majuscule.
    J'y ai donc accès depuis tous mes classeurs Excel via un bouton ajouté au ruban.
    Idem avec Minuscule et Trim.

    Voilà le code pour les majuscules (il n'y qu'une ligne qui change pour les deux autres) :
    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
    Sub Mettre_en_majuscule_la_selection()
     
    Application.ScreenUpdating = False
        Dim rg As Range: Set rg = Selection
        Dim t() As Variant: t() = rg
        Dim ligne As Double, colonne As Double
     
        For colonne = 1 To UBound(t, 2)
            For lign = 1 To UBound(t, 1)
                On Error Resume Next
                t(ligne, colonne) = UCase(t(ligne, colonne))
                On Error GoTo 0
            Next ligne
        Next colonne
        rg = t()
    Application.ScreenUpdating = True
     
    End Sub
    Ça fonctionne plutôt bien sauf quelques bizarreries, je m'explique :
    • Lorsque je lance la macro avec une seule cellule ça plante lors de l'attribution de rg a mon tableau t (t() = rg).
    • Avec des dates, ça fait vraiment des choses bizarres, les mois et les jours sont échangés et la sub ne parcours pas toute la selection.


    Si quelqu'un sais me donner des explications qui m'aideraient a comprendre le VB encore un peu plus je suis plus que preneur.
    Merci d'avance à tous et bonne journée.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    normal car pas de contrôle si c'est bien une variable tableau …
    Et VBA ne connaissant que les dates au format anglo-saxon, voir dans les tutoriels de ce site …

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Majuscules()
                       Dim Cel As Range
        If TypeName(Selection) = "Range" Then
            For Each Cel In Selection
                With Cel
                    If Not ((.Locked And ActiveWorkbook.ActiveSheet.ProtectContents) Or _
                             .HasFormula) Then .Value = UCase(.Value)
                End With
            Next
        End If
    End Sub
    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Merci pour ta réponse Marc-L,

    Ok pour le If TypeName(Selection) = "Range" Then, j'avais déjà réglé le probleme.
    Je ne savais pas que le range en selection ne pouvais pas etre un tableau de (1 to 1, 1 to 1) ce qui est quand même bien dommage.

    Par contre pour les dates, je ne sais pas si tu as testé la macro mais je t'invite à le faire.
    Les dates passent de jj/mm/yyyy à mm/jj/yyyy et vice versa et si que des dates elles ne sont pas toutes traitées avec un prime un changement de format sur les dernières.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    C'est normal, voir les tutoriels sur les dates …
    Je n'ai jamais cherché à mettre en majuscule des dates !

    La fonction IsDate permet donc de vérifier et ne pas traiter dans ce cas, mais cela aussi tu l'as déjà réglé ?!

  5. #5
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    Je n'ai jamais cherché à mettre en majuscule des dates !
    Moi non plus mais si dans une colonne que je veux mettre en majuscule, une date si trouve, je trouvais le comportement de la macro bizarre.
    Je vais gérer le cas des dates avec IsDate comme tu le suggères.

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour

    Voici qui règle la question des dates inversées (grâce à FormulaLocal) et la question d'une seule cellule sélectionnée (avec Dim t As Variant).
    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
    Sub Mettre_en_majuscule_la_selection2()
     
        Dim rg As Range: Set rg = Selection
        Dim t As Variant: t = rg
        Dim ligne As Double, colonne As Double
     If rg.Count = 1 Then
       t = UCase(t)
     Else
     
        For colonne = 1 To UBound(t, 2)
            For ligne = 1 To UBound(t, 1)
                 t(ligne, colonne) = UCase(t(ligne, colonne))
            Next ligne
        Next colonne
     End If
     
    rg.FormulaLocal = t
     
    End Sub

Discussions similaires

  1. Aide newbie configuration code::blocks avec allegro
    Par max---- dans le forum Code::Blocks
    Réponses: 8
    Dernier message: 24/10/2007, 10h39
  2. Incompréhension d'un code source avec awk
    Par adilos708 dans le forum Linux
    Réponses: 1
    Dernier message: 20/04/2006, 20h10
  3. [Mail] Besoin d'aide sur code email avec PJ
    Par flysurfer dans le forum Langage
    Réponses: 1
    Dernier message: 23/02/2006, 10h52
  4. [POO] Problème de code PHP avec Internet Explorer
    Par bzoler dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2006, 11h00
  5. Insertion code html avec javascript
    Par totoranky dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/02/2006, 16h04

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