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 :

3 noms dans une cellule par une boucle+array


Sujet :

Macros et VBA Excel

  1. #1
    Membre très actif
    Avatar de frunch
    Homme Profil pro
    Développeur / comptable
    Inscrit en
    Janvier 2022
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur / comptable
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2022
    Messages : 174
    Par défaut 3 noms dans une cellule par une boucle+array
    Bonjour à tous,
    C'est encore moi
    J'ai fait un agenda qui doit pouvoir m'afficher 3 noms de rdv dans une cellule sous celle d'une date.
    J'essaye avec un array mais pas moyen (message "incomptabilité de type" sale type)
    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
    Sub moisSuiv()
        Dim list As Variant, c%, drn3%, i%, j%, k%, ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
        Application.ScreenUpdating = False
        Set ws3 = Sheets("RDV")
        Set ws2 = Sheets("listes")
        Set ws1 = Sheets("Planning")
        drn3 = ws3.Range("A2").End(xlDown).Row
     
    'Indiquer les noms des RDV
            c = 0
        For j = 2 To 8
            For i = 5 To 15 Step 2
                For k = 2 To drn3
                    If ws3.Range("C" & k).Value = ws1.Cells(i, j).Value Then
                            list(c) = Mid(ws3.Range("B" & k).Value, 1, 10)
                            MsgBox list(c)
                            c = c + 1
                    End If
                Next k
                list = Array(list(0), list(1), list(2))
                ws1.Cells(i + 1, j).Value = list
            Next i
        Next j
        Application.ScreenUpdating = True
    End Sub
    Merci de votre aide
    forum.xlsm

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un exemple pour écrire dans une même cellule les valeurs contenues dans une variable tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
      Dim t As Variant
      Dim r As Range
      Set r = ThisWorkbook.Worksheets("Planning").Range("B3")
      t = Array("Toto", "Titi", "Tata")
      r.Value = Join(t, vbLf)
    End Sub
    [EDIT]
    Autre exemple avec une table à deux dimensions
    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
    Sub t2()
      Dim r As Range
      Dim t(2, 2)
      Dim l(2)
      Dim s As String
      Dim e1 As Byte, e2 As Byte
      Set r = ThisWorkbook.Worksheets("Planning").Range("B3")
      t(0, 0) = "Toto": t(0, 1) = "Local 1": t(0, 2) = "lundi"
      t(1, 0) = "Titi": t(1, 1) = "Local 2": t(1, 2) = "lundi"
      t(2, 0) = "Tata": t(2, 1) = "Local 3": t(2, 2) = "lundi"
      For e1 = LBound(t) To UBound(t)
        For e2 = LBound(t, 2) To UBound(t, 2)
          l(e1) = l(e1) & IIf(e2 > LBound(t, 2), ", ", "") & t(e1, e2)
        Next
      Next
      r.Value = Join(l, vbLf)
      Set r = Nothing
    End Sub
    A lire éventuellement Utiliser les variables tableaux en VBA Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre très actif
    Avatar de frunch
    Homme Profil pro
    Développeur / comptable
    Inscrit en
    Janvier 2022
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur / comptable
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2022
    Messages : 174
    Par défaut
    Bonjour Philippe,
    Merci de ta réponse rapide.
    Ton exemple et les tutos que j'ai trouvé partent tous d'un array remplit.
    Et aprés la correction du code selon la 1ére dimension, j'ai toujours l'incompatibilité de type comme message.
    J'arrive à remplir 2 rangs sur le mois précédent sans array, mais il faudrait que je remplisse l'array pour 3.
    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
        Dim r As Range, list As Variant, c%, drn3%, i%, j%, k%, ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
    'autoriser les evenements
        Application.ScreenUpdating = False
        Set ws3 = Sheets("RDV")
        Set ws2 = Sheets("listes")
        Set ws1 = Sheets("Planning")
        drn3 = ws3.Range("A2").End(xlDown).Row
    'Indiquer les noms des RDV
            c = 0
        For j = 2 To 8
            For i = 5 To 15 Step 2
                For k = 2 To drn3
                    If ws3.Range("C" & k).Value = ws1.Cells(i, j).Value Then
                            list(c) = Mid(ws3.Range("B" & k).Value, 1, 10)
                            MsgBox list(c)
                            c = c + 1
                    End If
                Next k
                list = Array(list(0), list(1), list(2))
                 r.Value = Join(list, vbLf)
                ws1.Cells(i + 1, j).Value = r.Value
            Next i
        Next j
    forum.xlsm

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai publié deux exemples dont un avec deux dimensions et j'ai testé les codes avant publication.

    [EDIT]
    A quoi sert cette ligne de code list = Array(list(0), list(1), list(2)) ?
    A quelle ligne d'instruction avez-vous le message d'erreur "incompatibilité de type" ?
    Avez-vous utilisé les outils de débogage ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre très actif
    Avatar de frunch
    Homme Profil pro
    Développeur / comptable
    Inscrit en
    Janvier 2022
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur / comptable
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2022
    Messages : 174
    Par défaut
    Bonjour à tous,
    Bon j'ai trouvé une solution maison avec des variables pour remplir l'array.
    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
        Dim r As Range, list As Variant, a$, b$, c$, drn3%, i%, j%, k%, ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
    'autoriser les evenements
        Application.ScreenUpdating = False
        Set ws3 = Sheets("RDV")
        Set ws2 = Sheets("listes")
        Set ws1 = Sheets("Planning")
        drn3 = ws3.Range("A2").End(xlDown).Row
    'Indiquer les noms des RDV
        For j = 2 To 8
            For i = 5 To 15 Step 2
                For k = 2 To drn3
                    If ws3.Range("C" & k).Value = CDate(ws1.Cells(i, j).Value) And a = "" Then
                            a = Mid(ws3.Range("B" & k).Value, 1, 10)
                    ElseIf ws3.Range("C" & k).Value = CDate(ws1.Cells(i, j).Value) And b = "" Then
                            b = Mid(ws3.Range("B" & k).Value, 1, 10)
                    ElseIf ws3.Range("C" & k).Value = CDate(ws1.Cells(i, j).Value) And c = "" Then
                            c = Mid(ws3.Range("B" & k).Value, 1, 10)
                    End If
                Next k
                Set r = ws1.Cells(i + 1, j)
                list = Array(a, b, c)
                r.Value = Join(list, vbLf)
                a = ""
                b = ""
                c = ""
            Next i
        Next j
    Cà peut intéresser qqu'un.
    forum.xlsm

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/09/2019, 13h12
  2. Réponses: 1
    Dernier message: 18/07/2019, 06h40
  3. Réponses: 6
    Dernier message: 18/02/2014, 20h39
  4. [VBA-E]connaitre l'adresse de cellule dans une boucle
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/02/2007, 23h13
  5. Varier le nom d'une variable dans une boucle
    Par dieu_fox dans le forum VBScript
    Réponses: 3
    Dernier message: 29/12/2006, 13h41

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