Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Extraction de données d'un tableau

  • Initiateur de la discussion Initiateur de la discussion roro69
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

roro69

XLDnaute Impliqué
Bonsoir et merci pour l'aide et le temps consacré
Voici mon problème j'ai un tableau avec des série de chiffres et je dois extraire certaines informations suivants des séries.Je joints mon classeur avec ce que je souhaiterais.
Merci beaucoup
 

Pièces jointes

Re : Extraction de données d'un tableau

Bonjour,

la logique de récupération (figurant dans le classeur) et les données coloriées en jaune( résultat attendu ?) ne concordent pas ? (ou je n'ai pas compris la logique!)

Quand vous dites "je récupère les données une fois la plus grande ;une fois la plus petite;...." de quelles données parlez vous ? (données de quelle colonne, ligne ?)

Quand vous dites:
Si nombre de répétions = 2 je récupère les données une fois la plus grande ;une fois la plus petite;ainsi de suite jusqu'a changement de série
dans la mesure où la série comporte 2 lignes(donc 2 répétitions ?) qu'entendez vous par ainsi de suite...

...


Quelques précisions supplémentaires vous apporteraient sans doute davantage de réponses.

A+
 
Re : Extraction de données d'un tableau

Bonjour à tous,
les données de roro69 semblent triées dans l'ordre des numéros de pages puis dans l'ordre des "haut", et les "répétitions" semblent désigner le nombre de lignes de données pour une même page.
Les séries s'arrêtent quand pour une page on n'a pas le même nombre de lignes de données que pour la page précédente.
par exemple :
7 101 116 2 --> la page 7 a 2 lignes de données (101-116) constitue la plus "petite"
7 186 193 2 (186-193) constitue la plus "grande"
8 93 124 2 --> la page 8 a elle aussi 2 lignes de données, donc elle continue la série des "2 répétitions"
8 185 193 2
dans cet exemple, pour cette série de 2 répétitions, les lignes à conserver seront
7 186 193 2 (considérée comme la plus grande pour la page 7) puis
8 93 124 2 (considérée comme la plus petite pour la page 8) et ainsi de suite tant que l'on aura des pages avec "2 répétitions" c'est à dire dans le fichier transmis en exemple aux lignes de la page 44 pour laquelle il y a "3 répétitions".
j'ai essayé de résumer ce que j'ai compris dans l'exemple de roro69 dans le fichier joint
mais il y a effectivement des choix qui ne semblent pas suivre les règles expliquées.

Bonne journée à tous
 

Pièces jointes

Dernière édition:
Re : Extraction de données d'un tableau

Bonjour PAF Et Jacou
Merci de votre intérêt
Jacou tu as très bien compris ce que je voulais; il est vrai que j'ai fait une erreur dans le coloriage de mes cellules.
Je te remercie si tu peut me trouver un code qui pourrait m'extraire les données

Merci pour le temps accordé et l'aide apporté
 
Re : Extraction de données d'un tableau

re Bonjour en relisant ton poste jacou Je pense que mon code resemblerait à ca:
Si cellule 4 =1 alors je récupère la ligne telle que
si Cellule 4 = 2 alors je boucle jusqu’à cellule différente 2 par 2 -1
si Cellule 4 = 3 alors je boucle jusqu’à cellule différente 3 par 3 -2
Mais là je bloque un peu
 
Re : Extraction de données d'un tableau

Bonsoir roro69, bonsoir le forum

Je propose la macro "extraction" dans le fichier joint.
Les lignes transférées le sont dans une feuille nommée "récup".
(les séries dont les "répétitions" sont supérieures à 5 sont traitées avec la même logique que les précédentes)

Bonne nuit

Jacou
 

Pièces jointes

Re : Extraction de données d'un tableau

Bonjour roro69, Jacou,

une autre proposition, honteusement inspirée de celle de Jacou, mais basée sur des tableaux pour gagner sur le temps de traitement des 20000 lignes prévues.

Code:
Sub Tri()
 Dim Ws1 As Worksheet, Ws2 As Worksheet
 Dim DerL As Long,  Ind As Long, MonTab, TabFin()
 Dim Rep As Byte, Rep1 As Byte

 Set Ws1 = Worksheets("Feuil2")
 Set Ws2 = Worksheets("récup")

 DerL = Ws1.Range("A" & Rows.Count).End(xlUp).Row
 MonTab = Ws1.Range("A2:D" & DerL)

 Rep = 0
 Ind = 1
 While Ind < UBound(MonTab, 1)
    If MonTab(Ind, 4) = Rep Then
        x = x + 1
        For i = 1 To 3
            ReDim Preserve TabFin(1 To 3, 1 To x)
            TabFin(i, x) = MonTab(Ind + Rep1 - 1, i)
        Next i
        If Rep1 = 1 Then Rep1 = Rep Else Rep1 = Rep1 - 1
    
        Ind = Ind + Rep
    Else
        Rep = MonTab(Ind, 4)
        Rep1 = Rep
    End If
 Wend

 Ws2.Range("A2").Resize(UBound(TabFin, 2), UBound(TabFin, 1)) = Application.Transpose(TabFin)
End Sub

A+
 
Re : Extraction de données d'un tableau

Bonjour et un grand merci à vous deux c'est génial
Vraiment bravo
J'aurais une dernière question dans le fichier exemple j'ai tapé les nombre de répétions à la main ;dans mon fichier originale je n'ai pas cette colonne ;y a t-il un moyen par code de noter ces répétitions.
Merci beaucoup pour votre aide et votre temps consacré.

PS:En fait voilà ce que je souhaite automatiser:
Faitmain

Je voudrais ne pas être obliger de passer par le logiciel de dessin pour créer mes patrons
Donc si quelqu'un peut m'aider se serait sympa
Je joint le classeur avec un fichier image de test
on ne peut tester que des images noir et blanc et que .bmp ou.jpg
Merci si quelqu'un peut m'aider
 

Pièces jointes

Re : Extraction de données d'un tableau

Re,

pour les répétitions

insérérer cette ligne de code
Code:
Ws1.Range("D2:D" & DerL).Formula = "=COUNTIF($A$2:$A$" & DerL & ",A2)"

entre
Code:
DerL = Ws1.Range("A" & Rows.Count).End(xlUp).Row
et
Code:
 MonTab = Ws1.Range("A2:D" & DerL)
du code proposé

Bonne suite
 
Dernière édition:
Re : Extraction de données d'un tableau

Merci beaucoup paf et jacou
pour votre aide et pour le temps que vous m'avez accordé.

Une toute petite dernière question ; y a t'il un moyen de travailler sur des images .png ou vais je devoir passer par une autre solution?
Merci beaucoup
 
Re : Extraction de données d'un tableau

Bonsoir
Je m'excuse de vous déranger encore avec mon problème ; mais en finalisant le code de mon projet j'ai un problème avec la boucle while (Dépassement de capacité) .Je poste le code si vous pouviez y jetez un oeil se serait génial ; je touche presque à la fin de mon projet.

Merci pour le temps accordé et l'aide apporté
 
Re : Extraction de données d'un tableau

Re,

Une toute petite dernière question ; y a t'il un moyen de travailler sur des images .png

dans l'état actuel du code, non. Peut-être qu' une âme charitable pourrait s'y pencher dans une autre discussion . En attendant il y a la possibilité d'enregistrer sous JPG les image PNG à l'aide de logiciel tels que PAINT , PhotoFiltre ...

Pour le post #11,

pas facile de s'y retrouver, noms de variables et indices de tableaux étant modifiés.

La reprise de répétitions ne donnait pas les résultats escomptés et l'utilisation de la variable Index (mot réservé VBA) posait soucis. Reprise en utilisant un dictionnaire.
la dépassement de capacité des variables déclarée en Byte, est dûe à un dimensionnement excessif du tableau Tablo (largeur x hauteur de l'image). reprise en dimensionnant le tableau au fur et à mesure de son remplissage( mais inversion des données)

le résultat de la macro initiale et de ce code donne une légère différence (+/- 1) au niveau de de la colonne des X

a priori :

Code:
Sub infoimage()
 Dim bm_départ As BITMAP
 Dim x1&, y1&, m&, l&, n&, p&, i&, hDC&
 Dim Tablo(), tabfin()
 Dim Rep As Byte, Rep1 As Byte
 Dim MonDico

 Set MonDico = CreateObject("Scripting.Dictionary")
 fich_img = Application.GetOpenFilename(, , "choisissez l'image à récupérer (.bmp)")
 If fich_img = False Then Exit Sub


 'récupérer l'image
 écran_DC = GetDC(0)
 Set img_départ = LoadPicture(fich_img)
 GetObjectAPI img_départ.Handle, Len(bm_départ), bm_départ 'récupère le bitmap correspondant à l'image
 'créer un bitmap img_ini, dans le imgDC pour y accueillir l'image
 img_DC = CreateCompatibleDC(écran_DC)
 img_DCOld = SelectObject(img_DC, img_départ)
 'récupération des colonnes de mon image
 larg = bm_départ.bmWidth
 haut = bm_départ.bmHeight
 p = larg * haut
 For x1 = 0 To larg - 1
    n = 0
    l = 1
    For y1 = 0 To haut - 1
        pix = GetPixel(img_DC, Int(x1), Int(y1))
        If n = 0 Then
            If pix = 0 Then
                n = y1 - 1
                l = 1
            End If
        Else
            If pix = 0 Then
                l = l + 1
            Else
                ReDim Preserve Tablo(0 To 3, 0 To m)
                Tablo(0, m) = x1
                Tablo(1, m) = n
                Tablo(2, m) = n + l + 1
                Tablo(3, m) = 0
                m = m + 1
                n = 0
                l = 0
            End If
        End If
    Next
 Next

'reprise dans la colonne 4 des répétitions

 For i = LBound(Tablo, 2) To UBound(Tablo, 2)
    MonDico(Tablo(0, i)) = MonDico(Tablo(0, i)) + 1
 Next
 For i = LBound(Tablo, 2) To UBound(Tablo, 2)
    Tablo(3, i) = MonDico(Tablo(0, i))
 Next

 'Création Tableau final
 Rep = 0
 Ind = 0
 x = 0
 While Ind < UBound(Tablo, 2)
    If Tablo(3, Ind) = Rep Then
        For i = 0 To 2
            ReDim Preserve tabfin(0 To 2, 0 To x)
            tabfin(i, x) = Tablo(i, Ind + Rep1 - 1) ' et non Ind+Rep1
        Next i
        If Rep1 = 1 Then Rep1 = Rep Else Rep1 = Rep1 - 1
        Ind = Ind + Rep
        x = x + 1
    Else
        Rep = Tablo(3, Ind)
        Rep1 = Rep
    End If
 Wend
 Worksheets("F2").Range("G2").Resize(UBound(tabfin, 2) + 1, UBound(tabfin, 1) + 1) = Application.Transpose(tabfin)

 Set img_départ = Nothing
 DeleteObject SelectObject(img_DC, img_DCOld)
 DeleteDC img_DC
End Sub

Bonne suite
 
Re : Extraction de données d'un tableau

Bonsoir PAF .
Vraiment merci beaucoup de ton aide et du temps que tu me consacres ;c'est vraiment sympa.
J'ai essayé ton code çà fonctionne ; juste que dés que les répétions sont = à 4 ou = à 5 j'ai un décalage dans les récupérations.
Je joint mon fichier avec l'image d'essai . J' Ai relevé à la main dans les colonnes a b c les relevées idéales.
En tout cas un grand merci pour toute l'aide et les très bons conseils fourni.
 

Pièces jointes

Re : Extraction de données d'un tableau

Re,

Si je me réfère au besoin exprimé dans le classeur du post #1 :
Si nombre de répétions = 4 je récupère les données de la plus grande à la plus petite;ainsi de suite jusqu'a changement de série

or dans le dernier exemple fourni (EssaiLogPatron.xls, feuille TableauFinal tableau relevé à la main) dès qu'on est en répétition 4 (ligne 50), la ligne qui doit être sélectionnée serait non plus la plus grande mais la deuxième dans l'ordre croissant (soit la deuxième ligne d'une valeur).

Précisez bien votre besoin, afin qu'un autre intervenant puisse poursuivre.


Bonne suite
 
Re : Extraction de données d'un tableau

Bonsoir
désolé ; je débute ce projet et c'est un peu flou et compliqué pour moi ; il est vrai que j'ai trés mal analyser mes questions et mon orientation de mon projet.
Voilà je joint un fichier ou j'ai synthétiser comment j'aimerais récupérer les informations de mon image.
Je suis vraiment désolé mais ne pense pas que tu as perdu ton temps ;car vraiment j'ai encore appris plein de chose avec toi
En tout cas je te remercie de ta patience.

Allez tiens je te verse un petit vin jaune de chez moi et trinque à ta bonne santé
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
154
Réponses
10
Affichages
472
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…