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 :

Cellule dynamique dans Range [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 233
    Points : 462
    Points
    462
    Par défaut Cellule dynamique dans Range
    Bonjour,

    j'ai une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frs.Range("J1:J100").Value = Sh.Range("B4:B100").Value
    je veux remplacer les colonnes J et B ( et éventuellement la limite 100 par une variable pour pouvoir passer aux colonnes suivantes

    Je pensai m'en sortir facilement mais je bloque depuis 2 jours en voulant utiliser ce que j'ai trouver sur le net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(.Cells(x, y), .Cells(a, b))
    sans succès
    Il ne savait pas que c'était impossible, donc il l' a fait...

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    C'est sans doute parce que tu ne définis pas les onglets des Cells. Il faut que ce soient les mêmes que celles des Range.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frs.Range(frs.Cells(x, y), frs.Cells(a, b)).Value
    Ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With frs
       .Range(.Cells(x, y), .Cells(a, b)).Value = 0
    End With
    Mais il serait plus simple d'utiliser un Resize :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frs.Range("J1").Resize(a, b).Value = Sh.Range("B4").Resize(a, b).Value
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 233
    Points : 462
    Points
    462
    Par défaut
    voilà ma séquence :
    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
    While CatalDercol > catalCol
        With catalSh.Cells(Columns.Count, catalCol).End(xlUp).MergeArea: derlig = .Cells(.Cells.Count).Row: End With
        k = 4
        x = 1
        While derlig > k
            If catalSh.Cells(k, catalCol) > " " Then  ' ligne / col
                frs.Range("J1").Resize(x, y).Value = catalSh.Range("B4").Resize(k, catalCol).Value
                x = x + 1
                k = k + 1
            Else
            End If
        Wend
     
        y = y + 1   ' col frs
        catalCol = catalCol + 2   ' col catal
    Wend
    Les colonnes de "catalSh" sont les bonnes (une sur 2 à partir de "B"), mais j'ai les résultats en colonnes J, L, M... de "frs"soit une colonne sur 2, multiples essais sans comprendre.

    Le contenu des lignes est cependant correct
    Il ne savait pas que c'était impossible, donc il l' a fait...

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    "y" n'est pas défini !
    Ne confondrait-tu pas resize et offset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ___.Resize(x, y).Value = ___.Resize(k, catalCol).Value
    Pour que cette ligne fonctionne il faudrait que x = k et y = catalCol
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 233
    Points : 462
    Points
    462
    Par défaut
    y est défini avant (y = 1)

    le pb est que x # a et y # catalCol

    Je ne connais ni resize ni offset, alors peut être que c'est offset à utiliser...
    Il ne savait pas que c'était impossible, donc il l' a fait...

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    Je ne connais ni resize ni offset, ...
    Quand tu connais pas, tu cliques sur le mot et il y a la touche magique : F1
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  7. #7
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 233
    Points : 462
    Points
    462
    Par défaut
    J'ai fait qq test avec offset, vu merci, mais cela ne permet pas de copier une plage d'une feuille vers une autre d'un autre classeur ?

    mon pb de base est de copier une plage d'une feuille vers une feuille d'un autre classeur avec des colonnes dynamique et lignes dynamiques (ça je sais faire pour les lignes)
    Il ne savait pas que c'était impossible, donc il l' a fait...

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Je t'ai donné la méthode. A toi d'aller regarder dans l'aide VBA la description de Resize et de faire des essais.
    Après 210 demandes sur le forum Excel (et 0 aide apportée à un autre demandeur ), tu devrais être en mesure de faire ça, non ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Re,

    Un exemple :
    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
    Option Explicit
    Sub test()
    Dim r As Range
    Dim c As Range
    Dim nL As Long, pL As Long, pC As Long, dL As Long, dC As Long
      pL = 2: dL = 20
      pC = 1: dC = 10
      Set c = Workbooks(2).Worksheets(3).Range("B12")  'destination
      With Workbooks(1).Worksheets(1)
        For nL = pL To dL
          Set r = .Range(.Cells(nL, pC), .Cells(nL, dC))
          c.Resize(r.Rows.Count, r.Columns.Count).Value = r.Value
          Set c = c.Offset(1)
        Next nL
      End With
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  10. #10
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 233
    Points : 462
    Points
    462
    Par défaut
    Comment peut-on porter assistance aux autres personnes ?
    Il ne savait pas que c'était impossible, donc il l' a fait...

  11. #11
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    Comment peut-on porter assistance aux autres personnes ?
    Tu lis leurs demandes et tu essayes de trouver une réponse à leurs questions.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  12. #12
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 233
    Points : 462
    Points
    462
    Par défaut
    tout simplement, merci je vais faire dans la limite de mes compétences

    pour ma questions, merci de toutes les réponses,

    voilà le code probablement pas le meilleur pour copier les colonnes B, D, F etc à partir de la ligne 4 d'une feuille dans les colonnes J,K,L etc à partir de la ligne 1 d'une autre feuille
    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
    premlig = 4 ' 1ere ligne "catalSh"
    premcol = 2 ' 1ere colonne "catalSh"
    colDest = 10 ' col J
    dercol = catalSh.Cells(4, Columns.Count).End(xlToLeft).Column
    Set dest = frs.Range("J1")  'destination
     
    While dercol >= premcol
        With catalSh.Cells(Rows.Count, premcol).End(xlUp).MergeArea: derlig = .Cells(.Cells.Count).Row: End With
     
        For i = premlig To derlig
          Set r = catalSh.Range(catalSh.Cells(i, premcol), catalSh.Cells(i, premcol))
          dest.Resize(r.Rows.Count, r.Columns.Count).Value = r.Value
          Set dest = dest.Offset(1)
        Next i
     
        k = -i + 3 + 1
        Set dest = dest.Offset(k, 1)
        premcol = premcol + 2
    Wend
    Il ne savait pas que c'était impossible, donc il l' a fait...

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

Discussions similaires

  1. Verrouiller une plaque de cellule dynamique dans un classeur partagé
    Par Nicko29 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/02/2015, 14h47
  2. [XL-2003] Les cellules (vides) dans un tableau croisé dynamique
    Par Mauna dans le forum Excel
    Réponses: 12
    Dernier message: 12/05/2009, 09h44
  3. [FPDF] Contenu dynamique dans une cellule
    Par HwRZxLc4 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 27/12/2007, 12h45
  4. Passage dynamique dans un RANGE
    Par jefferson_PBL dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 22/11/2007, 15h05
  5. Liste dynamique dans un cellule
    Par kbakouan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/09/2007, 12h41

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