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 :

array incompatibilité de type


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 163
    Par défaut array incompatibilité de type
    bonjour,

    je tente de mettre en place un macro de récupération de donnée en mode explicite mais rencontre des soucis avec une incompatibilité de type mais j'ai un doute pour Recap_period_Start, PStart en déclaration de variable
    il faut savoir que je cherche ici a récupérer les lignes concernées contenant Y en colonne 8 puis d'autres à terme mais je voudrais avoir plusieurs array start / end etc

    si je tente un msgbox de de Pstart dans le for cela fonctionne mais c'est au niveau de l'array que cela semble avoir un souci
    fin => ligne de fin
    i => ligne detectée si start ou end
    Pstart => array des i start détectés

    dans mon test Pstart détecte 103 et 126

    aussi je ne vois pas pourquoi
    Recap_period_Start = Join(PStart, ", ")
    MsgBox (Recap_period_Start)

    Aussi je voudrais voir avec recap_period_start 103,126

    une idée svp?
    merci

    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
    26
    27
     
    Private Sub Mail_Recap()
    Dim Rep_page, WP_page, Prj_page As Worksheet
    Dim Fin_Rep, i As Integer
    Dim Recap_period_Start, PStart, PEnd As String
     
    il faut récupérer les données pour périodes, WP, projets, deliverables
    Set Rep_page = Worksheets("Reporting")
    Set WP_page = Worksheets("Work-Packages")
    Set Prj_page = Worksheets("Projects")
     
    Fin_Rep = Rep_page.Range("A" & Rows.Count).End(xlUp).Row
    For i = 0 To Fin_Rep
    i = i + 1
     
    If (Rep_page.Cells(i, 8) = "Y") Then
    PStart = Application.Transpose(i)
    End If
     
    If (Rep_page.Cells(i, 9) = "Y") Then
    PEnd = Application.Transpose(i)
    End If
     
    Next
     
    Recap_period_Start = Join(PStart, ", ")
    MsgBox (Recap_period_Start)

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Tu utilises mal la syntaxe de la boucle. Syntaxe de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 10
         MsgBox "Nous sommes à l'itération " & i
    Next i
    Surtout ne pas mettre de i = i + 1, c'est le propre de la boucle de faire ce travail !

    Comme ton i représente une ligne : ne le fais pas commencer à 0, mais 1 !

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 163
    Par défaut
    Bonjour,

    merci à vous pour ce retour.
    si je mets For i = 0 To Fin_Rep sans rien alors erreur d'exceution 1004
    si je mets For i=1 to Fin_Rep cela fonctionne
    Du reste si je fais MsgBox (PStart) dans la boucle du i alors cela me renvoi bien la ligne

    peut être est ce du à la ligne d'entête

    toutefois j'ai encore le droit à un incompatibilité de type

    cela semble venir de :

    Recap_period_Start = Join(PStart, ", ")
    MsgBox (Recap_period_Start)

    mais je souhaite simplement faire remonter le numéro de ligne soit i et c'est donc un integer selon moi

    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
    26
     
    Private Sub Mail_Recap()
    Dim Rep_page, WP_page, Prj_page As Worksheet
    Dim Fin_Rep, i, PStart, PEnd, Recap_period_Start As Integer
     
    'il faut récuprérer les données pour périodes, WP, projets, deliverables
    Set Rep_page = Worksheets("Reporting")
    Set WP_page = Worksheets("Work-Packages")
    Set Prj_page = Worksheets("Projects")
     
    Fin_Rep = Rep_page.Range("A" & Rows.Count).End(xlUp).Row
    For i = 1 To Fin_Rep
     
    If (Rep_page.Cells(i, 8) = "Y") Then
    PStart = Application.Transpose(i) 'renvoi ici 103 
    End If
     
    If (Rep_page.Cells(i, 9) = "Y") Then
    PEnd = Application.Transpose(i)
    End If
     
    Next
     
    Recap_period_Start = Join(PStart, ", ") 'devrait  renvoyer 103,126
    MsgBox (Recap_period_Start)
    End Sub

    merci à vous pour votre aide

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    si je mets For i = 0 To Fin_Rep sans rien alors erreur d'exceution 1004
    si je mets For i=1 to Fin_Rep cela fonctionne
    C'est ce que je t'ai dit dans mon message précédent => il faut que tu commences à 0, car tu fais appel à la ligne 0 dans Cells(i, 8), or la ligne 0 n'existe pas.

    Tu déclares Recap_Period_Start comme un Integer (donc un entier) et ensuite, tu écris dans ton commentaire qu'il devrait être égal à 103,126. Donc ce n'est pas un entier ...

    Je vois pas bien ce que tu veux faire avec Transpose. Le transposé d'un entier est le même entier. Transpose permet de transposer des plages de cellules.
    En fait, ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If (Rep_page.Cells(i, 8) = "Y") Then
    PStart = Application.Transpose(i) 'renvoi ici 103 
    End If
    est équivalent à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If (Rep_page.Cells(i, 8) = "Y") Then
    PStart = i 'renvoi ici 103 
    End If
    Du coup, est-ce que l'objectif de ton code est de trouver la ligne sur laquelle il est écrit "Y" ? Parce que si c'est le cas, il serait plus efficace et rapide d'utiliser Find.

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 163
    Par défaut
    Mon but global est en effet de trouver les lignes ayant Y en colonne
    ensuite de tout mettre dans un array

    Avec un arrray start
    un array end
    correspondant à des vérfiications de date


    Une fois tout obtenu de différentes sources et onglets c'est pour envoyer un mail contenant plusieurs informations que je récupérerais avec les lignes...

  6. #6
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 163
    Par défaut
    je viens de tenter le find mais celui ci ne me renvoi que la premiere ligne detenant Y et pas les suivantes
    comment procéder pour que le find puisse enregistrer les différentes lignes suivantes dans un array?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With [Reporting].ListObject
        Set d = .ListColumns("Check_Start").Range.Find(what:="Y", LookIn:=xlValues, LookAt:=xlWhole)
     MsgBox (d.Row)
     End With

  7. #7
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Pour trouver toutes les entités de Y, je ne passerais pas par un boucle. Quand on fait ce genre d'opérations, mieux vaut passer par un filtre => https://docs.microsoft.com/fr-fr/off...nge.autofilter. Tu peux utiliser une feuille intermédiaire pour inscrire tes résultats.

    1. Tu filtres sur Y avec AutoFilter.
    2. Tu copies la plage
    3. Tu colles dans la feuille intermédiaire
    4. Tu refais la même chose avec l'autre feuille.
    5. Et le tour est joué !

    C'est plus efficace qu'une boucle.

    Pour ajouter la condition des dates, il faudra aussi filtrer sur les colonnes avec les dates.

Discussions similaires

  1. [XL-2010] incompatibilité de type array
    Par novice06 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/02/2020, 11h13
  2. Message incompatibilité de type
    Par Daniel MOREAU dans le forum Access
    Réponses: 5
    Dernier message: 10/10/2005, 20h57
  3. incompatibilité de type
    Par zooffy dans le forum Access
    Réponses: 2
    Dernier message: 13/06/2005, 15h12
  4. Incompatibilité de types dans un formulaire
    Par ahage4x4 dans le forum ASP
    Réponses: 3
    Dernier message: 03/05/2005, 15h39
  5. [XSD] Incompatibilité des types xs:ID et xs:IDREF ?
    Par Cpt.FLAM dans le forum Valider
    Réponses: 6
    Dernier message: 08/04/2005, 14h54

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