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 :

insérer dans une variable deux cellules discontinues [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut insérer dans une variable deux cellules discontinues
    Bonjour
    J'essaie depuis quelques heures mais en vain de declarer dans une variable deux cellules discontinues.

    je suis en train de créer un petit fichier qui recupère les données de cellules d'un fichier et les copies.
    Lorsque j'ai deux cellules à copier tout va bien, la formule ci dessous fonctionne trés bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set MyExport = .Application.Union(Range("A148"), Range("H148"))
    MyExport.Copy
    WbStat.Worksheets("trafic").Range("F1").End(xlDown).Offset(1, 0).PasteSpecial (xlPasteValues)
    Mais là ou je bloque c'est lorsque je dois travailler avec 3 cellules.
    Si on prend exemple sur la photo ci dessous.
    Comment faire pour créer une cellule issu de la concaténisation de la cellule cadence en A140 et de la cellule matin en B139).
    Et ensuite recuperer cette cellule et l'insérer dans la l'application.union comme ci dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim concatene As Range
    Set concatene = .Range("A140") & "/" & Range("B139")
    Set MyCadenceMatin = .Application.Union(concatene, Range("B145"))
    WbStat.Worksheets("trafic").Range("F1").End(xlDown).Offset(1, 0).PasteSpecial (xlPasteValues)
    mais ce code ne fonctionne pas

    Nom : Capture.JPG
Affichages : 179
Taille : 14,1 Ko

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Salut , je comprends pas ou tu bloque ?

    Soit tu enregistre tes valeurs de cellules dans une variable (1 par cellule) soit tu peux enregistrer ses valeurs dans un tableau.

    Par contre fais attention en VBA il faut toujours préciser l'environnement de travail, a minima la feuille dans laquelle tu vient chercher/apporter des informations. Du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.range("A1").value = feuil1.range("A2").value
    La précision de l'adresse de la feuille doit être faite a chaque fois, sous peine d'avoir une erreur de compilation ou pire que ca prenne la feuille active par défaut. Ici je précise via le codename de la feuille.

    Pour concaténer utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim machaine as string
     
    machaine = feuil1.range("A140").value  &  feuil1.range("B139").value & feuil1.range("B145").value
    A adapter en fonction de ta feuille, car tu ne précise pas le codename de la feuille de travail.

    A+

    CB

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour Christian
    Et merci d'avoir pris le temps de me repondre
    Lorsque tu ecris :
    Par contre fais attention en VBA il faut toujours préciser l'environnement de travail, a minima la feuille dans laquelle tu vient chercher/apporter des informations. Du genre
    Je sais, dans mon exemple, j'ai copié une toute partie de mon code pour simplifier mon problème.

    Ta ligne de code fonctionne merci. Je l'ai adapté mais la suite bloque au niveau de Application.Union.
    J'ai un message d'erreur qui me dis :
    impossible de lire la propriete union de la classe applicaion
    comment puis je insérer cette variable concatene dans l'application.union

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim concatene As String
    concatene = .Range("A145").Value & .Range("B139").Value
    'MsgBox concatene
    Set MyCadenceMatin = .Application.Union(concatene, Range("B145"))

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    comment puis je insérer cette variable concatene dans l'application.union
    Le concaténer ne sert a rien en VBA comme je l'ai précisé plus haut.

    Pour assembler des variables on utilise le "&".

    Je t'ai donné la réponse a ta problématique, tu ne l'a même pas intégré a ton code...

    Je sais, dans mon exemple, j'ai copié une toute partie de mon code pour simplifier mon problème.
    Tu as peu être donné qu'une partie de ton code mais la partie que tu as partagée n'est pas bien formulée.

    Déjà si tu va sur l'aide google tu peux voir que la méthode application.union requiert des objets range, toi tu insert une chaine de caractère.

    Tu devrais plutôt faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim myRange as range
    set myRange = application.union (feuil1.range("A145"),feuil1.range("B139"),feuil1.range("B145"))
    Mais je pense que tu te trompe sur la fonction de cette méthode, ce n'est pas un concaténer mais une union de sélections.

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour Christian
    Il est vrai que pour simplifier ma problématique, j'ai été trop simple dans mon expication.. desolé
    effectivement, la méthode application.union requiert des objets range et non des chaines de caractères. Et c'est là j'aurais du etre plus claire dans mes explications:
    Je voulais récupérer les valeurs de deux cellules, les copier dans la dernière cellule non vide de mon tableau et à droite de cette cellule, copier la valeur d'une troisième cellule.
    A l'origine, voila ce que j'ai fais et qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    concatene = .Range("A145").Value & .Range("F139").Value
    WbStat.Worksheets("trafic").Range("F1").End(xlDown).Offset(1, 0).Value = concatene
    WbStat.Worksheets("trafic").Range("F1").End(xlDown).Offset(0, 1).Value = Range("F145").Value
    Mais pour rendre mon code plus propre, je voulais passer par la méthode application.union mais comme tu le dis si bien, celle-ci requiert uniquement des ranges.
    Christian, je vais donc garder la methode précédente.
    Et merci encore d'avoir repondu
    Je ferme cette discussion et a plus

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Re, pour être précis une union de sélections sert principalement en vba a appliquer des opérations sur des sélections discontinues ou variables.

    Mais dans ton cas ça ne simplifiera pas ton problème au contraire.

    Par contre tu pourrais améliorer ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    concatene = .Range("A145").Value & .Range("F139").Value
    WbStat.Worksheets("trafic").Range("F1").End(xlDown).Offset(1, 0).Value = concatene
    WbStat.Worksheets("trafic").Range("F1").End(xlDown).Offset(0, 1).Value = Range("F145").Value
    Comme je te l'ai dit précédemment il vaut mieux préciser l'adresse complète d'une cellule, surtout que apparemment tu travaille sur deux classeurs différents.

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

Discussions similaires

  1. [LibreOffice][Base de données] insérer dans une variable le nom d'un champ de la fiche active afin d'ouvrir un dossier de ce nom
    Par felixltx dans le forum OpenOffice & LibreOffice
    Réponses: 14
    Dernier message: 04/08/2021, 13h43
  2. Récupérer informations d'une base de donnée et l'insérer dans une variable
    Par Crazy-Frog_67 dans le forum Débuter avec Java
    Réponses: 14
    Dernier message: 14/03/2018, 09h11
  3. insérer des côtes dans une variable pl/sql
    Par illegalsene dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/01/2007, 14h20
  4. Réponses: 4
    Dernier message: 11/09/2006, 08h29
  5. insérer les recordset d'un while dans une variable
    Par yoda_style dans le forum ASP
    Réponses: 4
    Dernier message: 31/03/2005, 10h01

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