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 :

Enregistrer des adresses de cellules et copier les cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Par défaut Enregistrer des adresses de cellules et copier les cellules
    Bonjour à tous,

    J'ai dans une feuille nommée "RC30 (1)" dans la colonne A :
    - un certain nombre de cases égale à 1 (de A2 à Ai) avec l'indice i
    - ensuite un certain nombre de cases égale à 2 (de Ai+1 à Aj) avec l'indice j
    - ensuite un certain nombre de cases égale à 3 (de Aj+1 à Ak) avec l'indice k
    Par exemple :
    A2=1
    A3=1
    A4=1
    A5=1
    A6=2
    A7=2
    A8=2
    A9=2
    A10=2
    A11=3
    A12=3
    On a donc ici : i=5, j=10, k=12.
    Et j'aimerai pouvoir créer une macro pour enregistrer les adresses des cellules A2, Ai, Ai+1, An, An+1 et Am sachant que je ne connais pas les indices i, n et m.
    J'aimerai les entrer dans des variables que j'utiliserai plus tard :
    adress11=A2
    adress12=Ai
    adress21=Ai+1
    adress22=An
    adress31=An+1
    adress32=Am

    avec :
    nb_lignes_1= nombre de lignes de cases égales à 1 (=i-1)
    nb_lignes_2= nombre de lignes de cases égales à 2 (=j-i)
    nb_lignes_3= nombre de lignes de cases égales à 3 (=k-j)


    Comme ça, je pourrai par exemple dans une nouvelle feuille "RC30" copier le nombre de cellules égales à 1 (puis 2 puis 3) et le multiplier par 2. Je m'explique :
    Par exemple dans la nouvelle feuille "RC30" on aura :
    A2=1
    A3=1
    A4=1
    A5=1
    A6=1
    A7=1
    A8=1
    A9=1
    A10=2
    A11=2
    A12=2
    A13=2
    A14=2
    A15=2
    A16=2
    A17=2
    A18=2
    A19=2
    A20=3
    A21=3
    A22=3
    A23=3

    J'ai pensé à écrire ce programme pour l'instant pour la suite.
    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
     
    'Pour la valeur 1 :
    'Dans la feuille "RC30 (1)":
    Worksheets("RC30 (1)").Range("adress11:adress12").Select 'sélection des bornes des cases égales à 1
    Selection.Copy
    'Dans la feuille "RC30" :
    Worksheets("RC30").Cells(2,1).Select 'selection de la case A2
    ActiveSheet.Paste 'coller les chiffres 1 une première fois
    Worksheets("RC30").Cells(2,1).Offset(nb_lignes_1,1).Select 'se décaler de nb_lignes_1 lignes
    ActiveSheet.Paste 'coller les chiffres 1 une seconde fois
     
    'Pour la valeur 2 :
    'Dans la feuille "RC30 (1)":
    Worksheets("RC30 (1)").Range("adress21:adress22").Select 'sélection des bornes des cases égales à 2
    Selection.Copy
    'Dans la feuille "RC30" :
    Worksheets("RC30").Cells(2,1).Select 'selection de la case A2
    ActiveSheet.Paste 'coller les chiffres 2 une première fois
    Worksheets("RC30").Cells(2,1).Offset(2*nb_lignes_1,1).Select
    ActiveSheet.Paste 'coller les chiffres 2 une seconde fois
    Du coup j'ai vraiment besoin d'aide pour le départ et pour la suite que j'ai écrit un avis serait bien sympa!

    Merci beaucoup d'avance!!!^^

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Par exemple en supposant que le formalisme est strictement respecté:
    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
    Option Explicit
     
    Private Sub Traitement()
     
      Dim i#, j#, k#
      Dim nb_lignes_1#, nb_lignes_2#, nb_lignes_3#
     
      With Worksheets("RC30 (1)")
     
        i# = .Columns(1).Find(2, , , xlWhole).Row
        j# = .Columns(1).Find(3, , , xlWhole).Row
        k# = .Range("A" & .Rows.Count).End(xlUp).Row
     
        nb_lignes_1# = i# - 2
        nb_lignes_2# = j# - i#
        nb_lignes_3# = k# + 1 - j#
     
      End With
     
      Debug.Print (nb_lignes_1#)
      Debug.Print (nb_lignes_2#)
      Debug.Print (nb_lignes_3#)
     
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Par défaut
    Déjà merci beaucoup pour votre réponse. Par contre à quoi sert le "Debug.Print" et le # après les indices?? Je n'ai pas aussi les adress11(=A2), adress12((=Ai), adress21(=Ai+1), adress22(=Aj), adress31(=Aj+1), adress32(=Ak).
    Comment je peux faire pour les enregistrer pour les réutiliser? Ma question repose surtout sur ça!^^

  4. #4
    Invité
    Invité(e)
    Par défaut
    Les 'Debug.Print()' servent juste à l'affichage en mode console.

    Sinon pour les adresses:
    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
    Option Explicit
     
    Private Sub Traitement()
     
      Dim i#, j#, k#
      Dim nb_lignes_1#, nb_lignes_2#, nb_lignes_3#
      Dim adress11$, adress12$, adress21$
      Dim adress22$, adress31$, adress33$
     
      With Worksheets("RC30 (1)")
     
        i# = .Columns(1).Find(2, , , xlWhole).Row
        j# = .Columns(1).Find(3, , , xlWhole).Row
        k# = .Range("A" & .Rows.Count).End(xlUp).Row
     
        nb_lignes_1# = i# - 2
        nb_lignes_2# = j# - i#
        nb_lignes_3# = k# + 1 - j#
     
        adress11$ = .[A2].Address
        adress12$ = .Cells(i# - 1, 1).Address
        adress21$ = .Cells(i#, 1).Address
        adress22$ = .Cells(j# - 1, 1).Address
        adress31$ = .Cells(j#, 1).Address
        adress33$ = .Cells(k#, 1).Address
     
      End With
     
    End Sub
    D'ailleurs les adresses ne servent à rien.

    La macro complète:
    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
    Option Explicit
     
    Private Sub Traitement()
     
      Dim i#, j#, k#
      Dim nb_lignes_1#, nb_lignes_2#, nb_lignes_3#
     
      With Worksheets("RC30 (1)")
     
        i# = .Columns(1).Find(2, , , xlWhole).Row
        j# = .Columns(1).Find(3, , , xlWhole).Row
        k# = .Range("A" & .Rows.Count).End(xlUp).Row
     
        nb_lignes_1# = i# - 2
        nb_lignes_2# = j# - i#
        nb_lignes_3# = k# + 1 - j#
     
      End With
     
      With Worksheets("RC30")
     
        .Range(.[A2], .Cells(nb_lignes_1# * 2 + 1, 1)) = 1
        .Range(.Cells(nb_lignes_1# * 2 + 2, 1), .Cells((nb_lignes_1# + nb_lignes_2#) * 2 + 1, 1)) = 2
        .Range(.Cells((nb_lignes_1# + nb_lignes_2#) * 2 + 2, 1), .Cells((nb_lignes_1# + nb_lignes_2# + nb_lignes_3#) * 2 + 1, 1)) = 3
     
      End With
     
    End Sub
    Dernière modification par AlainTech ; 30/09/2013 à 04h02. Motif: Fusion de 2 messages

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 36
    Par défaut
    OK parfait, j'ai essayé le début ça marche très bien!! merci beaucoup!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/02/2018, 10h37
  2. Réponses: 1
    Dernier message: 17/02/2011, 19h33
  3. [XL-2007] Copier les cellules d'un classeur vers un autre
    Par tibofo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/07/2010, 13h02
  4. Réponses: 3
    Dernier message: 13/04/2010, 12h39
  5. Réponses: 19
    Dernier message: 04/06/2007, 17h12

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