Aide formules traitement données

Non il n'y a plus de type,

J'ai dorénavant une feuille par TYPE avec les infos qui m'intéresse dedans.

Un exemple en PJ, dans la feuille "Liste_AIN" le résultat que je cherche à obtenir

3exemple.xlsx (10.33 Ko)

ne concerne que ma feuille AIN par exemple, mais j'adapterai pour que ça le fasse ensuite pour d'autres feuilles (PID, etc...)

Merci encore

Bonjour indemyx,

Je te retourne ton fichier modifié :

4exemple.xlsm (16.79 Ko)

À l'ouverture du classeur : feuille "Liste_AIN" vide (sauf entêtes).

Va sur la 1ère feuille "AIN" ; Ctrl e ➯ travail effectué

Merci de me donner ton avis.

dhany

Super merci pour ton retour.

J'avais une autre question du coup maintenant ^^

J'ai fais un bout de VB qui fait ceci :

Dim TypeBloc As String
Dim nbLignes As Integer
nbLignes = Range("A2", Selection.End(xlDown)).Cells.Count

For I = 1 To nbLignes
' Analyse du Type de bloc
    If Range("A" & I) Like "*TYPE*" Then
        TypeBloc = Range("B" & I).Value 
'Test du type de bloc 
            If TypeBloc = "AIN" Then GoTo Extract_AIN
            End If
            If TypeBloc = "PIDA" Then GoTo Extract_PID
    End If
Next I

Mais ça ne fonctionne pas, erreur de compilation : end if sans bloc if

Saurais tu me dire ce qui coince ?

Merci encore pour ton aide précieuse

Bonjour indemyx,

Ton erreur de compilation vient du End If situé entre les 2 If TypeBloc = ... : il est en trop !


Je te propose le code VBA ci-dessous ; attention : lis bien tous les commentaires !

Option Explicit

Sub Essai()
  Dim TypeBloc$, nbLignes%, I%
  'tu veux vraiment calculer nbLignes selon la Selection ?
  nbLignes = Range("A2", Selection.End(xlDown)).Cells.Count
  'ne serait-ce pas plutôt ceci, sans utiliser Selection :
  'nbLignes = [A2].End(xlDown).Row - 1
  For I = 1 To nbLignes
    'Analyse du Type de bloc
    If Range("A" & I) Like "*TYPE*" Then
        TypeBloc = Range("B" & I).Value
        'Test du type de bloc
        If TypeBloc = "AIN" Then GoTo Extract_AIN
        If TypeBloc = "PIDA" Then GoTo Extract_PID
        'si beaucoup de tests TypeBloc, utiliser :
        'Select Case TypeBloc
        '  Case "AIN": GoTo Extract_AIN
        '  Case "PID": GoTo Extract_PID
        '  'etc... (autres Case "XXX")
        'End Select
    End If
  Next I
  Exit Sub 'sortie pour rien faire si aucun TypeBloc trouvé
Extract_AIN:
  'ici, code de Extract_AIN
  Exit Sub 'sortie pour ne pas faire le code de Extract_PID
Extract_PID:
  'ici, code de Extract_PID
  'pas d'Exit Sub car on est à la fin de la sub : on sort
End Sub

dhany

Super j'avance bien grace à ton aide.

Essaye comme ceci :

Analyse:

For I = 1 To nbLignes
    ' Analyse du Type de bloc
    If Range("A" & I) Like "*TYPE*" Then
        TypeBloc = Range("B" & I).Value
    ' Test du type de bloc
        If TypeBloc Like "*AIN*" Then GoTo Extract_AIN
        If TypeBloc Like "*PIDA*" Then GoTo Extract_PID
    End If
Next I
Exit Sub

Extract_AIN:
Do ....
Loop
Goto Analyse

Extract_PID:
Do....
Loop
Goto Analyse

dhany

Le problème de ça, c'est qu'on repars de I = 1 non ?

ah, ben c'est sûr qu'avec For I = 1 on repart de 1 ! ça, y'a aucun doute, lollll !!!

dhany

Et oui ^^

Et du coup ça me va pas car je veux qu'on passe au I suivant moi :p

J'ai peut être trouvé en faisant comme ceci :

For I = 1 To nbLignes
    ' Analyse du Type de bloc
    If Range("A" & I) Like "*TYPE*" Then
        TypeBloc = Range("B" & I).Value
    ' Test du type de bloc
        If TypeBloc Like "*AIN*" Then GoTo Extract_AIN
        If TypeBloc Like "*PIDA*" Then GoTo Extract_PID
    End If
Analyse:
Next I
Exit Sub

Extract_AIN:
Do ....
Loop
Goto Analyse

Extract_PID:
Do....
Loop
Goto Analyse

Pour éviter tous ces GoTo, qui sont contraires aux principes de la programmation structurée (et qu'on ne doit utiliser qu'exceptionnellement, par exemple pour une sub intégrant un gestionnaire d'erreurs), ce serait plus simple ainsi :

Private Sub Extract_AIN()
  Do ....
  Loop
End Sub

Private Sub Extract_PID()
  Do ....
  Loop
End Sub

Sub Essai()
  Dim nbLignes&, I&
  For I = 1 To nbLignes
    ' Analyse du Type de bloc
    If Range("A" & I) Like "*TYPE*" Then
      TypeBloc = Range("B" & I).Value
      ' Test du type de bloc
      If TypeBloc Like "*AIN*" Then Extract_AIN ' appel de la sub Extract_AIN() puis retour ici (I : inchangé)
      If TypeBloc Like "*PID*" Then Extract_PID ' appel de la sub Extract_PID() puis retour ici (I : inchangé)
    End If
  Next I
End Sub

dhany

Rechercher des sujets similaires à "aide formules traitement donnees"