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 :

Nommer une plage de données à l'aide de deux variables [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Géomaticienne
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Géomaticienne
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Nommer une plage de données à l'aide de deux variables
    Bonjour,

    J'ai débuté avec VBA il y a 15 jours et désire désormais améliorer mon code en retirant tous les "select" et "activate" (et aussi les déplacement du genre "ActiveCell.End(xlToLeft).Select" ou "ActiveCell.Offset(1, 0).Activate").

    Je butte sur la nomination d'une plage de données avec deux variables :


    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
        Dim tp As Worksheet
            Set tp = ActiveWorkbook.Worksheets("tableau_phyto")
     
        Dim nbTax As Range
        Dim Lign As Long
        Dim TaxCel1 As Range
        Dim TaxCelder As Range
     
      With tp
     
        Set nbTax = .Columns(7).Cells.Find(What:="Nombre de taxons", LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
     
        If nbTax Is Nothing Then    'si on ne trouve pas la cellule contenant "Nombre de taxons"
            MsgBox "Oups !!! Pas de cellule Nombre de taxons !!!"
            Exit Sub
        Else
        'si on trouve Nombre de taxons, on note à qu'elle ligne
            Lign = nbTax.Row
        End If
    		'Et l'on définit la ligne du dessous = début de la liste taxons à copier
    			.Cells(Lign + 1, 1).Name = "TaxCel1"
     
    		'Definir la dernière cellule non vide (dernière ligne:dernière colonne) de la zone à copier
                 Set TaxCelder = .Rows(1).Find("*", .Cells(1, 1), xlValues, xlPart, , xlPrevious)
     
    		'Nommer la plage à copier située entre TaxCel1 et TaxCelder
                        .Range(TaxCel1, TaxCelder).Name = "listPhyto"
     
     
    	'Copie de la liste taxons dans le tableau final
    		.Range("listPhyto").Copy Destination:=Sheets("Tableau_final").Range("A1")
     
      End With
    Lors de l'exécution pas à pas, c'est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(TaxCel1, TaxCelder).Name = "listPhyto"
    qui bogue, probablement une mauvaise syntaxe mais je n'ai pas trouvé d'exemple avec deux variables sur internet.

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 784
    Points
    5 784
    Par défaut
    Bonjour,

    L'opérateur pour concaténer deux chaines de caractère c'est le "&"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    variable1 ="list"
    variable2 ="Phyto"
    .name = variable1 & variable2
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Géomaticienne
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Géomaticienne
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Bonjour halaster08,

    Merci pour cette réponse rapide

    Il ne s'agit pas ici de concaténer deux variables mais de nommer la plage située entre une première cellule nommée TaxCel1 et une deuxième cellule nommée TaxCelder sachant que lorsque j'écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A1", TaxCelder).Name = "listPhyto"
    Je copie bien la plage de données de A1 à TaxCelder sauf que je veux copier de TaxCel1 à TaxCelder


    J'espère que mon explication est plus claire

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 784
    Points
    5 784
    Par défaut
    Citation Envoyé par 43pipistrel Voir le message
    Il ne s'agit pas ici de concaténer deux variables mais de nommer la plage située entre une première cellule nommée TaxCel1 et une deuxième cellule nommée TaxCelder
    Mais quelle idée de poser des questions un Lundi matin aussi !

    Perso j'utilise la syntaxe suivante donnée par l'enregistreur de macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub aa()
    Set cel1 = Range("B2")
    Set cel2 = Range("D4")
    ActiveWorkbook.Names.Add Name:="testmacro", RefersTo:=Range(cel1, cel2)
    End Sub
    Note que si le nom est déjà utilisé ça le remplace sans message d'avertissement
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Géomaticienne
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Géomaticienne
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Re,

    Merci, mais malheureusement, ça ne change rien, le code bogue maintenant sur la nouvelle ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Names.Add Name:="listPhyto", RefersTo:=Range(TaxCel1, TaxCelder)
    j'ai l'impression que c'est toujours Range(TaxCel1, TaxCelder) qui n'est pas accepté !

    Merci pour votre aide !

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 784
    Points
    5 784
    Par défaut
    C'est parce que tu n'as pas déclaré ta variable correctement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set TaxCelder = .Rows(1).Find("*", .Cells(1, 1), xlValues, xlPart, , xlPrevious)
    TaxCelder est bien défini comme une cellule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(Lign + 1, 1).Name = "TaxCel1"
    Mais TaxCel1 c'est pas une cellule c'est juste un nom de plage

    Donc soit tu défini taxcel1 comme une cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set taxcel1 = .Cells(Lign + 1, 1)
    Soit tu utilise correctement ta plage nommée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Names.Add Name:="listPhyto", RefersTo:=Range(range("TaxCel1"), TaxCelder)
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Géomaticienne
    Inscrit en
    Novembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Géomaticienne
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2018
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup halaster08

    C'était effectivement le problème !!! Trop peu d'expérience pour repérer encore ce genre de chose, mais j'apprends !!!

    Bonne journée

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

Discussions similaires

  1. [XL-MAC 2016] Transfert d'une plage de données à l'aide d'une liste déroulante
    Par défendre dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/11/2018, 16h39
  2. [XL-2013] Créer des feuilles et les nommer via une plage de données
    Par rafale.76 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/10/2014, 23h46
  3. création d'une plage de données avec nom de feuille variable
    Par vesuve321 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 16/06/2014, 18h25
  4. [VBA-E]Déclaration d'une plage de données
    Par illight dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 02/02/2007, 16h13
  5. [VBA-E] Selection d'une plage de données problématique
    Par Fab117 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/01/2007, 14h41

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