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 :

[VBA-E]Gestion de tableaux


Sujet :

Macros et VBA Excel

  1. #41
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Ok j'avais ocmplétement Zappé que tu été sous excel... alors ... t'embête pas avec le fichier texte ... tu peu stocker tes noms de fichiers dans une feuile excel ... ( caché si tu ne ve pas qu'on la voii..) ...

    et je dirai même mieux tu peu abandonner l'idée de la collection et te servir directement des données contenu dans la fameuse feuille ...du genre

    en supposant que ton tableau de fichier débute cellule A1 de la feuille ListeFichier

    A1 Nom1
    A2 Nom2
    A3 Nom3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim r As range
    set r = Thisworbook.Sheets("ListeFichiers").cells(1,1).CurrentRegion
     
    NomFichier = R(i)

  2. #42
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    hm oui en effet,
    j'y avais pensé un moment de mettre ces noms dans une feuille quad tu me parlais de fichier texte et apres ca m'a completement echappé

    donc je lse placerai dans une feuille cachée comme tu viens de le proposer

  3. #43
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    un autre soucis s'annonce :

    voici à quoi ressemble réelement mes noms :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "nom." & Format(NumeroFichier, "0000") & "xxx"
    ca donne un truc du genre : nom.0018xxx mais ce numero change chaque semaine.

    A la base numerofichier est un parametre de ma fonction (un entier) et il est lui meme calculé par une autre fonction qui renvoit le numero de la semaine !

    donc quand j'appelais ma fonction, j'avais ca : où 1 est le numero de fichier et num le numero de la semaine (appelé numerofichier dans la fonction).

    et là en mettant les nom dans des cellules deja il me supprimer des guillement j'ai ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom. & Format(NumeroFichier, "0000") & "xxx"
    enfin c'est reglable en ajoutant un ' devant mais mon plus gros probleme est le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(NumeroFichier, "0000")
    là j'ai pas trop d'idee du comment faire pour qu'il maffiche les bons noms (je veux dire sous la forme nom.0018xxx) car biensur je dois laisser les nom de la sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "nom." & Format(NumeroFichier, "0000") & "xxx"

  4. #44
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    et bbbbbbbbbbb ! c'est clair comme de l'eau de roche...!

    tu as de vrai exemple de nom de fichiers... ? comment est-t'il construit..? j'ai pas tout saisi ...!

    tu peu par exemple stocké dans la feuille excel que la partie fixe du nom de fichier... la partie fonction de la semaine étant calculée par le code VBA ... ..


    tu stocke la partie ".nom" dans feuille excel..., ne va pas y mettre les formules Format...

  5. #45
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    tiens on est passé derriere moi pour ajouter des balise code (désolé )

    euh bah mes fichiers sont comme ca :

    "DebuPartiefixe" & NombreCalculé & "FinPartieFixe"

    Suite à ta modif :

    vu mon nom de fichier, je devrai mettre "DebuPartiefixe" dans colonne A et FinPartieFixe" dans la B non?

  6. #46
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Pour ce que j'ai compris de tes explications
    C'est une formule que tu places dans une cellule, auquel cas tu dois traduire
    Je suppose que nom est bien le nom du fichier et non une variable. Dans ce cas, tu peux faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NomDuFichier = "nom." & Format(NumeroFichier, "0000") & "xxx"
    Cells(i,j).formula = "=" & chr(34) & NomDuFichier & chr(34)
    Je teste

    A+

    Je confirme, avec NuméroFichier = 12, dans la cellule, j'ai ça ="nom.0012xxx" et affiché, j'ai ça nom.0012xxx
    Tu dis

  7. #47
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Oui, "nom" est le nom ce n'est pas variable


    Juste encore une precision pour etre sur d'avoir tout dit :

    le numero calculé est toujours de la forme que j'ai donné mais pour certains nom, le numero ne correspond pas au numero de semaine.

    j'explique un peu mieux :

    pour certain nom ils sont de la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(NumeroFichier - 4, "0000")
    mais leur numero augmente tout de meme de 1 par semaine donc pour ta solution bbil, je ne pe pas calculer aulleurs et ensuite concatener car le numero calculé est différent selon le fichier

  8. #48
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Hm ca y'est je pense avoir trouvé une solution,

    je vais juste ajouter dans la colonne C le nombre à ajouter ou à soustraire au numero de la semaine et l'utiliser dasn le calcul.

    le code est encore abstrait pour moi mais je vais m'y mettre ca devrait aller mieux ensuite

  9. #49
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Me revoilà,

    J'avance lentement mais je sais ce que je dois faire

    alors j'ai bien vu ta réponse ouskel mais pour le moment je fais autrement et ca fonctionne aussi

    voici la situation actuelle :

    je met dans la colonne A le nom "fixe" du fichier et dans la colonne B le nombre à ajouter au numero de la semaine (-4, 0, +2 ...).
    la fin du nom etant la meme pour tous les fichiers, je l'ajoute ailleurs je ne la met pas dans une colonne.

    j'aurais une petite question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim r As range
    set r = Thisworbook.Sheets("ListeFichiers").cells(1,1).CurrentRegion
     
    NomFichier = R(i)
    voici le code de bbil, je ne sais pas trop comment le current region fonctionne, j'ai regardé dans l'aide pourtant , mais j'ai cru comprendre qu'il selectionne les element jusqu'à ce qu'il y ai un "trou" (ligne vide) non? de toute facon je supprimerai la ligne lors d'une suppresion d'un nom et pas uniquement le contenu de la ligne...

    ma question, j'y viens , est : comment faire pour parcourir les ligne du "currentregion" , un ptit truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i=1 to ???
       NomFichier = R(i)
    next
    et ne faut-il pas modifier le "R(i)" car j'ai 2 colonnes à prendre en compte maintenant?

    merci

  10. #50
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub VisiteDunePlage()
    Range("A1").Select
    Selection.CurrentRegion.Select
    Set maplage = Selection
        For Each Value In maplage
            MsgBox Value
        Next
    End Sub
    Tu vois...

    A+

  11. #51
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Elstak
    et ne faut-il pas modifier le "R(i)" car j'ai 2 colonnes à prendre en compte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    r.Cells(iColonne,iLiogne)

  12. #52
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim v As Range
        Set v = Range("C5:C10")
            MsgBox (v.Address)
            Set v = v.CurrentRegion
            MsgBox (v.Address)
            MsgBox v.End(xlDown).Row

    dans c5 c10 tu mets des valeurs premier essai
    puis efface c8 nouvel essai

  13. #53
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Me revoilà,

    alors, le code d'ouskel fonctionne mais, j'ai comme resultat les valeurs de toutes les colonnes pour la ligne 1 (puis pour la 2 etc...) or je cherche à disocier les valeurs de ligne1 colonneA et ligne1 colonneB.

    donc j'ai mixé avec le code de bbil pour arriver à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub VisiteDunePlage()
    Worksheets("noms").Select
    Range("A1").Select
    Selection.CurrentRegion.Select
    Set maplage = Selection
        For Each Value In maplage
            Debug.Print maplage.Cells(Value, 1)
            'Debug.Print Value
        Next
    End Sub
    mais j'ai une erreur 'incompatibilité de type'. (au fait tu n'aurais pas interverti colonne et ligne dans ton code bbil??)
    Alors que la ligne mise en commentaire, celle d'ouskel, renvoit bien les valeur mais "tout" (toutes les colonnes de la ligne).

    Quant à la solution de random j'essaie de l'utiliser mais j'ai un peu de mal !
    comment afficherais-tu 1 par 1 les elements de la colonne A par exemple(ligne par ligne) ? j'ai modifié ton code, enfin le range j'ai mis ("A1:A2")

    Ps : j'ai testé ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        For Each Value In v
            Debug.Print Value
            'Debug.Print v.Cells(Value, 1)
        Next
    mais pour la ligne en commentaire j'ai une erreur. On arrive au meme probleme que pour le code precedent.

  14. #54
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    oui j'ai inversé colonnes et lignes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Sub VisiteDunePlage()
    Set maplage =  Worksheets("noms").Range("A1").CurrentRegion
     
        For Each r In maplage.rows
            Debug.Print r.Cells(1) ' 1° colonne
            Debug.Print r.Cells(2) ' 2° colonne 
        Next
    End Sub
    PS : J'ai supprimé ta variable Value dont le nom ne me plait pas et je l'ai remplacé par r..
    ainsi que tous tes select/Selection qui servent à rien ...

  15. #55
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Yop,

    alors pour le "Value" va crier sur ouskel !!
    sinon pour les select, je me doute que ca ne servait pas trop mais je voulais etre sur que ca ne venait pas de là.

    sinon pour la réponse de ton code j'ai donc si je ne laisse que la premeire ligne de debug, les info de toutes les lignes de la colonne A mais je chercherai à afficher ligne par ligne et non tout d'un coup !

    j'ai tenté de modifier les info de "cells", mais rien à faire...

  16. #56
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    ben ligne par ligne je t'ai mis le code un peu plus haut tu y à même trouvé une erreur. ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    debug.print r.Cells(iLigne,iColonne
    )
    suffit de faire varier les index ..iLigne et iColonne ..?

  17. #57
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par bbil
    j'ai remplacé tous tes select/Selection qui servent à rien ...

    Ça c'est une pierre dans mon jardin...
    N'était là que pour indiquer la démarche. Si la plage, par exemple démarre en N12 et s'étale à droite et en dessous, CurrentRegion indique la plage située entre N12 et le prochain trou dans les lignes ou dans les colonnes.
    http://www.developpez.net/forums/sho...d.php?t=133597
    Un nouveau conseil ? Sont tous gratuits ce matin... Si tu veux éviter les mouvements de feuilles quand s'exécute ton code, si tu veux accélerer ton code... Evite les "select", ton code aimera mieux et se déroulera en douceur.
    Dis nous
    Je pensais pas que tu l'aurais oublié, Elstak

    A+

  18. #58
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    bah oui j'ai deja testé penses tu bien !!

    je m'y prend peut etre mal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set maplage = Worksheets("noms").Range("A1").CurrentRegion
        For Each r In maplage.Rows
            Debug.Print r.Cells(1, 1) ' 1° colonne
            'Debug.Print r.Cells(2) ' 2° colonne
        Next
    au lieu de mettre des veriable j'ai mi directement les nombres..
    et j'ai le resultat des 3 premeire ligne (les 3 seules ligne qui existent) de la colonne A.

    Au passage, r est des quel type ?? integer?

    Ps: je rapelle juste que mes donnée sont dans les colonnes A et B alors ne cherchez pas des cas tordu du type "si tu commences en N12"
    j'ai deja du mal à faire des choses simple alors le N12 on vera plus tard

  19. #59
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par l'aide
    For Each element In group
    Element : Variable utilisée pour être répétée sur tous les éléments d'une collection ou d'un tableau. Dans le cas d'une collection, la variable elementpeut uniquement être une variable de type Variant, une variable objet générique ou toute variable objet spécifique. Dans le cas d'un tableau, il peut uniquement s'agir d'une variable de type Variant.
    F1 sur Each !
    A+

  20. #60
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    non tu mélange...

    la boucle For Each te permet de parcourir tous les cellules (ou lignes ) de la plage...

    r est un range... une plage... quand ont écrit
    for each r in Maplage.rows...
    à chaque tour de boucle r correspond à une ligne de la plage...


    en fait pour le code indexé il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    debug.print Maplage.Cells(iLigne,iColonne)
    avec maplage .. définit par un set ... CurrentRegion par exemple...

Discussions similaires

  1. [VBA-E]Additionner des tableaux (matrices)
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/04/2006, 20h18
  2. [VBA-E] Gestion d'une erreur #N/A
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/04/2006, 20h17
  3. [VBA-E]Gestion d'erreur
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 07/04/2006, 20h05
  4. [VBA-E] gestion des fichiers ouverts ...
    Par SpaceFrog dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 20/01/2006, 17h10
  5. Réponses: 5
    Dernier message: 04/04/2003, 15h02

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