Créer une boucle pour une suite de données

roulax

XLDnaute Nouveau
Bonjour,

J'ai un petit problème avec une boucle que je voulais réaliser.
Je voulais créer une boucle à partir de la cellule F7 jusque la dernière cellule non vide qui vérifie si la valeur de chaque cellule est alert ou epidemic.
Si c'est le cas, ma boucle doit créer un tcd, sinon elle doit vérifier la valeur suivante.
J'ai tenté avec le code ci-dessous, sans succés

PHP:
Range("F7:F250").Select
    For Each Cell In Selection
    X = X + 1
    ActiveCell.Offset(1, 0).Select
    If ActiveCell.Value = "Epidemic" Or ActiveCell.Value = "Alert" Then
   ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= 
        "'CR Database'!R1C1:R28515C23").CreatePivotTable TableDestination _
        :="", TableName:="Tableau croisé dynamique1", DefaultVersion:= _
        xlPivotTableVersion10
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("Tableau croisé dynamique1").AddFields RowFields:= _
        Array("Cat 1", "Cat 2", "New fault code ", "Period")
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Defect")
        .Orientation = xlDataField
        .Caption = "Somme de Defect"
        .Function = xlSum
    End With
    ActiveWorkbook.ShowPivotTableFieldList = True
    Range("A4").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Cat 1"). _
        Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
        False, False)

Merci d'avance pour vos réponses
 

datacell33

XLDnaute Nouveau
Re : Créer une boucle pour une suite de données

Bonjour,

Je sais que beaucoup écrivent le VBA ainsi, mais en ce qui me concerne, je n'aime pas trop, car tu es obligé de préciser dans le code ta plage (F7:F250). Et si tu ajoutes 15 lignes dans ton fichier, tu dois modifier ton code VBA ?

Il y a d'autres façons de faire, en voici une moins orientée objet, mais très simple à comprendre...

Code:
ligne = 7
do while cells(ligne, 6).value <> "" (ou de vbempty)
    traitement
    ligne = ligne + 1
loop

et au lieu de lire la ActiveCell, lire directement les valeurs adressées en ligne et en colonne par cells(ligne, colonne).value.

Pour le reste, ce qui ne fonctionne pas, c'est la création du TCD ? Message erreur ? Fichier ?

Bon courage.
 

roulax

XLDnaute Nouveau
Re : Créer une boucle pour une suite de données

Re tototiti2008,

merci pour ta réponse

le problème est le suivant :

la boucle établi le 1er TCD en F8 car la valeur est alert, mais elle bloque sur la deuxième avec une erreur sur la ligne ActiveCell.Offset(1, 0).Select et elle ne poursuit pas sur les autres lignes.
je dois avoir 200 lignes à tester environ, 10 ont la valeur alert.

l'erreur est : erreur d'exécution 91 variable objet ou variable de bloc with non définie


difficile de partager les données, je vais essayer d'alléger le fichier.
 

roulax

XLDnaute Nouveau
Re : Créer une boucle pour une suite de données

Re datacell33,

merci pour ta réponse,

petite question sur ton code :
appliquer à mon exemple il serait :

ligne = 7
Do While Cells(ligne, 6).Value = "Epidemic" Or "Alert"
traitement
ligne = ligne + 1
Loop

non ?

traitement est une varaible à définir ?
si oui, comment faire avec la création du tcd ?

merci pour ton aide
 

datacell33

XLDnaute Nouveau
Re : Créer une boucle pour une suite de données

Je précide, "traitement", c'est ton traitement de création des TCD.
j'écrirais bien en précisant les feuilles, en revenant sur la bonne feuille (ça doit être ça ton problème...) : sheets("nom de ta feuille").select.


Code:
ligne = 7
sheets("nom de ta feuille").select
Do While Cells(ligne, 6).Value <> ""
    if Cells(ligne, 6).Value = "epidemic" or Cells(ligne, 6).Value = "alert" then
         'commentaire : traitement de création du TCD
         ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase,     SourceData:=  
        "'CR Database'!R1C1:R28515C23").CreatePivotTable TableDestination _ 
        :="", TableName:="Tableau croisé dynamique1", DefaultVersion:= _ 
        xlPivotTableVersion10 
        'etc....
    end if
    sheets("nom de ta feuille").select
    ligne = ligne + 1
Loop



Re datacell33,

merci pour ta réponse,

petite question sur ton code :
appliquer à mon exemple il serait :

ligne = 7
Do While Cells(ligne, 6).Value = "Epidemic" Or "Alert"
traitement
ligne = ligne + 1
Loop

non ?

traitement est une varaible à définir ?
si oui, comment faire avec la création du tcd ?

merci pour ton aide
 

Discussions similaires

Statistiques des forums

Discussions
312 503
Messages
2 089 053
Membres
104 013
dernier inscrit
VELONDAHY Mickaël