Extraction de données - find

cs_niemans Messages postés 8 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 17 mai 2007 - 14 mai 2007 à 21:35
cs_niemans Messages postés 8 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 17 mai 2007 - 15 mai 2007 à 12:52
Bonjour,

je souhaiterais extraire des données à partir d'un gros fichier excel.

Les données sont rangées sur 8 colonnes et sont précédées d'un en-tête qui commence par (Data......

Je voudrais faire une macro du style

positionnement sur la cellule qui contient Data

while cellule suivante != Data

selectionner cellule

des que l'occurence suivante de Data est trouvé:

copier l'ensemble des cellules dans une nouvelle feuille.

A la fin les donnees se retrouvent dans des feuilles différentes.

Comment faire pour parcourir les cellules de droite à gauche et de haut en bas en recherchant la cellule contenant Data?

Je pensait à une boucle while/ wend mais je ne sait pas comment l'écrire.

8 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
14 mai 2007 à 22:13
Salut,

qques indications :

* trouver la dernière ligne utilisée d'une colonne :
DerLigne = Range("A65536").End(xlUp).Row     'exemple pour la colonne A

* trouver la dernière colonne utilisée d'une ligne :

DerColonne = Range("IV10").End(xlLeft).Column     'exemple pour la ligne 10

* Faire une boucle dans la colonne A :
For i = 1 To PLV
    MsgBox Cells(i, 1).Value
Next i

* Faire une boucle dans la colonne A , si la valeur correspond à une donnée, lire la ligne :

For i = 1 To PLV

    If Cells(i, 1).Value = "Mot recherché" Then
      
DerColonne = Range("IV" & i).End(xlLeft).Column
       For j = 1 To DerColonne
          MsgBox Cells(i, j).Value
       Next j
    End If
Next i

Voilà déjà de bonnes bases pour arriver à tes fins

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
cs_niemans Messages postés 8 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 17 mai 2007
14 mai 2007 à 23:37
Merci pour votre réponse mais je suis débutant et j'ai un peu de mal à comprendre.Que signifie PLV?C'est la fin du tableau?
En fait le mot recherché se trouve toujours dans la deuxième colonne.
l'en-tête fait 10 colonnes sur 5-6 lignes et commence à la deuxième colonne.
Il est suivi des données sur 8 colonnes et un grand nombre de lignes.
Le fichier est composé de 10 à 12 en-têtes avec les données intercalées entre chaque en-tête.

Si je fait:

For i = 2 To PLV
    If Cells(i, 2).Value = "Data" Then

             DerColonne = Range("IV" & i).End(xlLeft).Column
             For j = 1 To DerColonne
                 Range(Cells(j, 1), Cells(j, 10)).Copy

             Next j
         End If
Next i
Je copie de "Data" jusqu'à la fin du fichier?
               
               
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
14 mai 2007 à 23:49
En fait PLV, c'est une variable (je l'appelle comme ça car j'y met comme abréviation Premiere Ligne Vide, mais en fait, ce serait plutot Derniere Ligne Utilises, mais bon) qui contient une valeur, ça evite de boucler inutilement dans des cellules vides (jusqu'à 65536)

Pour ton truc de copie, dans ce cas, ma boucle sur les colonnes est inutile

For i = 2 To PLV
    If Cells(i, 2).Value = "Data" Then
        Range(Cells(i, 1), Cells(i, 10)).Copy
        Sheets("Ta feuille 2").Range("Destination").Paste
    End If
Next i
~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

Mais ça c'est pour exemple, apparemment, tu cherches 2 fois le mot Data, non ?
Le premier Data, c'est le début de la zone, et le second Data, c'est pour terminer la zone, est-ce bien ça ?
Si oui, après on le copie (la plage trouvée par code) dans A1 d'une autre feuille ?

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
cs_niemans Messages postés 8 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 17 mai 2007
15 mai 2007 à 00:14
Oui, c'est exactement ce que je voudrais faire
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
15 mai 2007 à 00:18
Alors essaie avec ce bout de code :

Dim bVerif As Boolean, MyStart As Long
For i = 2 To PLV
    If Cells(i, 2).Value = "Data" Then
       If bVerif = False Then
            MyStart = i
            bVerif = True
       Else
            Exit For
       End If
    End If
Next i
        Range(Cells(MyStart, 1), Cells(i, 10)).Copy
        Sheets("Ta feuille 2").Range("Destination").Paste

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
cs_niemans Messages postés 8 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 17 mai 2007
15 mai 2007 à 00:36
Merci beaucoup,
j'essaierai demain car je n'ai pas de fichier sous la main mais ç'est exactement ce que je cherchais à faire.
"Ta feuille 2"c'est le nom de la nouvelle feuille ou sont copiés les data?
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
15 mai 2007 à 00:40
Non, il faut créer la feuille avant le code que je t'ai mis, style Sheets.Add
(pense à la renommer)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
0
cs_niemans Messages postés 8 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 17 mai 2007
15 mai 2007 à 12:52
La macro s'arrête sur la ligne
Range(Cells(MyStart, 1), Cells(i, 10)).Copy
avec le message:
Run-Time error '1004'
Application-defined or object-defined error
0
Rejoignez-nous