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 :

Double boucle for


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2018
    Messages : 14
    Par défaut Double boucle for
    Bonjour !

    Voici l'excel sur lequel je travaille :

    Nom : Capture.PNG
Affichages : 239
Taille : 12,4 Ko

    Pour chaque ligne j'aimerai récupérer la ou les date.s correspondant au.x nombre.s sur la ligne. Par exemple pour la dernière ligne j'aimerai récupérer les dates du 13/01/2020, 15/01/2020 et 16/01/2020. Dans le cas où je récupère plusieurs dates il faut que j'utilise DateDiff pour avoir le nombre de jours écoulé entre le début et la fin. Lorsque je n'ai qu'une date, le temps écoulé est par défaut 1 jour. J'ai initialisé un tableau (enfin je crois ^^) pour y rentrer le nombre de jour qu'a pris chaque ligne. Je dois enfin faire une moyenne du nombre de jours ( ceux qui sont dans le tableau). Par exemple, si on considère les 3 premières lignes de mon screen, après dateDiff la 1ère ligne me renvoie 2, la 2ème me renvoie 5 et la 3ème 1. La moyenne pour effectuer ces 3 lignes est donc de 8/3.


    Mon code est u peu brouillon car je tourne en rond depuis quelques jours et j'essaye plusieurs choses (comme le activeCell par exemple, j'ai compris il y a peu que ça ne m'étais pas utile finalement)
    Voici mon code jusqu'ici :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Sub Test()
     
    Dim ligne As Integer, colonne As Integer, varDate1 As Date, varDate2 As Date, tonnage As Integer, i As Integer, cellule As Range
    Dim nblignes As Integer, chaine As String, date1 As Date, date2 As Date, tableau(10), j As Integer, jour As Integer, mois As Integer, annee As Integer
     
     
     
    nblignes = 0
        For i = 0 To 10
        tableau(i) = Range("A" & i + 1)
        Next i
     
        For i = 1 To 500
            chaine = Cells(i, 1)
     
                If InStr(1, chaine, "0-1m") Then 'Sélectionner les noms de la colonne A avec 0-1m dedans'
     
                    For j = 2 To 100
                    If Not IsEmpty(Range(j & i)) Then
                    Range("A1") = 987
                    End If
                    Next j
     
                ligne = ActiveCell.Row
                colonne = ActiveCell.Column
                date1 = Cells(2, colonne)
                nblignes = nblignes + 1
                End If
        Next i
     
    Range("A1").Value = ligne
    Range("B1").Value = colonne
    Range("C1").Value = DateSerial(Year(date1), Month(date1), Day(date1))
     
    End Sub
    J'espère avoir été clair et je vous remercie du temps que vous passerez sur mon problème.

    Bien cordialement, un débutant en VBA.

    PS : J'ai une erreur au niveau de If Not IsEmpty(Range(j & i)). Erreur '1004' La méthode 'Range' de l'objet '_Global' a échoué. Donc je suppose que ma double boucle par en cacahuète. Merci encore !

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 569
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 569
    Par défaut
    Bonjour

    A noter que si tu as la version 2016 ou plus c'est faisable, sans coder, en quelques clics avec PowerQuery intégré à Excel

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2018
    Messages : 14
    Par défaut
    Re,

    Je viens de regarder une vidéo de présentation de PowerQuery ça a l'air super utile ! Merci !! Cependant je suis encore moins expérimenté avec ce logiciel qu'avec le VBA donc j'ai un peu de mal à voir comment je pourrai m'en servir dans mon cas. Pourrais tu détailler un peu plus l'idée que tu as eu vis à vis de mon problème ?

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 569
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 569
    Par défaut
    RE

    Ton code ne permet pas de comprendre le résultat attendu d’autant qu'il écrit sur les données analysées

    Joins un exemple avec une source et quelques lignes montrant la disposition attendue du résultat

    Pour l'instant je comprends cela :
    Nom : JoursEcart.jpg
Affichages : 202
Taille : 72,1 Ko

  5. #5
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2018
    Messages : 14
    Par défaut
    Re,

    Alors voilà la tête de mon doc. 268 lignes et il s'arrête à la colonne CT (ça fait beaucoup de dates ^^).
    Nom : Capture.PNG
Affichages : 202
Taille : 38,9 Ko

    Je dois faire une moyenne du temps pris pour extraire les couches de 0-1m, 1-2m, 2-3m etc des différentes parcelles (on ne ne voit que A1 et A2 mais il y en a 8 en tout, A1 à A4 et B1 à B4).
    Je filtre les résultats (filtre : contient 0-1m) et j'arrive à mon exemple du début, et après quelques calculs à la main j'arrive à mon résultat (en bas à droite) pour la couche de 0-1m. Les chiffres tout à droite sont l'écart (en jours) entre la 1ère valeur et la dernière.

    Nom : Capture1.PNG
