extraire

lola51

XLDnaute Nouveau
Bonjour le forum,
J’ai une feuille bd (données externes, requête sur web), je voudrais récupérer les données sans les entêtes.
J'ai essayé plusieurs solutions ; formule index, recherche ... il faut toujours des critères.

Ci-joints pj

Cordialement
 

Pièces jointes

  • journal 23 04 2012.xls
    72 KB · Affichages: 42
  • journal 23 04 2012.xls
    72 KB · Affichages: 41
  • journal 23 04 2012.xls
    72 KB · Affichages: 44

Efgé

XLDnaute Barbatruc
Re : extraire

Bonjour lola51 et bienvenu sur le forum, Bonjour Toto ; )
D'après les rûnes magiques du chaman de mon village:
Une proposition par macro, avec création de la feuille Récap. La ligne d'en tête utilisée est la 11em de la feuille Bd.
A noter que la feuille bd de l'exemple s'appelle "bd ". Attention pour le vrai fichier.
VB:
Private Sub CommandButton1_Click()
Dim i As Long
Dim F As Worksheet
Application.DisplayAlerts = False
Application.ScreenUpdating = False
On Error Resume Next
Set F = Sheets("extrait")
On Error GoTo 0
If Not F Is Nothing Then F.Delete
Sheets("bd ").Copy after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "extrait"
With Sheets("extrait")
    Sheets("bd ").Rows(11).Copy .Cells(1, 1)
    For i = .Cells(Rows.Count, 1).End(3).Row To 2 Step -1
        If .Cells(i, 2).Value = "" Or Not IsNumeric(.Cells(i, 2).Value) Then .Rows(i).Delete
    Next i
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Cordialement
 

Pièces jointes

  • journal(2).xls
    88 KB · Affichages: 33

R@chid

XLDnaute Barbatruc
Re : extraire

Bonjour lola et Bienvenue sur XLD,
Salut Tototiti,
Salut Efge,
en A2 :
Code:
=SI(LIGNES($2:2)<=SOMME(N(ESTNUM(Col_A)));INDEX(Col_A;PETITE.VALEUR(SI(ESTNUM(Col_A);LIGNE(INDIRECT("1:"&LIGNES(Col_A))));LIGNES($2:2)));"")
@ valider par Ctrl+Maj+Entree
@ tirer vers le bas

en B2 :
Code:
=SI(OU($A2="";COLONNE()>31);"";RECHERCHEV($A2;DECALER(Col_A;;;;COLONNE());COLONNE();0))
@ valider par Simple Entree
@ tirer vers le bas et vers la droite

Voir PJ
Amicalement

Edit : A1 et B1
 

Pièces jointes

  • journal 23 04 2012.xls
    495 KB · Affichages: 37
  • journal 23 04 2012.xls
    495 KB · Affichages: 36
  • journal 23 04 2012.xls
    495 KB · Affichages: 38
Dernière édition:

lola51

XLDnaute Nouveau
Re : extraire

Merci a tous,
Pour la formule matricielle

=SI(LIGNES($2:2)<=SOMME(N(ESTNUM(Col_A)));INDEX(Col_A;PETITE.VALEUR(SI(ESTNUM(Col_A);LIGNE(INDIRECT("1:"&LIGNES(Col_A))));LIGNES($2:2)));"")

Je voudrais savoir a quoi correspond (SOMME(N(ESTNUM) le N après de somme, simon pour le reste j'ai compris.
Pour la macro si j'actualise les données externes le nombre d'entête peut varier chaque jour.
et merci encore
A+
 

R@chid

XLDnaute Barbatruc
Re : extraire

Rebonjour,
Je voudrais savoir a quoi correspond (SOMME(N(ESTNUM) le N après de somme, simon pour le reste j'ai compris.
ESTNUM(PLAGE) va renvoyer des VRAI pour les valeurs numeriques et des FAUX pour les non numeriques, N() va convertir les VRAI en 1 et et les FAUX en 0 comme ca on peut avoir la SOMME().
Amicalement
 

Efgé

XLDnaute Barbatruc
Re : extraire

Re à tous, Bonjour Rachid :)
Pour la macro:
Le nombre d'en têtes est inconnu on peux en avoir de 1 à X. Quand je disais que l'en tête récupéré est en ligne 11, ce n'était qu'un précision.
On peux récupérer l'en tête sans connaitre son emplacement, et même prévoir sa possible absence:
VB:
Private Sub CommandButton1_Click()
Dim i As Long
Dim F As Worksheet, Rw As Range
With Application: .DisplayAlerts = False: .ScreenUpdating = False: End With
On Error Resume Next
    Set F = Sheets("extrait")
On Error GoTo 0
If Not F Is Nothing Then F.Delete
Sheets("bd ").Copy after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "extrait"
With Sheets("extrait")
    Set Rw = .Columns(1).Find("N°Entrée")
    
    If Not Rw Is Nothing Then
        .Rows(Rw.Row).Copy .Cells(1, 1)
    Else
        MsgBox "Pas de ligne d'en tête dans la base", 64, "Attention"
        .Rows(1).Insert
    End If
        
    For i = .Cells(Rows.Count, 1).End(3).Row To 2 Step -1
        If .Cells(i, 2).Value = "" Or Not IsNumeric(.Cells(i, 2).Value) Then _
        .Rows(i).Delete
    Next i
    .Columns.AutoFit
End With
With Application: .DisplayAlerts = True: .ScreenUpdating = True: End With
End Sub
@ Rachid : Superbe formule, qui se permet de finir par un smiley ; 0 ) ) . Du grand art :D

Cordialement
 

Discussions similaires

Réponses
6
Affichages
342
Réponses
8
Affichages
232

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 180
dernier inscrit
Vcr