Identification des Doublons avec Variable Tableaux (Réstitution de colonne choisit ?)

laurent950

XLDnaute Barbatruc
Bonsoir le forum, MJ13, MichD, Misange, Dranred.

je vous ai écris à tous les trois car je bute depuis 1 semaine sur le sujet, je sais pas si j'essaie de faire quelque choses qui n'est pas faisable ou si je mi prend mal ?

le bute de cette exercise est :
La récupération ciblé de colonne dans une Variable Tableau pour un vers export excel (seulement des colonnes choisit dans cette Variable Tableau)

j' ai ajouter les deux fichier identique (avec même codes) :
format excel 2003
format excel 2007

J'ai repérer les doublons dans la Variable tableau, crée un compteur pour les Noms en doubles et restitué cette liste sans les doublons.

Sur une Variable tableau (à deux dimension) comment chosir les colonnes que lon veux exporter vers excel sans exporter tous le tableaux vers excel ?

Exemple :

temp3(1 to 13, 1 to 5)

‘ Ici ont exporte tous le Tableau en mémoire vers excel.

Range("G1").Resize(UBound(temp3, 1), UBound(temp3, 2)) = temp3 / vrais car c'est votre exemple

‘ Ici J'aimerais juste la colonne 3 de la Variable Tableau

Range("G1").Resize(3,3) = temp3 / faux

' Ici j'aimerais juste les colonnes 2 à 3 de la Variable Tableau.

Range("G1").Resize(2,4) = temp3 / faux


Voici le code qui traite les doublons, la couleur est une astuce je sais pas si elle est bien appliquer ?

Code :

VB:
Sub SansDoublonsF2()

' Nettoyage
Range(Cells(1, 4), Cells(13, 14)).Clear

' test de la feuil 2
Dim temp1()
' temp1() = plage de la feuil2 mise en mémoire dans le tableau
' soit cellule A1:C13
F = Range("A65536").End(xlUp).Row
temp1 = Range(Cells(1, 1), Cells(F, 3))

Dim temp2()
' temp2() = stockage d'un Compteur + nom
' si déjà rencontrer dans la liste
' soit taile pour stockage :
' 13 lignes sur 2 colonnes --->> soit temp2(1 to 13, 1 to 2)
ReDim temp2(1 To F, 1 To 2)
For i = 1 To 13
d = i + 1
    For j = d To 13
        If temp1(i, 3) = temp1(j, 3) Then
            temp2(j, 1) = temp2(j, 1) + 1
            temp2(j, 2) = temp1(j, 3)
            Cells(j, 5).Interior.Color = 255
        End If
    Next j
Next i

' Restitution des données (par exemple ici j'aurais aimer juste la colonne 1 = compteur)
' mais je sais pas faire alors j'ai tous exporté ?
Range("D1").Resize(UBound(temp2, 1), UBound(temp2, 2)) = temp2

' Nouveau tableau pour réstitué que les données sans doublons
' je reprend les donner sur la feuil2 et je recomence je stock
' la plage de la feuil2 en mémoire dans un tableau temp3()
' soit un tableau de 13 lignes sur 5 colonnes A1:E13
temp3 = Range(Cells(1, 1), Cells(F, 5))
For i = 1 To 13
    If temp3(i, 4) <> Empty Then     ' efface tous
        temp3(i, 1) = Empty                 ' j'efface les donner (en mémoire) = ex : cellule A1
        temp3(i, 2) = Empty                 ' j'efface les donner (en mémoire) = ex : cellule B1
        temp3(i, 3) = Empty                 ' j'efface les donner (en mémoire) = ex : cellule C1
        temp3(i, 4) = Empty                 ' j'efface les donner (en mémoire) = ex : cellule D1
        temp3(i, 5) = Empty                 ' j'efface les donner (en mémoire) = ex : cellule E1
    Else                             ' efface le compteur et nom
        temp3(i, 4) = Empty                 ' j'efface les donner (en mémoire) = ex : cellule D1
        temp3(i, 5) = Empty                 ' j'efface les donner (en mémoire) = ex : cellule E1
    End If
Next i

