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 :

Sélection plage variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut Sélection plage variable
    Bonjour,

    Je voudrais sélectionner des données de A2 à ACxxxx
    xxxx est bien entendu variable cela dépend des fichiers.

    j'ai fait un code mais il pose problème lorsqu'il y a une seule ligne.

    voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A2:AC2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy

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

    Une solution possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub CopierAire()
     
    Dim DerniereLigne As Long
     
        With ActiveSheet
             DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
             If DerniereLigne > 1 Then
                .Range(.Cells(2, 1), .Cells(DerniereLigne, 29)).Copy
               ' Sheets("Feuil2").Range("A10").PasteSpecial  ' A adapter
             End If
        End With
     
    End Sub
    Cordialement.

  3. #3
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut
    Merci mais

    seulement sélectionner de A2 à AC2
    Ensuite, Sélectionner jusqu'à la ligne x qui peut être 1 ligne comme 150 lignes....

    Merci d'avance.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Quel est le problème ? Vous avez un autre tableau en dessous de A2:ACXXXX ?
    Dernière modification par AlainTech ; 15/05/2015 à 20h59. Motif: Suppression de la citation inutile

  5. #5
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut
    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
    Sub regrouper()
     
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Workbooks.Open Filename:="MonChemin\MonFichier.xlsx"
    Range("A2").Select
    Workbooks("MonFichier macro 1").Activate
    Sheets("B").Activate
    Range("AO2").Select
     
    Do While ActiveCell.Value <> ""
          nom = ActiveCell.Value
        Workbooks.Open Filename:="MonChemin\" & nom & ".xlsx"
        Sheets(nom).Activate
        Dim DerniereLigne As Long
     
        With ActiveSheet
             DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
             If DerniereLigne > 1 Then
                .Range(.Cells(2, 1), .Cells(DerniereLigne, 40)).Copy
             End If
        End With
     
     
        Workbooks("MonFichier").Activate
        ActiveSheet.Paste
        Selection.End(xlDown).Select
        ActiveCell.Offset(1, 0).Select
        Workbooks(nom).Activate
        Sheets("RC").Activate
     
        Dim DerniereLigne As Long
     
        With ActiveSheet
             DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
             If DerniereLigne > 1 Then
                .Range(.Cells(2, 1), .Cells(DerniereLigne, 40)).Copy
     
             End If
        End With
    Voici une partie de ma macro, le code d'erreur est le suivant :
    Déclaration existante dans la portée en cours...

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tu déclares deux fois DerniereLigne dans ta procédure

    il est préférable de toujours déclarer ses variables tout en haut de la procédure, ça évite ces problèmes

  7. #7
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut
    Comment je dois écrire ma macro dans ce cas la ?
    vu que cela correspond à deux onglets différents...

    Merci d'avance.

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Tu confonds déclaration et affectation :

    1) Déclaration : on ne le fait qu'une fois dans la procédure. Comme son nom l'indique, ça déclare la variable (et également son type si tu l'indiques)
    2) Affectation (pour des variables qui ne sont pas des objets): tu mets dans la variable une valeur


    Declaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub UneMacro()
    Dim Toto as Integer
    Dim Tata as String
    ' Etc...
     
    ' Ton code
     
    End Sub
    Affectation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Toto = 2
    Tata = "Bonjour"
    Dans ton cas, tu souhaites modifier la valeur de DerniereLigne car tu n'es plus sur le même onglet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub UneMacro()
    Dim DerniereLigne as Long
     
    DerniereLigne = ' la valeur
     
    ' le code qui utilise DernièreLigne
     
    DerniereLigne = ' une autre valeur
     
    ' le code qui utilise la nouvelle valeur de DerniereLigne
     
    End Sub

  9. #9
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut
    Désolé je ne comprends rien je suis amateur.
    Avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub UneMacro()
    Dim DerniereLigne as Long
     
    DerniereLigne = ' la valeur
     
    ' le code qui utilise DernièreLigne
     
    DerniereLigne = ' une autre valeur
     
    ' le code qui utilise la nouvelle valeur de DerniereLigne
     
    End Sub
    je ne peux sélectionner une plage de donnée variable qui comme son nom l'indique peut être A2 à AC2 mais aussi A2 à AC3000

  10. #10
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    le code de Eric KERGRESSE répond bien à ta demande, et va sélectionner toutes les lignes non vides de la ligne 2 à la ligne X
    X est calculé en fonction de ce qu'il y a dans ta feuille Excel, ca pourra être 3 ou 50000 ... tout dépend de la dernière ligne où tu as des choses écrites


    Si tu ne comprends "rien", on ne pourra malheureusement pas t'aider à progresser

    tu dois maitriser les bases :

    http://mhubiche.developpez.com/Access/variables/
    http://silkyroad.developpez.com/VBA/LesVariables/

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il y a sans aucun doute des erreurs dans le code ci-dessous mais c'est comme cela que j'essayerais :

    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
    Sub RegrouperV2()
     
    Dim WbMacro As Workbook
    Dim ShBal As Worksheet
    Dim DerniereLigneMacro As Long
     
    Dim Wb As Workbook
    Dim ShFichier As Worksheet
    Dim ShRetraitement As Worksheet
    Dim DerniereLigneSh As Long
     
    Dim WbEnCours As Workbook
    Dim ShNomFichier As Worksheet
    Dim ShRetraitement As Worksheet
    Dim DerniereLigneShNomFichier As Long
    Dim DerniereLigneShRetraitement As Long
     
    Dim RepertoireEnCours As String
     
    Dim AireFichiers As Range
    Dim CelluleFichiers As Range
     
        Set WbMacro = Workbooks("MonFichier macro 1")
        Set ShBal = WbMacro.Worksheets("B")
        With ShBal
             DerniereLigneMacro = .Cells(.Rows.Count, 41).End(xlUp).Row
             If DerniereLigneMacro > 1 Then
                Set AireFichiers = .Range(.Cells(2, 41), .Cells(DerniereLigneMacro, 41))
             End If
        End With
     
        RepertoireEnCours = "MonChemin\"
     
        Workbooks.Open Filename:=RepertoireEnCours & "MonFichier.xlsx"
        Set Wb = ActiveWorkbook
        Set ShFichier = ActiveSheet  ' Il faut remplacer ce code par Set ShFichier = Wb.Sheets("XXXXX")
        ' il manque sans doute une feuille Retraitement comptable
     
        With ShFichier
             DerniereLigneSh = .Cells(.Rows.Count, 1).End(xlUp).Row
        End With
     
        Application.ScreenUpdating = False
     
        For Each CelluleFichiers In AireFichiers
     
          Workbooks.Open Filename:=RepertoireEnCours & CelluleFichiers & ".xlsx"
          Set WbEnCours = ActiveWorkbook
          Set ShNomFichier = WbEnCours.Worksheets(CelluleFichiers)
          Set ShRetraitement = WbEnCours.Worksheets("RC")
     
          With ShNomFichier
               ' Traitement de l'onglet Nom de fichier
               '--------------------------------------
               DerniereLigneShNomFichier = .Cells(.Rows.Count, 1).End(xlUp).Row
               If DerniereLigneShNomFichier > 1 Then
                  .Range(.Cells(2, 1), .Cells(DerniereLigneShNomFichier, 40)).Copy
                  ShFnpFichier.Range("A" & DerniereLigneShFnp).PasteSpecial
                  DerniereLigneSh = ShFichier.Cells(.Rows.Count, 1).End(xlUp).Row + 1
               End If
          End With
     
          With ShRetraitement
               ' Traitement de l'onglet Retraitements comptables
               '------------------------------------------------
               DerniereLigneShRetraitement = .Cells(.Rows.Count, 1).End(xlUp).Row
               If DerniereLigneShRetraitement > 1 Then
                  .Range(.Cells(2, 1), .Cells(DerniereLigneShRetraitement, 40)).Copy
                 ' ShFichier.Range("A" & DerniereLigneSh).PasteSpecial                  ' Changer l'onglet de destination dans WbFnp
                 ' DerniereLigneSh = ShFichier.Cells(.Rows.Count, 1).End(xlUp).Row + 1   ' A adapter
               End If
     
     
          End With
     
          Application.DisplayAlerts = False
          WbEnCours.Close savechanges:=False
          Application.DisplayAlerts = True
     
          Set WbEnCours = Nothing
          Set ShNomFichier = Nothing
          Set ShRetraitement = Nothing
     
        Next CelluleFichiers
     
        Application.ScreenUpdating = True
     
     
        Set ShFnpFichier = Nothing
        Set WbFnp = Nothing
        Set AireFichiers = Nothing
        Set ShBal = Nothing
        Set WbFnpMacro = Nothing
     
    End Sub

    Vous devez avoir plusieurs feuilles dans le fichier NomFichier. Il faut les identifier et les affecter à des variables Worksheet.


    Comme l'a indiqué joe.levrai, il vous faut commencer par connaître le langage.

    Cordialement.
    Dernière modification par Invité ; 07/05/2015 à 09h59.

  12. #12
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Une solution plus basique et moins élégante que celle de Eric KERGRESSE mais qui sera peut-être plus compréhensible pour toi

    en gros on construit la plage de cellules à selectionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub selection_variable()
        Dim Lign, Xfois, NbLign As Long
        Dim Plage As String
     
        Lign = 2
        Xfois = 5
        NbLign = Lign + Xfois - 1
        Plage = "A" & Lign & ":AC" & NbLign
        Range(Plage).Select
     
    End Sub
    tu dis

    A+

  13. #13
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2015
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Mars 2015
    Messages : 123
    Par défaut
    Merci à vous tous pour vos conseils et vos réponses.

    J'ai trouvé la solution pour mon problème merci à vous

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

Discussions similaires

  1. Sélection plage variable
    Par Yoooo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/05/2018, 12h09
  2. Sélection et copie d'une plage variable
    Par Rémy A. dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/07/2013, 18h44
  3. [VBA-E] COUNTIF sur une sélection de plage variable
    Par NiKoS29 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/09/2007, 23h03
  4. sélection plage de cellule sur Msflexgrid
    Par Charly45 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/12/2006, 15h35
  5. [VBA-E] Macro Pour Faire un Tri sur plage variable
    Par tabarly35 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/09/2006, 19h02

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