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 :

Comprendre et utiliser la fonction SPLIT avec CELLS().ADDRESS


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Par défaut Comprendre et utiliser la fonction SPLIT avec CELLS().ADDRESS
    Bonjour à tous,

    Je suis en train de travailler sur des fichiers Excel qui ont été agrémentés de macros VBA. Je n'ai (n'avais) pas de compétences en la matière mais ai passé plusieurs heures à décortiquer une macro que je trouve très utile, qui consiste à copier les données de plusieurs fichiers pour les coller dans un autre fichier qui lui sert de fichier de synthèse. Démarche donc assez courante donc et il y a beaucoup d'infos sur le net.

    Néanmoins, je bloque dans l'interprétation de ces lignes. J'ai passé plusieurs heures à chercher mais je bloque !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim Wtu As Worksheet
     
    (...)
     
    DerLigtu = Wtu.Range("A65536").End(xlUp).Row        
    DerCoNtu = Wtu.Range("AA10").End(xlToLeft).Column   
    DerCoLtu = Split(Cells(1, DerCoNtu).Address, "$")(1)
     
     'Wtu.Range("A" & PreLigtu & ":" & DerCoLtu & DerLigtu).Copy Wcab.Range("A" & DerLigcab)    ' Copy basic
     
     If DerLigtu > 1 Then
                Wtu.Range("A" & PreLigtu & ":" & DerCoLtu & DerLigtu).Copy
    Si j'ai bien compris :

    DerLigtu = Wtu.Range("A65536").End(xlUp).Row => ceci renvoie vers la première cellule non vide de la colonne A
    DerCoNtu = Wtu.Range("AA10").End(xlToLeft).Column => ceci renvoie vers la première colonne non vide à partir de la cellule AA10 en balayant vrs la gauche
    DerCoLtu = Split(Cells(1, DerCoNtu).Address, "$")(1) => j'ai compris que Cells() renvoie par $A$1 et que Cells.Address, $ renvoie un tableau du type A 1

    Mais je bloque un peu. En quoi ce 'split' nous aide ici ? le DerCoLtu est ensuite utilisé et je ne comprends pas.

    Je vous remercie grandement pour votre aide, et votre pédagogie.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Split ne sert a rien!

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    La fonction Split() est ici utilisée pour récupérer la lettre de la colonne donc voici un petit exemple ci-dessous qui va peut être t'aider à comprendre son fonctionnement :
    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
     
    Sub Test()
     
        Dim Tbl 'sans préciser le type, c'est un Variant par défaut qui peut recevoir plein de choses comme par exemple un tableau
        Dim Adresse As String
     
        'ici, Adresse va contenir la chaîne "$A$1"
        Adresse = Range("A1").Address
     
        'Split() retoure un tableau qui va être stocké dans la variable
        Tbl = Split(Adresse, "$")
     
        'maintenant, tu peux avoir accès au différentes valeurs où le délimiteur a été éliminé par la fonction
        MsgBox Tbl(1)
        MsgBox Tbl(2)
     
        'mais il est aussi possible de se passer d'un tableau et dans ce cas ça devient :
        MsgBox Split(Adresse, "$")(1)
        MsgBox Split(Adresse, "$")(2)
     
    End Sub
    Les lignes de code utilisées avec la fonction Split() que tu as posté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DerLigtu = Wtu.Range("A65536").End(xlUp).Row
    DerCoNtu = Wtu.Range("AA10").End(xlToLeft).Column
    DerCoLtu = Split(Cells(1, DerCoNtu).Address, "$")(1)
     
    If DerLigtu > 1 Then
     
        Wtu.Range("A" & PreLigtu & ":" & DerCoLtu & DerLigtu).Copy
    peuvent être remplacées par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DerLigtu = Wtu.Range("A65536").End(xlUp).Row
    DerCoNtu = Wtu.Range("AA10").End(xlToLeft).Column
     
    If DerLigtu > 1 Then
     
        Wtu.Range(Wtu.Cells(PreLigtu, 1), Wtu.Cells(DerLigtu, DerCoNtu)).Copy
    Dans ce dernier cas, la fonction Split() n'est plus utilisée !

  4. #4
    Invité
    Invité(e)
    Par défaut
    dans la mesure ou on récupère la ligne et la colonne la lettre on s'en fiche un peut!

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Salut Robert et tout le monde !

    dans la mesure ou on récupère la ligne et la colonne la lettre on s'en fiche un peut!
    Exactement !

  6. #6
    Membre averti
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Par défaut
    Ok, je comprends mieux. A croire que ce Split n'est là que m'embrouiller.

    Merci beaucoup pour l'exemple Theze, et je trouve que Wtu.Range(Wtu.Cells(PreLigtu,1), Wtu.Cells(DerLigtu,DerCoNtu))).Copy est beaucoup plus simple à comprendre.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il faut aborder chaque problème hors de son contexte!

    debug.print split("toto;titi",";")(0) retourne toto!
    debug.print split("$A$1","$")(1) retourne A!
    debug.print ActiveCell.Column retourne 1!
    debug.print ActiveCell.Row retourne 1!
    debug.print cells(ActiveCell.Row,ActiveCell.Column).address retourne $A$1!
    debug.print split(cells(ActiveCell.Row,ActiveCell.Column).address,"$")(1) retourne A!
    debug.print range(split(cells(ActiveCell.Row,ActiveCell.Column).address,"$")(1) & 1).address retourne $A$1!

    au niveau embrouille je m'arrête là? oui dès l'instant ou tu as Row et Column!

    celui qui ta donné ce code a au moins le mérite de t'avoir proposé une solution!
    Dernière modification par Invité ; 22/03/2017 à 12h08.

  8. #8
    Membre averti
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Par défaut
    Merci beaucoup encore une fois, je pense avoir compris (vérification à mon prochain split() ) !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/05/2008, 22h26
  2. [EasyPHP] Comment utiliser la fonction mail avec EasyPHP ?
    Par baguira dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 09/03/2007, 00h32
  3. Est-il possible d'utiliser la fonction TOP avec un argument variable ?
    Par 16-Marco dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 06/03/2007, 22h21
  4. [WD10] Utiliser une fonction OpenGL avec pointeur (int)
    Par Zoons dans le forum WinDev
    Réponses: 3
    Dernier message: 06/07/2006, 16h38
  5. [debutant]fonction "split" avec une chaine comme m
    Par EpOnYmE187 dans le forum Débuter
    Réponses: 2
    Dernier message: 07/11/2005, 22h46

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