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 type et initialisation


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Par défaut Création de type et initialisation
    Bonsoir le forum

    Pour un projet dans mes études, je dois créer un planning de repas: 3 repas par jour, équilibrés. La masse et les calories des aliments doivent être calculées en fonction de l'utilisateur qui fait usage du planning. Je code donc sur VBA.
    J'ai du mal à réaliser bien des choses mais j'aimerais savoir si vous pouviez m'aider sur ce point en particulier:

    J'aimerais créer deux types : Aliment (nom, masse et calorie) et PetitDejeuner (nom, et 6 aliments).
    Je voudrais initialiser un tableau de type PetitDejeuner à l'aide de boucles, car c'est très répétitif.

    En fait, j'ai sur la feuil2 de mon tableur Excel toutes les données:
    Sur chaque ligne se trouve un petit déjeuner composé de son nom (colonne C), et des 6 aliments qui le composent:
    aliment 1: nom sur la colonne E, masse sur F, calorie sur G
    aliment 2: nom sur la colonne I, masse sur J, calorie sur K
    aliment 3: nom sur la colonne M, masse sur N, calorie sur O
    aliment 4: nom sur la colonne Q, masse sur R, calorie sur S
    aliment 5: nom sur la colonne U, masse sur V, calorie sur W
    aliment 6: nom sur la colonne Y, masse sur Z, calorie sur AA
    La ligne pour un petit déjeuner est donc toujours la même. Ce sont les colonnes qui varient.
    Voici mon code, qui ne marche pas:

    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
    'Déclaration du type Aliment qui contient le nom, la masse et les calories de chaque aliment
    Public Type Aliment
        Nom As String
        Masse As Double
        Calorie As Double
    End Type
     
    'Déclaration du PetitDejeuner qui contient le nom et 6 aliments
     Public Type PetitDejeuner
       Nom As String
       x1 As Aliment
       x2 As Aliment
       x3 As Aliment
       x4 As Aliment
       x5 As Aliment
       x6 As Aliment
    End Type
     
    'Déclaration du tableau PetitDejeuner
    Public Sub PetitDejeunerTableau()
        Dim Depart As Range
        Depart = Feuil2.Range("E3")
        Dim PetitDejTab(26) As PetitDejeuner
        Dim i As Integer
        For i = 0 To 26
            PetitDejTab(1).Nom = Feuil2.Range("C" & 3 + i)
            Dim j As Integer
            For j = 0 To 20 Step 4      'J'ai mis un pas de 4 puisque je change de colonne
                    x1.Nom = Depart.value(0, j)
                    x1.Masse = Depart.Offset(0, j + 1).value
                    x1.Calorie = Depart.Offset(0, j + 2).value
            Next
         Next
    End Sub
    Il faudrait que j'incrémenté les valeurs de x1 à x2 mais je n'y arrive pas.
    J'avais écrit: "x" & j+1 mais ça ne marche pas. Je ne sais pas comment coder ce genre de problème.

    J'ai énormément de problème avec ce projet, mais j'espère pouvoir trouver une solution à celui-ci...
    J'espère avoir été claire
    Je vous remercie d'avance.

    PS: Je peux envoyer mon fichier si besoin.

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour ch0ubida


    Regarde ce tuto
    qui est une initiation au Type personnalisé.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Par défaut
    Merci. J'avais déjà vu ce tuto, en fait c'est à partir de lui que j'ai tenté de créer mon code. Mais ça ne marche pas dans mon cas. Je n'arrive pas à faire les boucles comme il faut. Et je ne trouve pas de solution sur internet pour résoudre ma boucle sur les variables x1, x2 etc. Je ne dois pas l'écrire correctement.

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Ton problème actuel réside dans une connaissance insuffisante de l'utilisation des Types personnalisés.

    Es-tu obligée d'utiliser un type personnalisé?

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Par défaut
    J'ai trouvé comment m'en sortir malgré tout

    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
    Public Sub DeclarationPetitDejeuner()
    Dim PetitDej(1 To 26, 1 To 7) As Aliment
    Dim i As Integer
    For i = 1 To 26
        With PetitDej(i, 1)
            .Nom = Feuil2.Range("E3").Offset(i - 1)
            .Calorie = Feuil2.Range("G3").Offset(i - 1)
            .Masse = Feuil2.Range("F3").Offset(i - 1)
        End With
        With PetitDej(i, 2)
            .Nom = Feuil2.Range("I3").Offset(i - 1)
            .Calorie = Feuil2.Range("J3").Offset(i - 1)
            .Masse = Feuil2.Range("K3").Offset(i - 1)
        End With
        With PetitDej(i, 3)
            .Nom = Feuil2.Range("M3").Offset(i - 1)
            .Calorie = Feuil2.Range("N3").Offset(i - 1)
            .Masse = Feuil2.Range("O3").Offset(i - 1)
        End With
        With PetitDej(i, 4)
            .Nom = Feuil2.Range("Q3").Offset(i - 1)
            .Calorie = Feuil2.Range("R3").Offset(i - 1)
            .Masse = Feuil2.Range("S3").Offset(i - 1)
        End With
        With PetitDej(i, 5)
            .Nom = Feuil2.Range("U3").Offset(i - 1)
            .Calorie = Feuil2.Range("V3").Offset(i - 1)
            .Masse = Feuil2.Range("W3").Offset(i - 1)
        End With
        With PetitDej(i, 6)
            .Nom = Feuil2.Range("Y3").Offset(i - 1)
            .Calorie = Feuil2.Range("Z3").Offset(i - 1)
            .Masse = Feuil2.Range("AA3").Offset(i - 1)
        End With
        With PetitDej(i, 7)
            .Nom = Feuil2.Range("C3").Offset(i - 1)
        End With
    Next
    End Sub

    Merci pour votre aide !

    Je ne sais pas si j'étais obligée d'utiliser un Type personnalisé mais étant donné que je dois récupérer le nom, la masse et les calories relatifs à chaque aliment, il me semble que c'est mieux. Le choix des menus se fait aléatoirement, il faut donc que je stocke ces données dans une variable.

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Très impressionnant !

    Il n'y a rien à dire.

    J'avais pensé à un tableau à une dimension. Mais ton tableau à deux dimensions est parfait.

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    'Tableau à une dimension de types personnalisés imbriqués
    Public Type Aliment
        Nom As String
        Masse As Double
        Calorie As Double
    End Type
     
    'Déclaration du PetitDejeuner qui contient le nom et 6 aliments
     Public Type PetitDejeuner
       Nom As String
       x1(6) As Aliment
     End Type
     
     Public PetitDejTab() As PetitDejeuner
     
    'Déclaration du tableau PetitDejeuner
    Public Sub PetitDejeunerTableau()
        Dim Depart As Range
     
        Dim f As Worksheet
     
        Dim i As Long
     
        Dim j As Long
     
        Dim colE, ColF, colG
     
        Set f = ThisWorkbook.Worksheets("Feuil2")
     
        ReDim PetitDejTab(1 To 26) As PetitDejeuner
     
        For i = 1 To UBound(PetitDejTab)
     
        Set Depart = f.Range("C" & i + 2)
     
         'aliment 1: nom sur la colonne E, masse sur F, calorie sur G
         'aliment 2: nom sur la colonne I, masse sur J, calorie sur K
     
        With PetitDejTab(i)
               .Nom = Depart.Offset(0, 0)
     
               For j = 1 To 6
                 Select Case j
                  Case 1
                   colE = 2: ColF = 3: colG = 4
                  Case 2
                    colE = 6: ColF = 7: colG = 8
                  Case 3
                    colE = 10: ColF = 11: colG = 12
                  'Case 4
     
                  'Case 5
     
                  'Case 6
     
                 End Select
     
                 .x1(j).Nom = Depart.Offset(0, colE)
     
                 .x1(j).Masse = Depart.Offset(0, ColF)
     
                 .x1(j).Calorie = Depart.Offset(0, colG)
     
               Next
           End With
         Next
     
         Call Lister
     
    End Sub
     
    Sub Lister()
     Dim j As Long, i As Long
     Dim VerifTab
     On Error Resume Next
        'VerifTab va prendre la valeur Empty si le tableau est vide. Dixit SilkyRoad
        VerifTab = UBound(PetitDejTab)
        On Error GoTo 0
     
        If IsEmpty(VerifTab) Then Exit Sub
     
     For i = LBound(PetitDejTab) To UBound(PetitDejTab)
          With PetitDejTab(i)
     
           Debug.Print i; .Nom
     
           For j = 1 To 6
            Debug.Print j, .x1(j).Nom
            Debug.Print j, .x1(j).Masse
            Debug.Print j, .x1(j).Calorie
           Next
     
          End With
     
         Next
    End Sub

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Par défaut
    En tout cas, merci beaucoup de ton aide Docmarti

    J'ai encore une petite question, je ne sais pas si tu pourras m'aider, mais je tente ma chance:
    Voilà ma méthode pour générer aléatoirement un petit dej, Sachant que le tableau petit dej a 26 lignes car 26 possibilités différents, 7 colonnes car 6 aliments et un nom par petit déjeuner. Chaque aliment contenant 3 variables: le nom, la masse, les calories/100g.
    Je veux en faire afficher chacun de ces éléments dans une feuille. Je n'ai écrit la procédure que pour l'affichage du nom du 1er aliment dans la cellule A5, mais cela sera répété sur plusieurs cellules puisqu'il y a plusieurs aliments.
    La variable CalorieJour correspond a la consommation maximum de calories/jour de l'utilisateur

    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
    'Ne prend en compte que TabPetitDej puisque c'est le seul repas du matin
    Public Sub GenererMatin()
        Dim Calorie As Double
        Calorie = CalorieJour * 0.3  '30% des calories sont résérvées au petit déjeuner, c'est la quantité max à ne pas dépasser
        m = NombreAleatoire(1, 26)   'Choix aléatoire du petit déjeuner parmi les lignes du tableau
        Dim Compteur As Double  'Comparateur de calories
        Compteur = 0
        Dim i As Integer
        For i = 1 To 6 'Car 6 colonnes sur 7 sont des aliments dans TabPetitDej
            Compteur = Compteur + TabPetitDej(m, i).Calorie * PetitDej(m, i).Masse          
        Next
        While Compteur > Calorie      'Tant que le nombre de calories du repas est trop important par rapport au pourcentage voulu, il faut diminuer les masses de chaque aliment
           For i = 1 To 6
               TabPetitDej(m, i).Masse = TabPetitDej(m, i).Masse * 0.95   'On applique un coefficient multiplicateur <1
            Next
        Wend
        Dim Cell As Range
        Set Cell = Feuil5.Range("A5")
        Cell = TabPetitDej(m, 1).Nom 
    End Sub
    Ca m'affiche comme erreur: erreur d'execution 9. J'ai l'impression que le type Aliment n'est pas reconnu et que je ne peux pas accéder au nom, a la masse et aux calories de chaque aliment.

    Quelqu'un a une solution ?

  8. #8
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par ch0ubida Voir le message
    Ca m'affiche comme erreur: erreur d'execution 9. J'ai l'impression que le type Aliment n'est pas reconnu et que je ne peux pas accéder au nom, a la masse et aux calories de chaque aliment.

    Quelqu'un a une solution ?

    Si ton tableau est déclaré (par DIM) à l'intérieur d'une procédure, il n'est pas accessible aux autres procédures.

    Pour qu'il devienne accessible dans toutes les procédures de tous les modules., il faut le déclarer en tête d'un module standard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public PetitDej() As Aliment
    puis remplace dans ta procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim PetitDej(1 To 26, 1 To 7) As Aliment ' crée un nouveau tableau accessible uniquement localement dans la procédure
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim PetitDej(1 To 26, 1 To 7) As Aliment

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'ai suivis ce fils de loin en loin,
    j'ai une petite remarque qui arrive bien tardivement par rapport a l'vancement, mais qui pourrait être payante a l'avenir!

    Un type de variable personalisée ce comporte comme une sorte de tableau avec un accès par nom de sous variable! Je trouve domage de l'afecter a un tableau a 2 dimention qui lui retire tout son interret (redimetion,trie...)!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Type nom
    nom as string
    Pnom as string
    end type  
    type membre
    nombre as integer
    membres() as nom
    end type
    sub test()
    dim famille(10) as membre
    famille(0).nombre=3
    redim famille(0).membre(2)
    en sub
    je pense a x1;x2 en x(6)

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Par défaut
    Oui, j'ai changé tout ça et les boucles marchent mais pas l'affichage
    J'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public TabPetitDej(1 To 26, 1 To 7) As Aliment
    Public TabEntree(1 To 25, 1 To 4) As Aliment
    Public TabPlatPrincipal(1 To 40, 1 To 5) As Aliment
    Public TabDessert(1 To 28, 1 To 2) As Aliment
    En tête du module pour éviter de redimensionner les tableaux dans les procédures.

    J'ai l'impression qu'Excel me fait des siennes avec les offsets... Le décalage demandé est pourtant correct, mais quand je veux afficher mes valeurs, ce n'est pas du tout le décalage demandé ! Ce n'est pas la première fois que ça me fait ça.
    Est-ce que je peux t'envoyer mon fichier? Ce sera peut-être plus simple de voir ce que ça donne visuellement plutôt que de tout décrire.

  11. #11
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par ch0ubida Voir le message
    Est-ce que je peux t'envoyer mon fichier? Ce sera peut-être plus simple de voir ce que ça donne visuellement plutôt que de tout décrire.
    Oui envoie ton fichier. On verra mieux.

  12. #12
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Par défaut
    J'ai réussi à arranger certains points mais tout ne marche pas.
    Je t'envoie donc mon fichier

    Le but de la création de mes tableaux est de remplacer la sub RepasAleatoire car elle ne me permet pas de récupérer les calories et masse des aliments.

    Tu peux fermer le userform qui s'affiche à l'ouverture d'excel.

    J'espère que tu y comprendras quelque chose...

    ProjetRepas.xlsm

  13. #13
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par ch0ubida Voir le message

    J'ai l'impression qu'Excel me fait des siennes avec les offsets... Le décalage demandé est pourtant correct, mais quand je veux afficher mes valeurs, ce n'est pas du tout le décalage demandé ! Ce n'est pas la première fois que ça me fait ça.
    Je ne trouve pas de Sub RepasAleatoire.

    Où se situe ton problème exactement? Dans la Sub GenererMatin ?

  14. #14
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Par défaut
    La procédure Public Sub RepasAleatoire(TypeFood As String) est dans le module 1.
    Cette méthode m'affichait les menus mais je ne pouvais pas changer la masse et calculer les calories à partir de ça.

    En gros ce que j'ai à faire c'est générer un nombre aléatoire pour afficher une certaine ligne du tableau petit déjeuner, donc tous les aliments composant ce fameux petit dej. Le problème c'est qu'il faut adapter la masse et les calories en fonction de l'utilisateur. Pour ce j'ai défini une procédure Sub GenererMatin
    Ensuite, je fixe le nombre de calorie à ne pas dépasse par repas. Par exemple: 30% des calories de la journée pour le petit dej

    Ensuite, je dois compter le nombre de calories apporté par chaque aliment en fonction des masses de référence de chacun. Si la somme dépasse mon pourcentage, je dois diminuer les masses, en affectant un coefficient multiplicateur genre 0,95. Je veux le faire avec une boucle, histoire de pas trop réduire les quantités d'un coup.

    Le problème est d'ensuite afficher toutes les données dans la feuille Planning (Feuil5). Je dois retourner le nom de l'aliment, la masse et les calories qu'il apporte en fonction de cette même masse.
    C'est cette partie du programme qui me fait défaut. Non seulement je dois faire une boucle sur les lignes car il y a plusieurs aliments par repas, mais je dois aussi la faire sur les colonnes puisque le programme doit durer x jours (la durée est choisie par l'utilisateur). Or je n'arrive absolument pas à afficher mes données. Je ne sais pas ce que je fais de faux. J'ai tenter de rajouter ce code au sein de la sub GenererMatin
    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
    Dim CellNomGeneral As Range, CellNom As Range, CellMasse As Range, CellCalorie As Range
        Set CellNomGeneral = Feuil5.Range("PetitDej")   'La cellule où je veux avoir le nom du petit déjeuner
        Set CellNom = Feuil5.Range("D6")     'La cellule de départ contenant le nom de l'aliment
        Set CellMasse = Feuil5.Range("E6")    'La cellule de départ contenant la masse de l'aliment, modifiée en fonction de l'utilisateur
        Set CellCalorie = Feuil5.Range("F6")    'La cellule contenant les calories relatifs à l'aliment
     
        CellNomGeneral = TabPetitDej(m, 7).Nom
        For i = 1 To 6
            Dim j As Integer
            j = i - 1
            With TabPetitDej(m, i)
                CellNom.Offset(j, 0) = .Nom
                CellMasse.Offset(j, 0) = Masse(i)
                CellCalorie.Offset(j, 0) = .Calorie * .Masse
            End With
        Next
    Mais je récupère 0 pour les calories et masses, voire même 00 janvier 1900 ce qui n'a aucun sens. Et le nom de l'aliment n'apparaît jamais, peu importe la valeur de m, le nombre aléatoire.

  15. #15
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Sur la feuille MenuRepas, les colonnes Masse indicative et Kcal pour 100g ne sont pas toujours dans le bon ordre.

    Soit tu les mets toujours en ordre, soit tu les nommes pour pouvoir les lire correctement.

    Pour le 00 janvier 1900, il est dû au format de certaines cellules qui est fixé au format Date.

    Citation Envoyé par Docmarti Voir le message
    Sur la feuille MenuRepas, les colonnes Masse indicative et Kcal pour 100g ne sont pas toujours dans le bon ordre.
    .
    Je me trompe. J'ai pensé que l'inversion des colonnes E et F ( Masse indicative et Kcal pour 100g ) causait le problème. Ce n'est pas le cas. Ta lecture de Masse indicative et Kcal pour 100g des colonnes E et F est correcte.

    Donc le problème ne vient pas de là.

    Citation Envoyé par ch0ubida Voir le message
    J'ai l'impression qu'Excel me fait des siennes avec les offsets... Le décalage demandé est pourtant correct, mais quand je veux afficher mes valeurs, ce n'est pas du tout le décalage demandé ! Ce n'est pas la première fois que ça me fait ça.
    Ce problème est occasionné par les cellules fusionnées.
    Exemple :
    Si les cellules D5:F5 sont fusionnées, range("D5").offset(0,1).address donnera $G$5 et non pas $E$5

    Donc les cellules fusionnées peuvent rendre plutôt complexe l'utilisation de offset.

  16. #16
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Par défaut
    Désolée du retard !

    J'ai finalement réussi à régler certains problèmes
    En effet, les offsets avec des cellules fusionnées rendent les choses difficiles. Mais c'est tellement plus esthétique de les fusionner... Tant pis!
    J'avais mal construit mon tableau à la base au niveau des masses et calories. J'ai tout remis dans le même ordre, pour être plus rigoureuse.
    J'ai réussi à générer mes menus sur une feuille précise. Il me reste à les générer sur un certain nombre de feuille, donc à entrer une feuille en paramètre.

    J'ai donc encore pas mal de choses à faire mais je vais poser les questions restantes dans un autre post puisque celui n'est plus d'actualité

    En tout cas, merci beaucoup, ton aide m'a été précieuse !

    Bonne journée à toi !

  17. #17
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Bonjour, bonjour !

    Pour l'esthétique il n'y a pas besoin de fusionner car il suffit de centrer sur plusieurs colonnes !

    Sinon pour des cellules fusionnées, voir du côté de la propriété MergeArea

  18. #18
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par ch0ubida Voir le message
    En effet, les offsets avec des cellules fusionnées rendent les choses difficiles. Mais c'est tellement plus esthétique de les fusionner... Tant pis!
    J'avais mal construit mon tableau à la base au niveau des masses et calories. J'ai tout remis dans le même ordre, pour être plus rigoureuse.
    J'ai réussi à générer mes menus sur une feuille précise. Il me reste à les générer sur un certain nombre de feuille, donc à entrer une feuille en paramètre.

    J'ai donc encore pas mal de choses à faire mais je vais poser les questions restantes dans un autre post puisque celui n'est plus d'actualité

    En tout cas, merci beaucoup, ton aide m'a été précieuse !

    Bonne journée à toi !
    Il est conseillé par tous de ne jamais utiliser Fusionner les cellules qui est une source de maux de tête. Il faut préférer
    Alignement du texte / Horizontal / Centré sur plusieurs colonnes

    Merci à toi. Je suis en train de préparer mes menus de la semaine.

    Bonne journée.

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    personnellement, je dé-fusionne les cellules avant traitement puis je les re-fusionne après traitement!

  20. #20
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Bonjour,
    personnellement, je dé-fusionne les cellules avant traitement puis je les re-fusionne après traitement!
    Bonjour Robert.

    Oui, c'est une solution pour pouvoir utiliser du VBA sur des cellules fusionnées.

    Une question que je me pose cependant (un doute) :
    Est-ce qu'il peut survenir des problèmes avec certaines formules si on fusionne des cellules ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Variable type UserForm à initialiser avec nom variable
    Par dalmasma dans le forum Général VBA
    Réponses: 2
    Dernier message: 28/04/2009, 14h03
  2. création de type enum en runtime
    Par marwaa dans le forum Windows Forms
    Réponses: 15
    Dernier message: 10/03/2009, 16h22
  3. Création formulaire type
    Par Jacquesdu38 dans le forum Modélisation
    Réponses: 3
    Dernier message: 10/07/2008, 09h04
  4. Création de types de données en Visio en modèle de DB
    Par jerome.fortias dans le forum Visio
    Réponses: 0
    Dernier message: 31/03/2008, 11h04
  5. Création colonne type memo
    Par Mvu dans le forum Access
    Réponses: 8
    Dernier message: 23/06/2006, 11h57

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