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 :

Création de tableau


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Dessinateur - Projeteur
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Dessinateur - Projeteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Création de tableau
    Bonjour,
    je cherche quelques conseil afin de mener à bien mon travail sur excel.
    Je voudrais créer une table à partir de données mais en faisant des boucles qui ne reviennent pas toujours au même endroit.
    Je vais détailler:
    Premier problème => je n'arrive pas à créer une recherche de cellule avec 2 variables
    J'ai une plage de cellule qui va de D à H et je voudrais que ma recherche ce fasse sur ces colonnes en fonction de leur remplissage (Voir pièce jointe 1)
    Deuxième problème => je voudrais créer des lignes en fonction des options de chaque machine ( Voir pièce jointe 2)

    J'espère avoir été assez clair.

    Merci pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 251
    Points : 5 626
    Points
    5 626
    Par défaut
    Bonjour,

    Désolé mais pour ma part, je n'ai compris aucune de vos 2 demandes.

    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Dessinateur - Projeteur
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Dessinateur - Projeteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    je vais essayer d'être plus explicite.
    Ma première demande concerne la recherche de cellule avec 2 variable.
    Je demande à une macro de rechercher la cellule vide sur une planche de cellule allant de D1 à H1 sachant que par la suite je vais utiliser les données de la colonne choisie jusqu'à la ligne 500.
    Voici le code que j'ai écrit et qui ne fonctionne pas:

    Dim var1 As Integer
    Dim var2 As Integer

    For var2 = 4 To 8
    For var1 = 1 To Range("A1").End(xlDown).Row + 1

    Worksheets("Accessoires").Select
    Range("var1" & "var2").Select
    If Range(var1 & var2).Value = "X" Then GoTo 20 Else GoTo 10

    il m'indique l'erreur suivante : "La méthode Range de l'objet global a échoué"

    Ma deuxième demande concerne la création de bouche:
    Comme montré dans ma pièce jointer n°3 :
    Si j'ai un "X" dans la cellule recherchée précédemment je crée une ligne avec les données de la colonne des options.
    exemple : Cellule D2 = X
    je remplie une ligne dans le tableau en bas en allant chercher les options dans la colonne M
    Je ne peux cependant n'avoir qu'une seule option par ligne
    Je dois donc créer une ligne pour chaque combinaison possible d'option
    Donc je dois créer une multitude de lignes comme indiqué dans le tableau en dessous

    J'espère cette fois avoir été suffisamment clair.
    Merci
    Fichiers attachés Fichiers attachés

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 022
    Points
    2 022
    Par défaut
    Salut,

    La methode par defaut de l'objet range travaille avec une adresse de cellule (quelque chose de la forme "A1", ou "B5:H48"), ou le nom d'une plage.
    Il semble que tu utilises des coordonnées, c'est donc la methode Cells() de l'objet Range qui t'intéresse.

    Notes:
    Un bon code VBA n'a pas besoin de selectionner ni d'activer quoi que ce soit, c'est lent et fait ressembler ton classeur à un sapin de Noël.
    Utilise des références, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Wb As Excel.Workbook
    Set Wb = ThisWorkbook    '// Référence sur le classeur contenant le code
     
    Dim Ws As Excel.Worksheet
    Set Ws = Wb.Worksheets("Accessoires")    '// Référence sur la feuille Accessoires.
     
    Dim Rng As Excel.Range
    Set Rng = Ws.Cells(1, 1)    '// Référence sur la cellule A1 de la feuille Accessoires

  5. #5
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 251
    Points : 5 626
    Points
    5 626
    Par défaut
    Bonjour,

    Juste pour avancer un peu, ces bouts de code pour localiser où se trouvent les X:
    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
    Option Explicit
     
    Sub Trouver_les_X()
        Dim kC As Integer                               '--- n° colonne
        Dim kR As Long                                  '--- n° ligne (row)
        ThisWorkbook.Worksheets("Feuil1").Select
        For kC = 4 To 8
            For kR = 1 To Range("B1").End(xlDown).Row   '--- ne pas utiliser la colonne A car elle contient des cellules fusionnées
                Debug.Print kR & "," & kC, Cells(kR, kC)
                If Cells(kR, kC) = "X" Then
                    If MsgBox("Un X trouvé en " & Cells(kR, kC).Address & vbLf & vbLf & "Continuer?", vbYesNo, "Oui/Non") = vbNo Then
                        Exit Sub    '--- EXIT SUB ---
                    End If
                End If
            Next kR
        Next kC
    End Sub
     
    Sub Trouver_Premier_X()
        Dim kC As Integer                               '--- n° colonne
        Dim kR As Long                                  '--- n° ligne (row)
        ThisWorkbook.Worksheets("Feuil1").Select
        For kC = 4 To 8
            If Cells(1, kC) = "" Then
                For kR = 1 To Range("B1").End(xlDown).Row   '--- ne pas utiliser la colonne A car elle contient des cellules fusionnées
                    If Cells(kR, kC) = "X" Then
                        Cells(kR, kC).Select
                        MsgBox "Premier X trouvé en " & Cells(kR, kC).Address
                        Exit Sub    '--- EXIT SUB ---
                    End If
                Next kR
            End If
        Next kC
    End Sub
    Pour le reste je n'ai pas encore compris ce qu'il faut faire après avoir trouvé un X dans une collonne qui n'a pas de titre (pas de nom de machine).

    Cordialement.
    Fichiers attachés Fichiers attachés

  6. #6
    Candidat au Club
    Homme Profil pro
    Dessinateur - Projeteur
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Dessinateur - Projeteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup EricDgn pour ta réponse.
    Je vais essayer et te tenir au courant.
    Bonne soirée

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 022
    Points
    2 022
    Par défaut
    Plutot que d'essayer de nous expliquer, sans y parvenir, le code que tu as en tête,
    que veux-tu faire avec ce tableau ?

  8. #8
    Candidat au Club
    Homme Profil pro
    Dessinateur - Projeteur
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Dessinateur - Projeteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Ce que je veux faire est créer une ligne pour chaque option possible.
    Pour chaque machine ( D1 à G1 en rouge sur pièce jointe 4) j'ai une liste d'options (8 option en bleue sur la pièce jointe 4) et dans chaque option je peux avoir différents choix ( en vert sur la pièce jointe 4).
    Dans mon tableau je veux créer une ligne pour chaque option
    première ligne => machine1 + option1 choix1 + option2 choix1 + option3 choix1 + option4 choix1 + option5 choix1 + option5 + option7 choix1 + Option8
    Deuxième ligne => machine1 + option1 choix1 + option2 choix1 + option3 choix1 + option4 choix1 + option5 choix1 + option5 + option7 choix2 + Option8
    Troisième ligne => machine1 + option1 choix1 + option2 choix1 + option3 choix1 + option4 choix1 + option5 choix1 + option5 + option7 choix3 + Option8
    Quatrième ligne => machine1 + option1 choix1 + option2 choix1 + option3 choix1 + option4 choix1 + option5 choix2 + option5 + option7 choix1 + Option8
    Cinquième ligne => machine1 + option1 choix1 + option2 choix1 + option3 choix1 + option4 choix1 + option5 choix2 + option5 + option7 choix2 + Option8
    Etc...
    Ceci afin de créer un tableau avec toutes les possibilités existantes.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 022
    Points
    2 022
    Par défaut
    Notes:
    Le code que tu as posté comporte des erreurs, la plus grave est qu'il utilise des références implicites.

    En développement, plus on est explicite, mieux on se porte.
    Ci-dessous une version corrigée:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Sub Trouver_les_X()
        Dim Wb As Excel.Workbook
        Set Wb = ThisWorkbook
     
        Dim Ws As Excel.Worksheet
        Set Ws = Wb.Worksheets("Feuil1")
     
        Dim LastRow As Long
        LastRow = Ws.Range("B1").End(xlDown).Row
     
        Dim Column As Integer
        For Column = 4 To 8
            Dim Row As Long
            Row = 1
            Do
                Dim Rng As Excel.Range
                Set Rng = Ws.Cells(Row, Column)
     
                If (Rng.Value = "X") Then
                    Dim Answer As VbMsgBoxResult
                    Answer = MsgBox("Un X trouvé en " & Rng.Address & vbLf & vbLf & "Continuer?", vbYesNo, "Oui/Non")
                End If
                Row = Row + 1
            Loop While ((Row < LastRow) And (Answer <> vbNo))
        Next
    End Sub
     
    Sub Trouver_Premier_X()
        Dim Wb As Excel.Workbook
        Set Wb = ThisWorkbook
     
        Dim Ws As Excel.Worksheet
        Set Ws = Wb.Worksheets("Feuil1")
     
        Dim LastRow As Long
        LastRow = Ws.Range("B1").End(xlDown).Row
     
        Dim Column As Integer
        For Column = 4 To 8
            Dim Found As Boolean
            Found = False
     
            Dim Row As Long
            Row = 1
            Do
                Dim Rng As Excel.Range
                Set Rng = Ws.Cells(Row, Column)
     
                If (Rng.Value = "X") Then
                    MsgBox "Un X trouvé en " & Rng.Address
                    Found = True
                End If
                Row = Row + 1
            Loop While ((Row < LastRow) And (Found <> True))
        Next
    End Sub
    Moins de ligne de code n'est pas signe de qualité, c'est même rarement le cas.

  10. #10
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 133
    Points : 2 685
    Points
    2 685
    Par défaut
    Bonjour

    Pour créer un tableau avec toutes les possibilités, une proposition avec Power Query :
    on copie vers le bas les "options"
    on dépivote les "Machines"
    on pivote les "Options"
    on développe chaque option

    ça m'a pris 3 minutes max (moins de temps que pour rédiger cette réponse)

    2022_11_10 dépivot -pivot.xlsx

    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
    let
        Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
        #"Rempli vers le bas" = Table.FillDown(Source,{"Option 1"}),
        #"Supprimer le tableau croisé dynamique des autres colonnes" = Table.UnpivotOtherColumns(#"Rempli vers le bas", {"Option 1", "Choix"}, "Attribut", "Valeur"),
        #"Colonne dynamique" = Table.Pivot(#"Supprimer le tableau croisé dynamique des autres colonnes", List.Distinct(#"Supprimer le tableau croisé dynamique des autres colonnes"[#"Option 1"]), "Option 1", "Choix",each _),
        #"Option 1 développé" = Table.ExpandListColumn(#"Colonne dynamique", "Option 1"),
        #"Option 2 développé" = Table.ExpandListColumn(#"Option 1 développé", "Option 2"),
        #"Option 3 développé" = Table.ExpandListColumn(#"Option 2 développé", "Option 3"),
        #"Option 4 développé" = Table.ExpandListColumn(#"Option 3 développé", "Option 4"),
        #"Option 5 développé" = Table.ExpandListColumn(#"Option 4 développé", "Option 5"),
        #"Option 6 développé" = Table.ExpandListColumn(#"Option 5 développé", "Option 6"),
        #"Option 7 développé" = Table.ExpandListColumn(#"Option 6 développé", "Option 7"),
        #"Option 8 développé" = Table.ExpandListColumn(#"Option 7 développé", "Option 8")
    in
        #"Option 8 développé"
    Stéphane

  11. #11
    Candidat au Club
    Homme Profil pro
    Dessinateur - Projeteur
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Dessinateur - Projeteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour Raccourcix,
    ta solution fonctionne à merveille et je t'en remercie.

  12. #12
    Candidat au Club
    Homme Profil pro
    Dessinateur - Projeteur
    Inscrit en
    Novembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Dessinateur - Projeteur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2022
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je voudrais aussi remercier deedolith et ricDgn.
    Grace a vous trois je m'en sors aisément. Comme on dit chez moi: " Vous m'avez sorti le cul des ronces".
    Merci beaucoup à vous trois

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

Discussions similaires

  1. création de tableau dans un autre tableau
    Par freestyler dans le forum Delphi
    Réponses: 2
    Dernier message: 02/11/2006, 09h54
  2. erreur création de tableau
    Par fabule dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 20/07/2006, 21h36
  3. Création de tableau
    Par rod59 dans le forum C
    Réponses: 10
    Dernier message: 12/11/2005, 17h40
  4. [CR] Création de tableau et case à cocher
    Par aysse dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 26/11/2003, 18h07

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