' Je restitu le tableau (ici j'aurais juste voulu restituer les colonnes :
'   - 1 à 3 mais je ne sais pas faire alors j'ai tous restitué = 1 à 5.

' si j'avais su restitué la colonne 1 à 3 j'aurais évité cette opération dans

' la boucle inutile ici :
' Else                                      ' efface le compteur et nom
' temp3(i, 4) = Empty                       ' j'efface les donner (en mémoire) = ex : cellule D1
' temp3(i, 5) = Empty                       ' j'efface les donner (en mémoire) = ex : cellule E1

Range("G1").Resize(UBound(temp3, 1), UBound(temp3, 2)) = temp3

' Si vous avez une solution je serais content d'apprendre encore davantage
' merci
End Sub

Dans cette exemple j'aimerais supprimer ces phase intermédiare car Je ne comprends pas comment faire par selection directe de colonne dans la Variable Tableau et je suis obliger de passer par des étapes intermédiaire (Tableaux intermédiare) est cela alourdi le code pour la maintanabilité.

Je sais faire avec le dictionnaire Set Mondico = CreateObject("Scripting.Dictionary"), mais ces en tableaux a deux dimension que j'ai besoin.

Je vous remercie pour votre aide, en espèrent que mon poste proffite a d'autre par la même occasion est aussi par la richesse de se site qui fait que l'on apprend toujours un peux plus chaque jours.

Je tiens aussi à remercier, Misange, MichD et MJ13, Dranred qui m'on permis d'avancer et de comprendre la Variable Tableau qui est complexe mais très riche en éfficacité, grace à leur aide.


Laurent
 

Pièces jointes

  • doublon variable tableau 2007.xlsm
    24.7 KB · Affichages: 63
  • doublon variable tableau 2003.xls
    68 KB · Affichages: 71
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Bonsoir
En fait ça ne dérange pas d'affecter à la propriété Value d'une plage un tableau de Variant plus grand qu'elle (dans ma version d'Excel en tout cas). Il ignore ce qui est en trop voilà tout. Donc Range("G1").Resize(UBound(temp3, 1), 3) = temp3 devrait marcher même si la seconde dimension de temp3 est > 3
Cordialement.
 

laurent950

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Bonsoir Dranred,

Je vous remercie, cela fonctionne parfaitement. j'ai compris.

Range("G1").Resize(UBound(temp3, 1), 3) = temp3

cette exemple récupére la colonne 1 à 3 (en partant de la gauche vers la droite) et prend pas en compte la 4 et la 5. (sur un tableau a plus de 3 colonnes)

Si je veux recupérer juste la colonne N°2 sur un tableau 5 colonnes qu'elle serait l'instruction s'il vous plais.

je vous remercie pour votre aide.

laurent
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Ça je ne crois pas que ce soit possible. Dans ce cas il faut charger les colonnes isolément dans autant de Variant. Toutefois ces Variant peuvent être ...des éléments d'un tableau à une dimension ! Ça aboutit à des écritures genre Tablo(a)(b)(c) au lieu de Tablo(a,b,c) mais on conserve la possibilité de boucler dans toutes les dimensions.
Cordialement.
 

laurent950

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Bonjour Danred,

Je vous remercie encore, et je vous montre ce que j'ai dans la tête suite à votre explication, et ce que j'ai compris:

Exemple : si je veux juste la colonne 2 (juste celle entre la colonne 1 et 3) dans le tableau ci-dessous temps3 (a plus de 3 colonnes)

' Nouveau tableau pour récupération des données du temp3 dans le temps4 a 1 colonne
dim temp4()
redim temp4(1 to 13, 1 to 1)

for i = lbound(temp3, 1) to ubound(temp3,2)
temp4(i,1) = temp3(i,2)
next i