Affichages : 204
Taille : 20,0 Ko

    Mon but est de ne plus rien avoir à faire à la main ou le moins possible en tous cas pour obtenir le temps moyen (en jours) pour enlever la couche 0-1m sur toutes les parcelles, pareil pour 1-2m etc.
    Dis moi si tu as besoin d'autres screens.
    Merci encore !

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénierie de Maintenance
    Inscrit en
    Août 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénierie de Maintenance

    Informations forums :
    Inscription : Août 2018
    Messages : 29
    Par défaut Double boucle for
    Bonjour à tous,

    If Not IsEmpty(Range(j & i))

    Range(j & i)
    pose un problème car un range ne peut être constitué de 2 chiffres (XL 2007).

    Il faut une lettre, 1 chiffre entre guillemets. Ex Range ("A1") comme écrit dans le code.

    Envisager de remplacer j par sa lettre.

  7. #7
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 569
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 569
    Par défaut
    Re
    Citation Envoyé par Subsanglant Voir le message
    Re,

    Alors voilà la tête de mon doc. 268 lignes et il s'arrête à la colonne CT (ça fait beaucoup de dates ^^).
    Je dois faire une moyenne du temps pris pour extraire les couches de 0-1m, 1-2m, 2-3m etc des différentes parcelles (on ne ne voit que A1 et A2 mais il y en a 8 en tout, A1 à A4 et B1 à B4).
    Je filtre les résultats (filtre : contient 0-1m) et j'arrive à mon exemple du début, et après quelques calculs à la main j'arrive à mon résultat (en bas à droite) pour la couche de 0-1m. Les chiffres tout à droite sont l'écart (en jours) entre la 1ère valeur et la dernière
    Tu as maxi 2 dates sur chaque ligne ? Début et fin si plus d'un jour, sinon 1 seule date ?

    Joins non pas une copie d'écran mais un fichier : il faut de la matière pour modéliser et je ne vais pas taper tout plein de lignes...

  8. #8
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2018
    Messages : 14
    Par défaut
    Bonjour !

    thekat : Merci pour l'info, je pensais que comme les colonnes étaient identifiables par un chiffre. Je ne voyais pas d'autres alternatives pour les parcourir dans une boucle for. LE but de cette ligne était de parcourir toutes les cellules de ma feuille. J'ai quelques bases en programmation et je sais qu'une double boucle for est un moyen pour parcourir un tableau à deux dimensions (type excel) mais pas en VBA j'imagine ^^. Si tu sais comment parcourir un tableau 2D ça m'intéresse !

    78chris : J'en ai entre 1 et 3 si je ne dis pas de bêtises. Je te joins un doc, désolé je ne suis pas un habitué des forums et donc je ne connais pas toujours la marche à suivre ^^. Dans les cas où il y a 3 dates, j'avais pensé à identifier la 1ère date de la ligne comme date_deb et la dernière comme date_fin (avec un cas particulier, 1 seule date sur la ligne).
    Le doc : projet.xlsx

  9. #9
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 569
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 569
    Par défaut
    Bonjour

    Sur ton fichier joint, la structure des termes en colonne A diffère de tes copies d’écrans : il faudra donc adapter la formule qui en extrait la couche dans la requête PowerQuery...
    Fichiers attachés Fichiers attachés

  10. #10
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2018
    Messages : 14
    Par défaut
    Chris, tu es FAN-TAS-TIQUE ! Je suis encore en train de prendre en main PowerQuery mais le doc que que m'as envoyé me permet de mieux comprendre certaines fonctionnalités bien utiles pour mon travail ainsi que la façon de structurer les données pour avoir le résultat escompté. Je vais continuer mes recherches sur ce logiciel pour en apprendre encore plus car les possibilités m'ont l'air quasi infinies (c'est coooool ^^).

    J'ai une toute dernière question qui n'a rien à voir avec le sujet mais je tente quand même : As tu appris à utiliser PowerQuery tout seul ou en suivant un.e cours/formation ? Parce que je t'ai retrouvé sur d'autres forums et tu es vraiment très expérimenté. J'aimerai, à défaut d'être autant calé que toi, me sentir à l'aise avec le VBA & PowerQuery et pour ce dernier je trouve que la doc sur le net n'est pas exceptionnelle (contrairement au VBA avec excel-pratique).

    Merci encore pour ton temps et ta patience !
    Bien cordialement.

  11. #11
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 569
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 569
    Par défaut
    RE

    Effectivement, bien que PowerQuery soit dispo sur Excel depuis la version 2010 donc 10 ans, les ressources, surtout en français sont limitées

    J'ai surtout appris sur le tas et pas mal grâce à la confrontation de solutions avec d'autres aficionados sur les forums : l'un trouve un truc sympa puis l'autre et on avance tous

    Il y a quelques infos sur le site de Microsoft (en plus des références complètes du langage M), sur le site du CFO masqué, celui de Cathy Monnier aussi...

    Souvent on a une idée mais on ne sait comment la réaliser et on finit par trouver sur des sites divers en cherchant avec des mots clés en anglais

    Le livre d'ENI (que j'ai acheté trop tard car j'avais pas mal acquis de pratique) est bien fait et si tu peux l’acquérir et le lire (lol) il te donnera de bonne bases

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Factorielle à double boucle FOR TO
    Par caribou01 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 21/06/2012, 22h55
  2. [XL-2007] Double boucle for
    Par Goliw dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/05/2011, 08h16
  3. doubles boucles for
    Par tpscience dans le forum MATLAB
    Réponses: 7
    Dernier message: 26/04/2009, 19h38
  4. [batch] double boucle for
    Par schlopa dans le forum Windows
    Réponses: 12
    Dernier message: 11/02/2008, 19h54
  5. Sortir d'une double boucle FOR-END
    Par Invité dans le forum MATLAB
    Réponses: 4
    Dernier message: 05/12/2007, 11h07

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