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 :

Range(Cells.Value & Cells.Value)


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 : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut Range(Cells.Value & Cells.Value)
    Bonjour !

    Je reviens vers vous car je bloque sur une syntaxe assez simple je pense, mais dont je n'arrive pas à me dépatouiller malgré mes recherches...

    Sur une feuille, j'ai un tableau avec :
    en colonne E : une liste de noms d'animaux (de la ligne 7 à la ligne 45)
    à partir de la colonne F et jusqu'à la dernière colonne non vide (disons Z pour l'exemple) : des caractéristiques (type "race", "date de naissance", "couleur", etc.)
    sur la ligne 4 (de F à Z) des lettres qui correspondent à des colonnes (type "E", "M", "J", etc.)
    sur la ligne 6 (de F à Z) des nombres qui correspondent à des lignes (type "52", "64", "86", etc.)
    En résumé : une ligne = un animal ; l'adresse des cellules source se trouve en lignes 4 & 6 (4 = colonne source et 6 = ligne source)

    Les données contenues dans ce tableau sont mises à jour assez régulièrement à partir d'un classeur source. Sur ce classeur source, chaque feuille correspond à un animal. Le nom de la feuille = le nom de l'animal.

    Par exemple je vais mettre à jour la colonne F "race" de la façon suivante :
    - je regarde en E7 quel est le nom de l'animal ; je cherche la feuille correspondant à cet animal dans mon classeur source
    - je souhaite indiquer la race de cet animal en F7 ; je vais chercher cette information dans la cellule E19
    --> E19 car dans ma cellule F4 je trouve "E" et que dans ma cellule F6 je trouve "19"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range(Range("F" & 4).Value & Range("F" & 6).Value).Value
    =Range("E" & 19).Value
    ="labrador"
    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
    Sub test()
     
    'ActiveWorkbook étant le classeur source que je viens d'ouvrir, j'ai enlevé le code pour plus de lisibilité
    'ws2 étant la feuille 2 du classeur sur lequel je travaille (feuille sur laquelle se trouve mon tableau)
     
    Dim fclass
    For Each fclass In ActiveWorkbook.Sheets
      For j = 7 To 45
       If ws2.Range("E" & j).Value = fclass.Name Then 'si nom de l'animal = nom de la feuille
        ws2.Range("F" & j).Value = fclass.Range(ws2.Range("F" & 4).Value & ws2.Range("F" & 6).Value).Value
        ws2.Range("G" & j).Value = fclass.Range(ws2.Range("G" & 4).Value & ws2.Range("G" & 6).Value).Value
        ws2.Range("H" & j).Value = fclass.Range(ws2.Range("H" & 4).Value & ws2.Range("H" & 6).Value).Value
        ws2.Range("I" & j).Value = fclass.Range(ws2.Range("I" & 4).Value & ws2.Range("I" & 6).Value).Value
        ws2.Range("J" & j).Value = fclass.Range(ws2.Range("J" & 4).Value & ws2.Range("J" & 6).Value).Value
        ws2.Range("K" & j).Value = fclass.Range(ws2.Range("K" & 4).Value & ws2.Range("K" & 6).Value).Value
        ws2.Range("L" & j).Value = fclass.Range(ws2.Range("L" & 4).Value & ws2.Range("L" & 6).Value).Value
        ws2.Range("M" & j).Value = fclass.Range(ws2.Range("M" & 4).Value & ws2.Range("M" & 6).Value).Value
        ws2.Range("N" & j).Value = fclass.Range(ws2.Range("N" & 4).Value & ws2.Range("N" & 6).Value).Value
        ws2.Range("O" & j).Value = fclass.Range(ws2.Range("O" & 4).Value & ws2.Range("O" & 6).Value).Value
        ws2.Range("P" & j).Value = fclass.Range(ws2.Range("P" & 4).Value & ws2.Range("P" & 6).Value).Value
        ws2.Range("Q" & j).Value = fclass.Range(ws2.Range("Q" & 4).Value & ws2.Range("Q" & 6).Value).Value
        ws2.Range("R" & j).Value = fclass.Range(ws2.Range("R" & 4).Value & ws2.Range("R" & 6).Value).Value
        ws2.Range("S" & j).Value = fclass.Range(ws2.Range("S" & 4).Value & ws2.Range("S" & 6).Value).Value
        ws2.Range("T" & j).Value = fclass.Range(ws2.Range("T" & 4).Value & ws2.Range("T" & 6).Value).Value
        ws2.Range("U" & j).Value = fclass.Range(ws2.Range("U" & 4).Value & ws2.Range("U" & 6).Value).Value
        ws2.Range("V" & j).Value = fclass.Range(ws2.Range("V" & 4).Value & ws2.Range("V" & 6).Value).Value
        ws2.Range("W" & j).Value = fclass.Range(ws2.Range("W" & 4).Value & ws2.Range("W" & 6).Value).Value
        ws2.Range("X" & j).Value = fclass.Range(ws2.Range("X" & 4).Value & ws2.Range("X" & 6).Value).Value
        ws2.Range("Y" & j).Value = fclass.Range(ws2.Range("Y" & 4).Value & ws2.Range("Y" & 6).Value).Value
        ws2.Range("Z" & j).Value = fclass.Range(ws2.Range("Z" & 4).Value & ws2.Range("Z" & 6).Value).Value    
       End If
      Next j
    Next fclass
     
    End Sub
    Cette macro fonctionne parfaitement telle quelle, mais comme le nombre de colonnes évolue sans cesse et que certaines colonnes sont ajoutées/supprimées/insérées... J'aimerais remplacer les A, B, C, [...], Z et boucler sur ce code avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DerCol = .Range("XFD6").End(xlToLeft).Column
    k = 6 to DerCol
    Mais cela ne fonctionne pas. J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ws2.Range(k & j).Value = fclass.Range(ws2.Range(k & 4).Value & ws2.Range(k & 6).Value).Value
    ws2.Cells(j, k).Value = fclass.Range(Cells(4, k).Value & ws2.Cells(6, k).Value).Value
    ws2.Cells(j, k).Value = fclass.Range(Cells(4, k).Value, ws2.Cells(6, k).Value).Value
    ws2.Cells(j, k).Value = fclass.Cells(ws2.Cells(6, k).Value, Cells(4, k).Value).Value
    ws2.Cells(j, k).Value = fclass.Cells(ws2.Cells(6, k), Cells(4, k)).Value
    ws2.Cells(j, k) = fclass.Cells(ws2.Cells(6, k), Cells(4, k))
    Evidemment j'ai essayé en remplaçant les lettres de colonnes en ligne 4 par les chiffres correspondants (ex : j'ai remplacé "A" par 1, "E" par 5, etc.)

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    en partant de tes lignes qui fonctionnent, je dirais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        For j = 7 To 45
            If ws2.Range("E" & j).Value = fclass.Name Then    'si nom de l'animal = nom de la feuille
                For col = 6 To dercol
                    ws2.Cells(j, col).Value = fclass.Range(ws2.Cells(4, col).Value & ws2.Cells(6, col).Value).Value
                Next col
    eric

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

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Par défaut
    Bonjour eriiic !

    Toutes mes excuses pour ce délais de réponse, la fin d'année a été très chargée pour moi et j'ai du jongler entre plusieurs projets...

    Je viens de tester ta proposition et effectivement cela fonctionne parfaitement !

    Merci beaucoup pour ton aide, je passe cette discussion en "Résolu".

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

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