' Juste la colonne 2 dans un nouveau tableau :
Range("G1").Resize(UBound(temp4, 1),UBound(temp4, 2) = temp4

C'est un peux flou et j'ai fait cette exemple en fonction de votre explication ci-dessous :

Danred (Ça aboutit à des écritures genre Tablo(a)(b)(c) au lieu de Tablo(a,b,c) mais on conserve la possibilité de boucler dans toutes les dimensions.)

Je tiens à vous remercier Danred, et je serais content d’avoir une réponse de votre part pour savoir ci j'ai bien compris vos explications, car ces mes début est ces pas évident encore.

Laurent
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Bonjour,


>Si je veux recupérer juste la colonne N°2 sur un tableau 5 colonnes qu'elle serait l'instruction s'il vous plais.

'-- 2eme colonne du tableau a(,) dans tableau d() à 1 dimension
d = Application.Transpose(Application.Index(a, , 2))


Code:
Sub TransfertColonneTableau2DDansTableau1D()
  Dim a(1 To 3, 1 To 3)
  a(1, 1) = 11
  a(2, 1) = 12
  a(3, 1) = 13

  a(1, 2) = 21
  a(2, 2) = 22
  a(3, 2) = 23

  a(1, 3) = 31
  a(2, 3) = 32
  a(3, 3) = 33
  '-- 2eme colonne du tableau a(,)dans tableau c(,) à 2 dimensions (3 x1 )
  c = Application.Index(a, , 2)
  ' -- transfert dans le tableur
  [A2].Resize(UBound(c)) = c
    '-- 2eme colonne du tableau a(,)dans tableau d() à 1 dimension
  d = Application.Transpose(Application.Index(a, , 2))
  ' -- transfert dans le tableur
  [C2].Resize(UBound(c)) = Application.Transpose(d)
End Sub

'--- Transfert 2e colonne d'un tableau a(,) à 2 dimensions dans une colonne du tableur
[G2].Resize(UBound(a, 1)) = Application.Index(a, , 2)


Les tableaux

Avec des tableaux emboités

Code:
Sub TransfertLigneTableauAvecTableauxEmboités()
  Dim Tout(1 To 4)
  '--Transfert du champ [A1:D3] dans Tout()
  For lig = 1 To 4
    Tout(lig) = [A1:D1].Offset(lig - 1)
  Next lig
  '-- extraction d'une ligne dans le tableur
  [A10].Resize(, 4) = Tout(2)
  '-- extraction d'une ligne dans un tableau a()
  a = Tout(2)
  [A12].Resize(, 4) = a
  '-- transfert de valeurs dans une ligne du tableau
  Tout(2) = [{1,2,3,4}]
  [A14].Resize(, 4) = Tout(2)
  '---- Modification d'un élément
  Tout(2)(2) = 99
  [A16].Resize(, 4) = Tout(2)
End Sub

JB
 

Pièces jointes

  • TransfertLigneTableau.xls
    25 KB · Affichages: 66
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Bonjour.
Autant pour moi, C'est possible alors. Je n'avais jamais pensé à essayer. Si on pouvait aussi faire l'inverse, c'est à dire renseigner une partie de tableau à partir d'un autre, ce serait parfait !
Cordialement
 

david84

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Bonjour,
Si on pouvait aussi faire l'inverse, c'est à dire renseigner une partie de tableau à partir d'un autre, ce serait parfait !
Qu'entends-tu par "faire l'inverse" ?
Cherches-tu à agrandir un array avec les éléments d'une plage de données présentes dans la feuille ?
Cherches-tu à agrandir un array avec les éléments d'un autre array ?
Cherches-tu à faire autre chose ?
A+
 

Dranreb

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Non: garnir d'un seul coup une colonne ou une ligne d'un tableau, voire un sous tableau de 5 lignes et 3 colonnes inclus au milieu, et tout ça sans boucle programmée en VB. Tout ce qu'il est possible de faire dans les cellules d'une feuille, quoi, en lecture comme en écriture, mais dans un tableau. Existerait il une DLL qui offrirait de telle fonctionnalités ultra performantes ?
P.S.
agrandir un array avec les éléments d'un autre array ?
Ça déjà ce serait pas mal. Ça existe ? (avec Redim Préserve à la rigueur, mais sans boucle derrière bien évidemment)
À +
 
Dernière édition:

laurent950

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Bonsoir Monsieur Boisgontier,Danred, David84,

Pour les postes #7 et #8 et #9 :

Monsieur Boisgontier a répondu en poste #6 "Avec des tableaux emboités" avec un exemple en (fichier excel) joint.

Merci Monsieur Boisgontier vous êtes très fort, et à votre partage et savoir d'un travail exeptionnel et prècis.

laurent
 

laurent950

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Bonsoir, Mr Boisgontier

Je vous remercie pour votre réponse qui me permet de comprendre un peux plus chaque jour.

La suite de ce poste et lié à votre astuce pour extraire juste une colonne d’un tableau, comme votre exemple : (Grand Merci à Mr Boigontier)

‘----------------------------------------------------------------------------------------------------------------
Réponse de Mr Boigontier
[G2].Resize(UBound(a, 1)) = Application.Index(a, , 2)

‘----------------------------------------------------------------------------------------------------------------

Pour la suite de se poste j’ai eu une autre idée pour compléter mes connaissance en faisant un nouveau fichier très simple qui d’ailleurs est la suite logique de ce poste.

Plage Excel de (13 lignes sur 5 colonnes) qui correspond au ---->> tab1()

Mise en mémoire variable tableau de cette plage soit ------>> soit tab1

Dans le tab2() que je crée je copie les données (des lignes) qui corresponde = à la villes paris.

‘--------------------------------------------------------------------------------------------------------------------

Le bute de de poste est de récuperer les donner de la variable tableau et de copier les donner dans la feuille Excel ------->> en une seul fois


Code : avec fichier joint pour le test est restitution des donner dans cette même feuille.

VB:
Option Base 1
Sub test()
Dim tab1() As Variant
Dim tab2() As Variant

der = Range("a65536").End(xlUp).Row

tab1 = Range(Cells(2, 1), Cells(der, 5))

' Nouveau tableau valeur que Paris
' extraire que les Nom de la ville de paris
' colonne c et d (uniquement)
ReDim tab2(1 To UBound(tab1, 1), 5)

For i = 1 To UBound(tab1, 1)
If tab1(i, 5) = "paris" Then
tab2(i, 1) = tab1(i, 1)
tab2(i, 2) = tab1(i, 2)
tab2(i, 3) = tab1(i, 3)
tab2(i, 4) = tab1(i, 4)
tab2(i, 5) = tab1(i, 5)
End If
Next i


' je veux coller les colonnes de la variable tableau en 1 fois ?
' Ici je dois passer en deux étapes pour coller les colonnes (2 et 3 et 4)

' --------------------------------------------------------------------

' de la variable tableau dans les colonnes Excel (G2 et H2 et I2)
[G2].Resize(UBound(tab2, 1)) = Application.Index(tab2, , 2)
[H2].Resize(UBound(tab2, 1)) = Application.Index(tab2, , 3)
[I2].Resize(UBound(tab2, 1)) = Application.Index(tab2, , 4)

' Comment faire en une fois ?
' --------------------------------------------------------------------

End Sub

Récape de la restitution des donner vers Excel en deux partie. ( se que je connais et se que je connais pas encore ?)

Détail du tableau :

Tableau de la feuille excel tab1() constitué de 13 lignes et 5 colonnes (titre ci-dessous)

Nb Ligne Code nom Prénom ville

Pour info :
- Le tab2() est de même dimension que le tab1()
- Option de base 1 pour les même coordonner entre le tab1() Excel et tab2() mémoire

‘ ---------------------------------------------------------------------------------------------------------------

Je connais actuellement ces méthodes : pour récupérer en une fois

Récupérer tous le tableau en une seule fois : soit (toutes les colonnes de ce tableau)
Range("A20").Resize(UBound(tab2, 1), UBound(tab2, 2)) = tab2

Et

Récupérer les colonnes de tableau ---- > de la gauche vers la droite : (Nb Ligne, Codes, Nom)
Range("G25").Resize(UBound(tab2, 1), 3) = tab2

Et

Récupérer juste une colonne du tableau ------ > la colonne du tableau : (nom)
[K27].Resize(UBound(tab2, 1)) = Application.Index(tab2, , 3)

‘----------------------------------------------------------------------------------------------------------------

Ce que je ne sais pas faire c’est : pour récupérer en une fois

Récupérer les colonnes de tableau ------ >de la droite vers la gauche : (nom, Prénom, ville) ??

Et

Récupérer des colonnes intermédiaire : (Code, nom, Prénom) ??



Un grand merci a Misange, Boigontier, Dranred, MichD, Victor21, Staple1600. De m’avoir aidé à comprendre, et utilisé la variable tableau qui est très utile est intéressent. Je leur suis très reconnaissant du temps passé à essayer de comprendre mes besoins et d’avoir su me répondre avec patience et précision. Grand merci à vous tous est j’espère encore apprendre beaucoup et partager aussi mes connaissance avec vous ou d’autre… sans oublier le forum qui est formidable avec tous ceux qui le compose.

Laurent
 

Pièces jointes

  • Variable tableaux extraire colonnes intermédiaire.xls
    34 KB · Affichages: 76
Dernière édition:

david84

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Bonsoir,
à ma connaissance, je ne pense pas que tu puisses transférer en une seule fois certaines colonnes d'un tableau VBA vers la feuille de calcul.
Tu peux utiliser une boucle en te servant de la fonction Index comme montré par JB ici.
Tu peux adapter l'idée à ton exemple de la manière suivante :
Code:
Option Base 1
Sub test()
Dim tab1() As Variant, tab2() As Variant
Dim i As Long, j As Byte, k As Byte

der = Range("a2").End(xlDown).Row 'utiliser xldown car xlup te comptabilise la cellule A19

tab1 = Range(Cells(2, 1), Cells(der, 5))

' Nouveau tableau valeur que Paris
' extraire que les Nom de la ville de paris
' colonne c et d (uniquement)
ReDim tab2(1 To UBound(tab1, 1), 5)

For i = 1 To UBound(tab1, 1)
    If tab1(i, 5) = "paris" Then
        For j = 1 To UBound(tab1, 2)
            tab2(i, j) = tab1(i, j)
        Next j
    End If
Next i

For i = 2 To 4
    [G2].Offset(0, k).Resize(UBound(tab2, 1)) = Application.Index(tab2, , i)
    k = k + 1
Next i

End Sub
A+
 

laurent950

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Bonsoir David84,

Je vous remercie pour cette astuce qui est vraiment très pratique. Je n'y avais pas pensé et les boucles que vous m'avez proposées sont plus adapter.

Je joins le fichier que j'avais fait et copier en module2 votre exemple de programmation, dans le fichier que je compléter et que je joins a se poste. En espèrent que cela servent aussi à d'autre.

Merci David84, sans oublier tous ceux qui m'on aider sur cette fiche... Merci a vous tous.

Laurent
 

laurent950

XLDnaute Barbatruc
Re : Identification des Doublons avec Variable Tableaux (Réstitution de colonne chois

Bonsoir,

Une idée sur le forum que j'ajoute a se poste pour intégrer des couleurs avec une variable tableau :

https://www.excel-downloads.com/threads/doublons.150446/

et argument pour fonction en tableau toujours

https://www.excel-downloads.com/threads/decomposer-des-lignes-de-texte-en-colonne.186179/

Suppression des doublon extra :

https://www.excel-downloads.com/threads/resolu-fonction-macro-qui-supprime-les-doublons.172752/

laurent
 
Dernière édition:

laurent950

XLDnaute Barbatruc
Pour Moi
je consigne cette astuce de Vrai ou Faux :
écrit (par @Staple1600 membre du forum Excel-downloads)
un Grand Merci à Staple1600 pour cette merveilleuse astuce que je ne connaissais pas.

VB:
Sub TestBoolean()
' Auteur de ce code @Staple1600
X = "A"
Y = "D"
Z = X
MsgBox (Z = "A") + ((Z = "D") * 0), vbInformation, "En VBA, True=-1, False=0"
Z = Y
MsgBox (Z = "D") + ((Z = "A") * 0), vbInformation, "En VBA, True=-1, False=0"
End Sub
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
418
Réponses
11
Affichages
630

Statistiques des forums

Discussions
314 629
Messages
2 111 351
Membres
111 111
dernier inscrit
houndemint