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 :

Boucler sur des valeurs qui ne se suivent pas


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut Boucler sur des valeurs qui ne se suivent pas
    Bonjour !

    Surement une question bête mais je ne trouve pas la réponse...

    Je voudrais boucler sur des cellules qui ne se suivent pas.

    Exemple, au lieu d'écrire Je voudrais écrire quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each i In [1,4,5,8,10]
    C'est à dire que je voudrais ne pas boucler sur les lignes 2, 3, 6, 7, 9 ; je précise que c'est vraiment aléatoire, un step ne peut pas m'aider.

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Autrement dit tu souhaites boucler sur un tableau à une dimension.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each i in Array(....
    Tu trouveras sur ce forum bien des exemples.

  3. #3
    Membre averti
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut
    Bonjour MarcelG et merci pour ton aide !

    C'était vraiment une question bête.. En fait j'avais essayé cette solution et ça ne fonctionnait pas, mais tout simplement parce que j'avais écris juste avant...

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    En effet,
    Les variables balayant un Array doivent être déclarées en Variant ou Object.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    Bonjour,

    Une possibilité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub boucle()
    Dim ListeCellules As Variant
    Dim i As Integer
     
        ListeCellules = Array(1, 4, 5, 8, 10)
     
        For i = 0 To 4
            Worksheets("Feuil1").Cells(ListeCellules(i), 1) = "ligne " & ListeCellules(i)
        Next i
     
    End Sub

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    2 remarques:
    - Personnellement, je bouclerais sur les valeurs de i comprises entre la valeur minimum (LBound) et celle maximum (UBound) de l'Array
    - Pourquoi faire simple?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    Exact Marcel, ben tu viens de me faire piger un nouveau truc, merci au passage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub boucle()
    Dim ListeCellules As Variant
    Dim i As Integer
     
        ListeCellules = Array(1, 4, 5, 8, 10, 11, 15)
        For i = LBound(ListeCellules, 1) To UBound(ListeCellules, 1)
            Worksheets("Feuil1").Cells(ListeCellules(i), 1) = "ligne " & ListeCellules(i)
        Next i
     
    End Sub

  8. #8
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Florent,

    Je ne suis pas sûr que l'argument 1 soit utile.

    L'Array est à 1 dimension.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    Tout à fait, ben un deuxième truc dans la poche !
    Je pensais qu'il fallait préciser l'argument
    Merci Marcel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub boucle()
    Dim ListeCellules As Variant
    Dim i As Integer
     
        ListeCellules = Array(1, 4, 5, 8, 10, 11, 15)
        For i = LBound(ListeCellules) To UBound(ListeCellules)
            Worksheets("Feuil1").Cells(ListeCellules(i), 1) = "ligne " & ListeCellules(i)
        Next i
     
    End Sub

  10. #10
    Membre averti
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut
    Bonjour florent77 & rebonjour MarcelG

    Vous m'intriguez je n'ai pas compris cette manipulation avec Array / LBound / UBound (j'apprends VBA en autodidacte et je bloque parfois sur des choses très très simples, désolée... )

    J'ai écris ceci avec les indications de Marcel :
    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
    Sub test()
     
    For Each i In Array(12, 13, 14, 17, 20, 21, 22, 23, 26)
     
    If ThisWorkbook.Worksheets(1).Range("D" & 1) = ThisWorkbook.Worksheets(1).Range("A" & 1) Then
    ThisWorkbook.Worksheets(1).Range("E" & i).Value = ThisWorkbook.Worksheets(1).Range("A" & ThisWorkbook.Worksheets(1).Range("F" & i).Value).Value
    End If
     
    If ThisWorkbook.Worksheets(1).Range("D" & 1) = ThisWorkbook.Worksheets(1).Range("B" & 1) Then
    ThisWorkbook.Worksheets(1).Range("E" & i).Value = ThisWorkbook.Worksheets(1).Range("B" & ThisWorkbook.Worksheets(1).Range("F" & i).Value).Value
    End If
     
    Next i
     
    End Sub
    Ce serait plus pertinent que j'utilise les éléments dont vous parlez ?

  11. #11
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    S'il te plaît, allège ton code.
    Cela le rendra plus lisible

    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
    Option Explicit
     
    Sub test()
     
    Dim i As Variant
     
    With ThisWorkbook.Worksheets(1)
     
            For Each i In Array(12, 13, 14, 17, 20, 21, 22, 23, 26)
     
                    If .Range("D" & 1) = .Range("A" & 1) Then _
                            .Range("E" & i).Value = .Range("A" & .Range("F" & i).Value).Value
     
                    If .Range("D" & 1) = .Range("B" & 1) Then _
                            .Range("E" & i).Value = .Range("B" & .Range("F" & i).Value).Value
     
            Next i
     
    End With
     
    End Sub
    Oui, tu peux déclarer ton Array et utiliser les fonctions LBound et UBound

    Voir

    variables tableaux

    Par contre, je ne comprends pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .Range("B" & .Range("F" & i).Value).Value
    A demain

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

Discussions similaires

  1. [PPT-2010] Boucler sur des shapes qui ont un nom de base
    Par stefan.l dans le forum VBA PowerPoint
    Réponses: 7
    Dernier message: 09/04/2014, 15h01
  2. Image sur un input avec des valeurs qui se rajoutes par défaut X et Y
    Par yule dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/07/2012, 14h02
  3. [XL-2003] Boucler sur des lignes pour placer des valeurs selon certaines conditions
    Par antoine2933 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 31/08/2011, 17h00
  4. Travailler sur des données qui doivent être triées
    Par haypo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 19/07/2003, 18h13
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 17h29

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