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 :

Range limitée a la dernière valeur - Concaténation [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Allemagne

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

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Par défaut Range limitée a la dernière valeur - Concaténation
    Bonjour

    Je n'arrive désespérément pas a obtenir la ligne de la dernière valeur d'une table, mais je comprends mal comment fonctionne "range.find"

    Je cherche a concaténer des tableaux de longueur variable (pour le moment tous avec 200 lignes de formule, mais les formules renvoient une valeur vide ("") quand il n'y a pour le moment plus de valeur a traiter.

    Je cherche donc a obtenir la première ligne ou la formule renvoie cette valeur vide, pour dimensionner ma range a copier-coller.

    Voici mon sub:


    "xRg" renvoyant la range contenant toutes les formules
    Et je cherche a passer a "xFinTab" qui me renverrais que les valeurs non vide

    Je copie un tableau de DH:DJ Vers A:C (avec une première ligne contenant le nom qui n'est pas a copier)

    Le soucis est ligne 11 qui ne fonctionne pas comme souhaité, je remplace ensuite xRg, par xFinTab, une fois que cela fonctionnera


    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
    Sub Synthese()
    'Concatenation des différents tableaux
    Dim xRg, xCopy, xFinTab As Range, sh As Worksheet, xDecal As Integer
     
     Sheets("Combo").Range("A2:X" & Rows.Count).EntireRow.Delete 'Cleaning
     
    For Each sh In Worksheets
       If sh.Name <> "Combo" And sh.Name <> "Index" Then
         With sh
           Set xRg = .Range("DH" & Rows.Count).End(xlUp) 'Paramétre original, renvoie la range avec toutes les valeurs, formules comprises)
           Set xFinTab = .Range("DH" & Rows.Count).End(xlUp).Find("", , xlValues, , , xlPrevious)
           If xRg.Row > 1 Then 'Row =1 => pas de valeur
             Set xCopy = Sheets("Combo").Range("DH" & Rows.Count).End(xlUp).Offset(1)
             .Range("DH2:DJ" & xRg .Row).Copy
             xCopy.Offset(xDecal, -111).PasteSpecial Paste:=xlPasteValues 'Offset pour décaler de DH a A (-111) , et de concaténer
             xDecal = xDecal + xRg .Row
           End If
         End With
       End If
    Next sh
     
    End Sub
    Merci de votre aide !

  2. #2
    Membre chevronné Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Par défaut
    Pour trouver la première ligne vide d'une colonne par exemple. Tu peux faire comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A"&rows.count).end(xlup).row +1

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    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 681
    Par défaut
    Citation Envoyé par Kiouane Voir le message
    Pour trouver la première ligne vide d'une colonne par exemple. Tu peux faire comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A"&rows.count).end(xlup).row +1
    Ca ne va pas marcher, la ligne n'est pas vide, elle contient une formule qui renvoie vide, c'est différent.

    Le soucis est ligne 11 qui ne fonctionne pas comme souhaité
    Si j'ai bien compris, essaye de remplacer ta ligne 11 par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set xFinTab = .Range("DH" & Rows.Count).End(xlUp).Find("", , xlValues, , , xlPrevious).address
    edit: et remplacer par

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Allemagne

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

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Ca ne va pas marcher, la ligne n'est pas vide, elle contient une formule qui renvoie vide, c'est différent.
    Exactement, c'est pour cela que j'ai bien insisté sur "valeur" et "formules".
    Si il n'y avais pas ce soucis de formule qui sont comptabilisé dans le ".End(xlUp)" , le code fonctionne bien.


    J'ai testé la solution, le .adresse renvoie une erreur de type.

    Et le .range sur Xfintab est une méthode qui échoue si on enlève le .adresse

    "XfinTab" doit être direct la range souhaitée (range des valeurs non vide), et ensuite avec . row on mesure son nombre de lignes de façon a adapter le collage.




    Mon soucis c'est que le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Find("", , xlValues, , , xlPrevious)
    ne viens pas ajuster la taille de ma range.
    Je pense que c'est du au fait que je ne comprends pas comment ".find" s'applique



    Je remet le code propre (sans le xRg)
    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
     
    Sub Synthese()
    'Concatenation des différents tableaux
    Dim xCopy, xFinTab As Range, sh As Worksheet, xDecal As Integer
     
     Sheets("Combo").Range("A2:X" & Rows.Count).EntireRow.Delete 'Cleaning
     
    For Each sh In Worksheets
       If sh.Name <> "Combo" And sh.Name <> "Index" Then
         With sh
           Set xFinTab = .Range("DH" & Rows.Count).End(xlUp).Find("", , xlValues, , , xlPrevious)
           If xFinTab.Row > 1 Then 'Row =1 => pas de valeur
             Set xCopy = Sheets("Combo").Range("DH" & Rows.Count).End(xlUp).Offset(1)
             .Range("DH2:DJ" & xFinTab.Row).Copy
             xCopy.Offset(xDecal, -111).PasteSpecial Paste:=xlPasteValues 'Offset pour décaler de DH a A (-111) , et de concaténer
             xDecal = xDecal + xFinTab.Row
           End If
         End With
       End If
    Next sh
     
    End Sub
    Ce code fonctionne, mais me renvois un résultat plein de vides :-P

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Allemagne

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

    Informations forums :
    Inscription : Juillet 2014
    Messages : 24
    Par défaut
    Après un peu de pause sur le sujet, je suis toujours bloqué, et je vais avoir un projet similaire qui va bloquer au même endroit.

    Comment donc sélectionner les cellules avec des formules renvoyant un résultat vide? Sachant que ces formules ne sont pas considéré comme vide par excel, vu qu'elle possèdent une formule.

    Merci !

  6. #6
    Membre chevronné Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Par défaut
    Je pense que tu peux sélectionner une cellule vide contenant une formule comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if cell.value ="" then cell.select

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

Discussions similaires

  1. [XL-2003] Etendre Range jusqu'à dernière valeur
    Par Jaymerry dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/12/2010, 14h46
  2. Liste sélectioner la dernière valeur ajoutée par un popup.
    Par guano dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/03/2006, 17h03
  3. Réponses: 7
    Dernier message: 06/03/2006, 12h19
  4. [Séquences] Pour récupérer la dernière valeur
    Par tnodev dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 24/05/2005, 11h35
  5. [IB] [trigger+generator] récup dernière valeur générée ?
    Par fred64 dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/05/2004, 00h38

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