IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

variable tableau vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 86
    Par défaut variable tableau vba
    voila je suis toujours sur mon problème de variable de type tableau. Constituer de plusieur info dont les dates de pannes de matériels, je fais une petite étude stat pour trouvé la future date de vérif pour cela je trie le matériels je fais des filtres et lorsque j'ai fait sa g toute la liste d'un seule modèle, je peut donc étudier les dates.
    mes info je les met dans des variables tableau pour mon étude car elles seraient trop lourd dans mon fichier, mais sa fonctionne pas.
    je joins une version simplifié de mon fichier.
    ferronimus
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ouf !
    Désolé. Je viens d'ouvrir ton fichier et de regarder ta macro. Il est évident que tu ne peux pas t'en sortir. Tu fais trente-six choses à la fois.
    Bon, je ne vais pas épiloguer.
    Essaie de nous dire, en français (pas en code) ce que tu souhaites faire, comme si tu voulais réaliser un cahier des charges, c'est à dire pas à pas.

    J'ai ton tableau. Parle-moi de lui. Une ligne correspond à une "machine". Je pense que ce qui t'intéresse commence à la colonne "AA"
    Tu veux sans doute une fréquence d'intervention afin d'établir une date de maintenance préventive... par "machine" ou pour l'ensemble des machines de même type ?
    Ensuite, tes machines travaillent-elles le week-end ou seulement les jours ouvrés ?
    Les interventions peuvent-elles se faire le week-end ?
    Etc
    Si tu expliques tout bien comme il faut, on devrait pouvoir t'aider
    Bon courage
    A+

    La maintenance préventive et les stats pour l'établir, je les ai enseignées. Donc, n'apapeur !

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 86
    Par défaut
    Je suis donc en stage, je travaille sur le suivie du matériel, pour etre en accor avec les norme iso chaque matériel doit etre vérifier, avant que j'arrive c'était annuellement. mon objectif ést d'étudier statistiquement leurs date de pannes afin d'augmenter la période entre chaque vérif.
    explication macro
    pour cela je commence par trier toute la base afin que chaques modèle identique se touche, je créer ensuite un tableau croisé dynamique pour avoir chaque modèle et le nombre d'appareils par modèles.
    je fais une boucle qui pour chaque modèle répertorié dans le tableau dynamique fait :
    -un filtre sur le modèle (comme je trie au début chaque ligne se suive numériquement)
    -séléctionne tous la plage de valeurs diff (datepanne i - datepanne(i-1))
    -récupère valeur min et max, et nombre d'année entre les 2
    -ensuite je créer des intervalle dans une variables tableau (matrice_intervalle)
    -je mes chaque valeurs diff dans une variable tableau (date_panne)
    c'est la que sa va pas je pense
    je veus donnée le nombre de date diff dans chaque intervalle par la fonction frequency et mettre les résultat dans une variable tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frequence_panne = Application.WorksheetFunction.Frequency(date_panne, matrice_intervalle)
    -ensuite calcul statistique ki2 et loi de weidbull
    -ensuite j'additione le résultat que j'ai trouvé à la dernière date de vérification(collonne x)
    j'espère avoir bien expliqué
    a mon avis mon problème vient des variable tableaux
    ferronimus

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 86
    Par défaut
    j'oubliais, l'entreprise ou je suis en stage travail du lundi au vendredi, aucun travail et réparation le weekend,
    le calcul de maintenance préventive s'éffectue en prenanttous les appareils de chaque modèle, pour simplifier on considère que chaque appareils est utiliser de la même façon. Et qu'après réparation il revient à l'état neuf.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bon, je vais y aller pas à pas
    Déjà deux choses : là c'est faux
    'calcul nombre modèle
    'ActiveSheet.Range("BB2").CurrentRegion.Select
    'nbligne = Selection.Rows.Count - 2
    Currentregion correspond à une plage de cellule. Ça ne compte pas les ligne vide. Tu peux remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        nbligne = Range("A2").CurrentRegion.Rows.Count - 1
    Un détail mais autant que je te l'indique (il suffit que tu sélectionnes une cellule de la plage, quelque soit la colonne)

    Ensuite, je ne comprends pas ce que tu fais là. Tes intervalles sont-ils forcément négatifs ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        'création intervalle
        ReDim matrice_intervalle(0 To diff)
        For i = 0 To diff - 1
            matrice_intervalle(i) = valeurmin + i - 1 * 366
        Next i
    Je continue mais je t'avoue qu'avant de comprendre pourquoi tu utilisais un tcd, j'ai dû réfléchir... Pas bête ! Un peu lourd mais pas bête
    A+

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 86
    Par défaut
    Merci pour Currentregion
    et pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'création intervalle
        ReDim matrice_intervalle(0 To diff)
        For i = 0 To diff - 1
            matrice_intervalle(i) = valeurmin + i - 1 * 366
        Next i
    il faut enllever le -1, avec cette boucle on devrais obtenir une suite d'intervalle avec valeurmin,valeurmin +1an,valeurmin+2 ans.... jusqu'a l'année de valeur max.

    c'est vrai que le TCD est un peu lourd mais il permet d'avoir tous les modèles d'appareils et le nombres d'appareils par modèles
    ensuite on peut suprimer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      intervalle = "BE1:BE" & diff
    au début je voulais m'etre mais résultat un peu partous sur ma feuille mais c'est vite devenus un bordel, donc j'ai choisi des variable tableau mais sa m'a l'air compliqué comme utilisation

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Autre question : A quoi te sert ces lignes.
    Range("BB3:BC" & nbligne).Select
    Selection.Sort Key1:="R3C55:R" & nbligne & "C55", Order1:=xlDescending, Type:= _
    xlSortValues, OrderCustom:=1, Orientation:=xlTopToBottom
    Tu tries ton tableau croisé dynamique ?

    Edit(n)
    Ensuite, dans cette boucle, tu recherches un espace.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    For d = 27 To 32
                        If Cells(E, d).Value = " " Then
                    Else
    Est-ce qu'il existe des cellules non renseignées sans espace ? Parce que sinon, tu peux avantageusement corriger ça afin d'éviter les erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    For d = 27 To 32
                        If trim(Cells(E, d).Value) = "" Then
                    Else
    Edit(n+1)
    Pour le calcul des intervalles de temps, tu sembles ne pas tenir compte de la date d'achat ni de la date de vérification.
    La date de vérification correspond à quoi (je constate qu'elle est variable selon l'outil)
    Quant à la date d'achat, elle me semble importante pour le calcul du premier intervalle, non ? En outre, intégrée, elle te permettrait en un second temps une étude sur le vieillissement du matériel.
    Tu me dis, là c'est toi le patron

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 86
    Par défaut
    slt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("BB3:BC" & nbligne).Select
    Selection.Sort Key1:="R3C55:R" & nbligne & "C55", Order1:=xlDescending, Type:= _
    xlSortValues, OrderCustom:=1, Orientation:=xlTopToBottom
    je trie bien mon tableau périodique car par la suite je rajouterais des conditions sur le nombre d'appareils par modèle pour ma lois stat
    pour la recherche d'espace c'est normal, dans ma cellule j'ai fait : =SI(ESTERREUR(datepanne2-datepanne1);" ";datepanne2-datepanne1)


    voila je pense que l'erreur vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frequence_panne = Application.Frequency(date_panne, matrice_intervalle)
    sans doute une mauvaise déclaration des variables tableau, j'ai essayez plusieurs façon de déclarer toujours pas trouvé

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    pour la recherche d'espace c'est normal, dans ma cellule j'ai fait : =SI(ESTERREUR(datepanne2-datepanne1);" ";datepanne2-datepanne1)
    Sauf que dans le fichier que tu joint, je ne vois pas de formule
    Mais qu'est-ce qui t'empêchait de mettre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTERREUR(datepanne2-datepanne1);"";datepanne2-datepanne1)
    Ensuite, tu peux simplement mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                        If Trim(Cells(E, d).Value) <> "" Then
                            date_panne(ft) = Cells(E, d).Value
                            ft = ft + 1
                        End If
    Mais c'est un détail.
    Là, j'ai simplifié pour faciliter la relecture. Ton premier numéro de ligne, tu le connais et il ne bougera pas. Tes colonnes, idem. Seul nbligne varie. Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                'Columns("F:F").Select
                'Selection.Find(What:=réference, After:=ActiveCell, LookIn:=xlFormulas, _
                'LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                'MatchCase:=False).Activate
                'Ligne = ActiveCell.Row
                'plage1 = ActiveCell.Offset(0, 27).AddressLocal
                'plage2 = ActiveCell.Offset(nbvaleur - 1, 32).AddressLocal
                'Plage = plage1 & ":" & plage2
     
                Plage = Range("AG3:AL" & nbligne).Address(false, false)
    C'est plus court et ça facilite la relecture

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Trim(Cells(E, d).Value) <> "" Then
    date_panne(ft) = Cells(E, d).Value
    ft = ft + 1
    End If
    pour sa je suis ok
    pour ce fichier simplifier la suppression de la recherche est possible mais dans mon fichier original avec une centaine de modèle c'est indispensable,
    encore désoler de ne pas avoir mis la fonction =SI(ESTERREUR(datepanne2-datepanne1);" ";datepanne2-datepanne1).

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Teste ça en insérant la seconde partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
                'récupérarion différence date
                ft = 0
                For E = ligne To ligne + nbvaleur
                    For d = 27 To 32
                        If Cells(E, d).Value = " " Then
                            Else
                            date_panne(ft) = Cells(E, d).Value
                            ft = ft + 1
                        End If
                    Next d
                Next E
     
    '*****************Ajoute ça **************
                ft2 = 0
                For E = ligne To ligne + nbvaleur
                    For d = 27 To 32
                        If Trim(Cells(E, d).Value) <> "" Then
                            date_panne(ft2) = Cells(E, d).Value
                            ft2 = ft2 + 1
                        End If
                    Next d
                Next E
     
                MsgBox ft & "   " & ft2
    '***************************************
    Une fois j'ai 34 et une fois 28. Ça veut dire que tes formules ne couvrent pas toute la plage... ou autre chose...

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour le tri, autant pour moi. Je finis par m'embrouiller. Ton fichier ne contient qu'une référence, c'est pour ça mais j'aurais dû réfléchir.
    Je vais un peu aider les copains, et je regarderai + tard d'un oeil neuf.
    Mais je ne t'abandonne pas
    A+

Discussions similaires

  1. Sélectionner une colonne variable tableau VBA
    Par Tux1 dans le forum Général VBA
    Réponses: 2
    Dernier message: 24/12/2012, 14h43
  2. [XL-2003] comparer valeur d'une variable tableau vba
    Par redstoff dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/09/2011, 14h00
  3. Tri variable tableau VBA suite et fin
    Par Daranc dans le forum Contribuez
    Réponses: 1
    Dernier message: 11/07/2011, 10h46
  4. variable tableau vba
    Par ferronimus dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/06/2007, 14h20
  5. [VBA-E]Recherche dans une variable tableau
    Par illight dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2006, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo