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 :

Problème macros faites avec Excel 2010 [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club Avatar de yolbri
    Homme Profil pro
    Formateur Bureautique et Coordinateur Insertion à la Fondation INFA
    Inscrit en
    Avril 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Formateur Bureautique et Coordinateur Insertion à la Fondation INFA
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 5
    Par défaut Problème macros faites avec Excel 2010
    Bonjour à tous

    Il y a quelques années je me suis créé un fichier de création de BDD fictive.
    Je viens de le ressortir du placard et je découvre qu'avec Excel 2016, j'ai 2 commandes qui ne fonctionnent pas comme elles devraient.
    Create_bdd.xlsm

    Voici les 2 commandes qui ne fonctionnent plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Case Is = "n° et rue"
                Cells(1, z).Select
                ActiveCell.Offset(1, 0).Select
                ActiveCell.FormulaR1C1 = "=CONCAT(RANDBETWEEN(1," & NumMaxRue & "),"", "",VLOOKUP(RANDBETWEEN(1," & NbrRue & "),Tableau_Rues,2,FALSE))"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Case Is = "E-Mail"
                Cells(1, z).Select
                ActiveCell.Offset(1, 0).Select
                If UserForm1.OptionButton5.Value = True Then
                    ActiveCell.FormulaR1C1 = "=Lower(CONCAT([@Nom],""."",[@Prénom],""@fakemail.fr""))"
                    Else
                    ActiveCell.FormulaR1C1 = "=Lower(CONCAT(LEFT([@[Nom et Prénom]],SEARCH("" "",[@[Nom et Prénom]],1)),""."",RIGHT([@[Nom et Prénom]],LEN([@[Nom et Prénom]])-SEARCH("" "",[@[Nom et Prénom]],1)),""@fakemail.fr""))"
                End If
    Au lieu de m'afficher le résultat, elles m'affichent toutes les 2 #NOM?.

    Je n'arrive pas trouver le problème.

    Si quelqu'un peut m'aider, je l'en remercie!

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Peut-être un changement de langue entre les deux versions? (bien que mise à part avec l'utilisation de formulaLocal, il me semble que ça ne change rien)

    L'idéal serait de faire un enregistrement de macro est de placer les formules escomptées dans des cellules. Ainsi tu verras ce que propose Excel.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre du Club Avatar de yolbri
    Homme Profil pro
    Formateur Bureautique et Coordinateur Insertion à la Fondation INFA
    Inscrit en
    Avril 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Formateur Bureautique et Coordinateur Insertion à la Fondation INFA
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 5
    Par défaut
    Citation Envoyé par Qwazerty Voir le message
    Salut

    Peut-être un changement de langue entre les deux versions? (bien que mise à part avec l'utilisation de formulaLocal, il me semble que ça ne change rien)

    L'idéal serait de faire un enregistrement de macro est de placer les formules escomptées dans des cellules. Ainsi tu verras ce que propose Excel.

    ++
    Qwaz
    Effectivement, je viens de tester et c'est l'écriture du nom de la fonction Concat qui a changé Concatenate.

    Merci

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

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

    Informations forums :
    Inscription : Avril 2022
    Messages : 141
    Par défaut
    Remarques:
    Votre code doit être mis à jour
    Attendez-vous à d'autres erreurs: autant compiler le code avant de le lancer
    Prévoir les cas où les champs ne sont pas renseignés (vides)
    Utiliser le plus de variables possibles pour mémoriser vos valeurs;
    Commencez par "Option explicit"
    Ajoutez un gestionnaire d'erreurs
    Evitez les "Select" si possible, ça réduit la performance

  5. #5
    Membre du Club Avatar de yolbri
    Homme Profil pro
    Formateur Bureautique et Coordinateur Insertion à la Fondation INFA
    Inscrit en
    Avril 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Formateur Bureautique et Coordinateur Insertion à la Fondation INFA
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 5
    Par défaut
    Citation Envoyé par Belga16 Voir le message
    Remarques:
    Votre code doit être mis à jour
    Attendez-vous à d'autres erreurs: autant compiler le code avant de le lancer
    Prévoir les cas où les champs ne sont pas renseignés (vides)
    Utiliser le plus de variables possibles pour mémoriser vos valeurs;
    Commencez par "Option explicit"
    Ajoutez un gestionnaire d'erreurs
    Evitez les "Select" si possible, ça réduit la performance
    Merci pour ces infos, mais je n'en suis pas encore à ce niveau de pratique.
    C'est vrai que je trouvais l'utilisation de "Select" un peu lente mais je suis toujours en progression et je cherche d'autres solutions pour la remplacer.

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Citation Envoyé par yolbri Voir le message
    Merci pour ces infos, mais je n'en suis pas encore à ce niveau de pratique.
    C'est vrai que je trouvais l'utilisation de "Select" un peu lente mais je suis toujours en progression et je cherche d'autres solutions pour la remplacer.
    La règle à retenir est qu'il n'est pas nécessaire de sélectionner (.select) pour travailler sur une feuille ou une cellule (sauf cas particuliers)
    Un bon début est d'utiliser soit des variables objets (comme tu l'as fait pour "Ws" dans ton code mais que tu n'as pas utilisé par la suite), soit d'utiliser With pour alléger le code... ou les deux

    Voila une partie du code adaptée en suivant cette méthode

    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
    Dim NewTab As ListObject
        '----------------------------------
        'Création d'une nouvelle feuille
        '----------------------------------
        Set ws = Sheets.Add
        'On pointe ce nouvel onglet
        With ws
            .Name = "Base de données"
     
            'On pointe la cellule A1
            Set CellCible = .Range("A1")
            '----------------------------------
            'Insertion des en-tête de colonnes
            '----------------------------------
            If UserForm1.Prénoms.Value = True Then
                If UserForm1.OptionButton5 = True Then
                    CellCible.Value = "Nom"
                    'On pointe la cellule suivante
                    Set CellCible = CellCible.Offset(0, 1)
                    CellCible.Offset(0, 1).Value = "Prénom"
                Else
                    .Value = "Nom et Prénom"
                End If
            Else
                .FormulaR1C1 = "Nom"
            End If
     
            If UserForm1.Titre.Value = True Then
                'On pointe la cellule suivante
                Set CellCible = CellCible.Offset(0, 1)
                CellCible.Value = "Civilité"
            End If
     
            '.....Ainsi de suite
     
            '----------------------------------
            'Création du format de tableau automatique avec le nombre de ligne désiré
            '----------------------------------
            i = UserForm1.TailleBddBox.Value + 1
     
            'Inutile, puisque la dernière cellule pointée dans CellCible correspond à la dernière cellule d'entête
            'n = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
     
            'On crée le nouveau tableau qu'on pointe dans une variable
            Set NewTab = .ListObjects.Add(xlSrcRange, .Range("A1", CellCible), , xlYes)
            'On renomme le tableau (attention si le nom existe déjà ça va planter, quitte à mettre un nom bateau, autant ne pas le renommer et laisser le nom par defaut choisi par Excel
            'NewTab.Name = "Tableau5"
            'Range("Tableau5[#All]").Select 'Inutile, on le pointe dans NewTab
            NewTab.TableStyle = "TableStyleMedium3"
    Regarde aussi du coté de Application.screenUpdating, qui permet de figer l'écran ce qui limite grandement la conso de ressource.

    L'idéal pour de gros volume de données serait de travailler avec un tableau interne, dans le code VBA, puis de déposer les valeurs qu'il contient d'un coup sur la feuille. Gain de temps assuré.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. Problème d'actualisatr,ion d'un TCD avec Excel 2010
    Par Supercalifragilis dans le forum Excel
    Réponses: 7
    Dernier message: 19/08/2014, 20h36
  2. [XL-2010] Problème connexion avec excel 2010
    Par mnladson dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/06/2014, 15h53
  3. [XL-2010] Problème macro désactivée de excel 2003 à excel 2010
    Par boubas53 dans le forum Excel
    Réponses: 2
    Dernier message: 11/05/2014, 09h51
  4. Réponses: 0
    Dernier message: 26/02/2014, 20h23
  5. Réponses: 2
    Dernier message: 04/09/2012, 18h17

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