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 :

Problème pour faire un tableau dynamique sans doublons [XL-2013]


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
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut Problème pour faire un tableau dynamique sans doublons
    Bonjourr,

    Je sais que ce problème a été énoncé de nombreuses fois mais j'ai un petit soucis dans mon code.:'(
    Alors voila, j'ai une série de données dans une colonne et je souhaiterais redimensionner un tableau dynamique dans une autre feuille à partir de ces données.

    Je m'explique:
    j'ai ma colonne B avec mes données (sachant qu'il y a des cellules vides dans ma colonne):

    dilatos
    "cellulle vide"
    pompe
    dilatos
    chaussures

    A partir de la, Et je souhaiterais que mon code repère 4 valeurs uniques et par conséquent dimensionne un tableau de 2 dimensions dynamiques avec 4 lignes.

    Voici mon ébauche de code:

    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
     
     
    Option Explicit
    Option Base 1
    Private Sub commande_fin()
     
    Dim commande() As Variant
    ReDim Preserve commande(1, 2)
    Dim i As Integer, j As Integer, t As Integer
    Dim endcell As Range
    Dim nb As Integer
     
     
     
    Set endcell = Feuil3.Range("B" & Rows.Count).End(xlUp).Rows
    nb = endcell.Row
     
    For i = 1 To nb
        For j = 1 To nb
            If Range("B" & i).Value <> Range("B" & j) Then
                ReDim Preserve commande(i, 2)
                commande(i, 2) = Range("B" & i).Value 'erreur d'execution ici
     
            End If
        Next
    Next
     
     
    For t = 1 To nb
        Feuil5.Cells(17 + t, 2) = commande(t, 2)
    Next
     
    End Sub
    Il y a une erreur d'execution que je comprends pas.... En utilisant un espion je ne comprends pas pourquoi mon code s'arrete aux deux premieres lignes de ma colonne B...

    Si vous pouviez m'aider je vous en serais éternellement reconnaissant

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lackam Voir le message
    Bonjour,

    Lorsque vous redimensionnez une matrice avec le mot clé Preserve, seule la dernière dimension peut être modifiée : Command(I,2) ne peut pas fonctionner. Il faut inverser les dimensions et écrire Command(2,I).

    Je n'ai pas regardé le reste du code.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    Lorsque vous redimensionnez une matrice avec le mot clé Preserve, seule la dernière dimension peut être modifiée : Command(I,2) ne peut pas fonctionner. Il faut inverser les dimensions et écrire Command(2,I).

    Je n'ai pas regardé le reste du code.
    Je souhaitais redimensionner seulement sur le nombre de lignes et non sur le nombre de colonnes.
    N'est-il pas possible de faire cela?https://www.developpez.net/forums/im...s/sontfous.gif

    Sinon la seule possibilité qui me vient à l'esprit serait de juxtaposer deux tableaux à une dimensions côte à côte

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lackam Voir le message
    La représentation d'une colonne ou d'une ligne dans une matrice n'est qu'une vue de l'esprit... Une dimension peut donc représenter aussi bien une ligne qu'une colonne, il y a juste un petit effort intellectuel à faire.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    J'ai modifié mon code en essayant de suivre tes indications:
    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
     
    Option Explicit
    Option Base 1
    Private Sub commande_fin()
     
    Dim commande() As Variant
    ReDim Preserve commande(2, 1)
    Dim i As Integer, j As Integer, t As Integer
    Dim endcell As Range
    Dim nb As Integer
    Dim endline As Integer
     
     
     
    Set endcell = Feuil3.Range("B" & Rows.Count).End(xlUp).Rows 'problème ici
    nb = endcell.Row
     
    For i = 1 To nb
        For j = 1 To nb
            If Range("B" & i).Value <> Range("B" & j) Then
                ReDim Preserve commande(2, 1 To i)
                commande(2, i) = Range("B" & i).Value
     
            End If
        Next
    Next
     
    endline = UBound(commande, 2)
     
    For t = 1 To endline
        Feuil5.Cells(17 + t, 2) = commande(2, t)
    Next
     
     
     
     
    End Sub
    Rien ne s'affiche sur ma feuille.
    Avec les espions et l'éxécution pas à pas détaillé, je remarque que je ne sors jamais de la boucle for.
    Est-ce dû à la ligne 10 ou ma variable endrow ne prend peut-être pas le numéro de la ligne mais la variable de la cellule en B10 (qui est un string)?

    Sinon je ne comprends pas

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lackam Voir le message
    Peux-tu mettre un classeur exemple non confidentiel en ligne ?

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    With CreateObject("AdoDb.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        ThisWorkbook.Sheets("commande").Range("A17").CopyFromRecordset .Execute("Select DISTINCT * from 
    [liste_sur_chantier$B2:" & Replace(ThisWorkbook.Sheets("liste_sur_chantier").Cells(Cells.Rows.Count, "B").End(xlUp).Address, "$", "") & "] Where [composants DN diamètre (DN)et plage de mesure]<>'composants DN diamètre (DN)et plage de mesure' and [composants DN diamètre (DN)et plage de mesure] is not null")
         .Close
    End With
    End Sub

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 35
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    With CreateObject("AdoDb.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        ThisWorkbook.Sheets("commande").Range("A17").CopyFromRecordset .Execute("Select DISTINCT * from 
    [liste_sur_chantier$B2:" & Replace(ThisWorkbook.Sheets("liste_sur_chantier").Cells(Cells.Rows.Count, "B").End(xlUp).Address, "$", "") & "] Where [composants DN diamètre (DN)et plage de mesure]<>'composants DN diamètre (DN)et plage de mesure' and [composants DN diamètre (DN)et plage de mesure] is not null")
         .Close
    End With
    End Sub
    Merci de votre aide, je vais travailler sur les codes que vous et Eric m'ont donné

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 27/01/2010, 09h54
  2. problème pour faire la somme d'un tableau
    Par newcodeur dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/07/2008, 16h50
  3. Réponses: 1
    Dernier message: 09/11/2006, 12h39
  4. [FLASH MX2004] Problème pour faire un bouton play
    Par melanie075 dans le forum Flash
    Réponses: 13
    Dernier message: 16/12/2004, 22h55

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