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 :

Redimensionner un range tableau en supprimant des lignes


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    ingénieur modélisation énergétique
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : ingénieur modélisation énergétique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Redimensionner un range tableau en supprimant des lignes
    Salut à tous,

    Je suis rendu à un point ou j'ai besoin de votre aide et conseil :

    Je souhaite récupérer une valeur issue d'un tableau à trois entrées (en gras). 2 en ordonnée et une en abscisse.

         		4	8	10	14	20	30	45	60	90	120
    1	50000	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00
    1	100000	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00
    1	200000	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00
    1	400000	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00
    1	2000000	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00	0.00
    2	50000	0.55	0.65	0.68	0.74	0.82	0.92	1.05	1.10	1.08	1.08
    2	100000	0.51	0.61	0.66	0.73	0.81	0.90	1.04	1.09	1.08	1.08
    2	200000	0.47	0.57	0.61	0.70	0.79	0.89	1.04	1.09	1.08	1.08
    2	400000	0.42	0.50	0.56	0.64	0.76	0.88	1.02	1.07	1.08	1.08
    2	2000000	0.42	0.50	0.56	0.64	0.76	0.88	1.02	1.07	1.08	1.08
    4	50000	0.38	0.53	0.60	0.69	0.78	0.90	1.02	1.07	1.09	1.09
    4	100000	0.33	0.49	0.55	0.66	0.78	0.90	1.02	1.07	1.09	1.09
    4	200000	0.27	0.42	0.50	0.62	0.74	0.87	1.00	1.06	1.08	1.08
    4	400000	0.22	0.36	0.44	0.56	0.70	0.84	0.99	1.06	1.08	1.08
    4	2000000	0.22	0.36	0.44	0.56	0.70	0.84	0.99	1.06	1.08	1.08
    6	50000	0.34	0.50	0.57	0.66	0.77	0.91	1.02	1.07	1.08	1.08
    6	100000	0.30	0.47	0.54	0.63	0.76	0.98	1.02	1.07	1.08	1.08
    6	200000	0.24	0.42	0.48	0.60	0.73	0.88	1.00	1.06	1.08	1.08
    6	400000	0.18	0.34	0.44	0.56	0.73	0.86	0.98	1.06	1.08	1.08
    6	2000000	0.18	0.34	0.44	0.56	0.73	0.86	0.98	1.06	1.08	1.08
    10	50000	0.30	0.45	0.53	0.64	0.74	0.85	0.97	1.10	1.12	1.12
    10	100000	0.25	0.40	0.48	0.62	0.73	0.85	0.97	1.10	1.12	1.12
    10	200000	0.20	0.34	0.44	0.56	0.69	0.82	0.95	1.10	1.11	1.11
    10	400000	0.16	0.28	0.40	0.55	0.67	0.80	0.93	1.09	1.11	1.11
    10	2000000	0.16	0.28	0.40	0.55	0.67	0.80	0.93	1.09	1.11	1.11
    Il m'est nécessaire de faire des interpolations dans ce tableau. J'arrive parfaitement à faire des interpolation linéaire à une dimension et deux dimensions, mais dans ce tableau particulier, il faut que je redimensionne le tableau, pour faire deux interpolation à 2 dimension, puis refaire une interpolation linéaire..

    Je ne suis pas capable de redimensionner les tableaux en passant par vba, pour pouvoir faire chaque interpolation à 2 dimensions dans les tableaux suivants (pour une valeur de première ordonnée de 5 par exemple) tel que souhaité

         		4	8	10	14	20	30	45	60	90	120
    4	50000	0.38	0.53	0.60	0.69	0.78	0.90	1.02	1.07	1.09	1.09
    4	100000	0.33	0.49	0.55	0.66	0.78	0.90	1.02	1.07	1.09	1.09
    4	200000	0.27	0.42	0.50	0.62	0.74	0.87	1.00	1.06	1.08	1.08
    4	400000	0.22	0.36	0.44	0.56	0.70	0.84	0.99	1.06	1.08	1.08
    4	2000000	0.22	0.36	0.44	0.56	0.70	0.84	0.99	1.06	1.08	1.08
    et
         		4	8	10	14	20	30	45	60	90	120
    6	50000	0.34	0.50	0.57	0.66	0.77	0.91	1.02	1.07	1.08	1.08
    6	100000	0.30	0.47	0.54	0.63	0.76	0.98	1.02	1.07	1.08	1.08
    6	200000	0.24	0.42	0.48	0.60	0.73	0.88	1.00	1.06	1.08	1.08
    6	400000	0.18	0.34	0.44	0.56	0.73	0.86	0.98	1.06	1.08	1.08
    6	2000000	0.18	0.34	0.44	0.56	0.73	0.86	0.98	1.06	1.08	1.08
    Un point important est que ma macro est activée par une FUNCTION et non pas par une SUB ce qui ne me permet pas de faire des copier coller de range dans une autre feuille (ou alors c'est que je n'ai pas réussi)
    Par exemple avec une macro trouvée sur excellabo, elle marche dans une Sub mais pas dans une fonction après l'avoir réadapter à mes besoins. Cependant, il est encore nécessaire de récupérer la première ligne du tableau ci dessus.

    Avez vous des suggestions ?

    Merci de votre générosité

    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
    Sub TransfertConditionnel()
    'Flo Cabon Excelabo 2013
    Dim Temp
    Dim Tblo
    Dim i As Long, j As Long, k As Long
     
    Tblo = Application.WorksheetFunction.Transpose(Range("A1:B8").Value)
    'on peut également écrire application.transpose(...
    'comme dans la feuille de calcul copier/collage spécial transposer,
    'cette fonction inverse les lignes et les colonnes. Donc ici en une seule
    'opération, on remplit l'array avec une transposition de la plage
     
    j = 0
    For i = 1 To UBound(Tblo, 2) 'boucle externe sur la 2° dimension de l'array, correspondant donc aux lignes de la feuille
        If IsNumeric(Tblo(1, i)) Then  'ou tout autre test de condition de votre choix
            j = j + 1
            For k = 1 To UBound(Tblo, 1) 'boucle sur la 1° dimension de l'array, les colonnes de la feuille
                Tblo(k, j) = Tblo(k, i) 'cette instruction permet de réindexer les éléments répondant 
                                        'à la condition testée et ignore les autres
            Next
        End If
    Next
    ReDim Preserve Tblo(1 To UBound(Tblo, 1), 1 To j) 
    Temp = Application.Transpose(Tblo)
    Range("G1").Resize(UBound(Temp, 1), UBound(Temp, 2)).Value = Temp
    Erase Tblo
    End Sub

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je ne comprend pas ce que tu veux faire mais en prenant les plages en paramètre de la fonction


    Exemple basique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function Toto(ByVal Rng As Range) As Long
     
    Toto = Rng.Rows.Count
    End Function

    On peut l'utiliser directement sur la feuille (fonction écrite dans un module standard) ou au sein d'une autre procédure.

    Exemple
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    ingénieur modélisation énergétique
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : ingénieur modélisation énergétique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    J'avoue, mon explication du problème n'est pas très claire...

    Enfait, j'ai un gros tableau et je souhaiterai recréer 2 petits tableaux afin de pouvoir faire mes interpolations, tout en conservant la première ligne du gros tableau, pour la positionner à la première lignes des 2 petits.

    Avec le code que j'ai récupérer plus haut, je peux récupérer les lignes d'un tableau suivant une condition particulière (une valeur en ordonné 1 particulière), mais cela ne me permet pas de rajouter la ligne des abscisses.



    J'ai essayer de manipuler des ranges, sans passer par du copier coller dans des feuilles cela ne marche pas.
    Début du code pour trouver les coordonnées de chaque petits tableaux. Après ca, il est nécessaire de fusionner la premiere ligne du tableau inputs avec le range défini par la macro, mais je n'arrive pas à mes fins.

    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
    Public Function Interpol_Lineaire_Triple(X1 As Variant, X2 As Variant, Y As Variant, inputs As Range) As Variant
     
        'Définitions des différentes variables
        Dim ligne As Integer
        Dim ligne_proche_basse_min As Integer
        Dim ligne_proche_basse_max As Integer
        Dim ligne_proche_haute_min As Integer
        Dim ligne_proche_haute_max As Integer
        Dim valeur_proche_basse As Double
        Dim valeur_proche_haute As Double
     
     
        'Détermination des variables
        ligne = 2                                                                     
        nb_ligne = inputs.Rows.Count
     
        With inputs           
            Do Until X1 <= .Cells(ligne, 1) 
                ligne = ligne + 1
                ligne_proche_basse_max = ligne - 1
                valeur_proche_basse = .Cells(ligne_proche_basse_max, 1)
                ligne_proche_haute_min = ligne
                valeur_proche_haute = .Cells(ligne_proche_haute_min, 1)
            Loop
     
             ligne = 2
            Do Until valeur_proche_basse <= .Cells(ligne, 1)
                ligne = ligne + 1
                ligne_proche_basse_min = ligne
            Loop
     
            ligne = nb_ligne
            Do Until valeur_proche_haute >= .Cells(ligne, 1)
                ligne = ligne - 1
                ligne_proche_haute_max = ligne
            Loop
        End With
     
    End Function

  4. #4
    Futur Membre du Club
    Homme Profil pro
    ingénieur modélisation énergétique
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : ingénieur modélisation énergétique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Résolu... J'ai d'abord définit les limites de mes 2 arrays

    Puis pas mal utilisé les fonctions d'excelabo pour fusionner mes arrays

    Ensuite il fallait rajouter dans ma fonction d'interpolation double la condition de tableau ou pas et modifié les arguments en variant.

    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
    Public Function Interpol_Lineaire_Double(X As Variant, Y As Variant, inputs As Variant) As Double    
     
        Dim nx As Long, ny As Long
        Dim lowerx As Long, lowery As Long, upperx As Long, uppery As Long, i As Long
        Dim XL As Double, XU As Double, YL As Double, YU As Double
        Dim temp1 As Double, temp2 As Double
     
        If TypeOf inputs Is Range Then
            nx = inputs.Rows.Count
            ny = inputs.Columns.Count
        Else
            nx = UBound(inputs, 1)
            ny = UBound(inputs, 2)
        End If
     
    '''' BLABLABLA
     
    End Function

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

Discussions similaires

  1. Supprimer des lignes d'un tableau
    Par thorgal1612 dans le forum SAGE
    Réponses: 2
    Dernier message: 03/06/2013, 09h58
  2. Comment puis-je supprimer des lignes d'un tableau
    Par pierrot10 dans le forum jQuery
    Réponses: 2
    Dernier message: 25/03/2013, 22h23
  3. [AJAX] Supprimer des lignes d'un tableau
    Par kakashi99 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/02/2009, 11h22
  4. supprimer des lignes d'un tableau HTML
    Par spax dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 24/09/2008, 16h19
  5. [VBA-E] Supprimer des lignes à partir d'une variable tableau
    Par humbp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2008, 08h09

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