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 sur une plage de cellule avec ligne variable VBA [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 1
    Par défaut Range sur une plage de cellule avec ligne variable VBA
    Bonjour,

    J'ai un petit problème qui doit être sans doute très simple à résoudre :

    Dans mon code VBA je voudrais sectionné une plage de cellule pour cela j'utilise : sauf que dans ma situation je voudrai que la ligne soit définit par une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim LIGNE As Byte
        LIGNE = Range("G14").Value
        Range("B" & LIGNE & ":" & "K" & LIGNE).Select
    C'est la que je n'arrive plus, lorsque que je le fais avec une cellule ça marche mais avec une plage de cellule ça ne marche pas.

    Merci d'avance pour votre aide,
    Cordialement.
    Nheude.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Il faudrait voir ce que retourne ta variable LIGNE

    Plutôt que Byte, aussi bien y aller avec Long.
    Les systèmes d'aujourd'hui sont beaucoup plus performants qu'il y a 20 ans...
    Et quand on parle de lignes, on parle de millions possibles, donc Long

    Ceci devrait fonctionner si LIGNE renvoie bien un nombre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B" & LIGNE & ":K" & LIGNE).Select
    Ceci dit, évite les Select lorsque possible, soit à peu près toujours

  3. #3
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir Nheude, bonsoir le forum,

    To code est tout a fait correct, toutefois la déclaration de la variable LIGNE comme byte limite à la ligne 255. Si tu dois aller au-delà il faut la déclarer comme Integer. Que signifie : ça ne marche pas ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Responsable de production
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de production
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    hello,
    tu peux égalemment travailler avec "Cells(x,x)" qui permet de remplacer les deux "x" par des variables par exemple "Ligne, Colonne" pour facilité la lecture du code ou comme dans l'exemple ci-dessous uniquement le "x" des colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     dim Colonne as byte
    Colonne=Range("G14").value
    Range(Cells(2,Colonne),Cells(11,Colonne))
    attention de bien mettre "," entre les deux Cells et non pas ";" sinon cel ne fonctionne pas!

  5. #5
    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,

    ou avec Offset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ligne as Long
    ligne=Range("G14").Value
    range("B1:K1").offset(ligne-1).Select
    Pour enfoncer un peu plus le clou :-) les .select sont à éviter quand on peut, c'est à dire dans 99% des cas.
    eric

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2017
    Messages : 132
    Par défaut
    Bonjour,

    Première chose : sauf si absolument nécessaire, bannir les .Select et .Activate.

    Il y a plusieurs façons de faire ce que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ' exemple :
    Dim Ligne, Colonne As Integer
    ActiveSheet.Cells(Ligne, Colonne). Select 'une cellule de coordonnées (Ligne ; Colonne) est sélectionnée
    ActiveSheet.Range(ActiveSheet.Cells(1,1), ActiveSheet.Cells(Ligne, Colonne)).Select 'une plage allant de la cellule A1 à la cellule de coordonnées (Ligne ; Colonne) est sélectionnée
     
    ActiveSheet.Range("A" & Ligne).Select 'sélectionne la cellule de coordonnées (Ligne ; 1)
    ActiveSheet.Range(ActiveSheet.Range("A1"), ActiveSheet.Range("C" & Ligne)).Select 'sélectionne une plage allant de la cellule A1 à la cellule de coordonnées (Ligne ; 3)
    J'espère que cela t'aide. Je compléterai si besoin avec d'autres exemples. Je te suggère de lire la documentation MSDN également

  7. #7
    Membre confirmé
    Homme Profil pro
    Responsable de production
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de production
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Par défaut
    bonjour,
    vos messages m’interpelle;

    Citation Envoyé par Nagel Tha Voir le message

    Première chose : sauf si absolument nécessaire, bannir les .Select et .Activate.

    Il y a plusieurs façons de faire ce que tu veux.

    ActiveSheet.Range(ActiveSheet.Cells(1,1), ActiveSheet.Cells(Ligne, Colonne)).Select 'une plage allant de la cellule A1 à la cellule de coordonnées (Ligne ; Colonne) est sélectionnée
    j'ai l'impression que vous vous contredite; ne pas employer .Select et les solutions que vous proposez sont toutes avec des .Select
    ai-je loupé quelque chose, car personnellement je ne vois pas comment ne pas employer les .Select!
    merci de vos éclaircissements .

  8. #8
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Par défaut Au s'cours !
    Bonsoir, je m'incruste car je tourne en rond grave (du fait de ma méconnaissance dramatique de vba évidemment) : je n'arrive pas à sélectionner une plage de cellules (contigües et sur la même ligne), en fonction d'une cell active quelconque ; jusqu'ici j'utilisais un brave :
    r = ActiveCell.Row
    Range(Cells(r, 4), Cells(r, 48)).Select
    etc.
    mais là je me fais jeter ; mon "r" n'est pas/plus reconnu dans un petit projet tout bête (pourtant je ne crois pas avoir eu à le déclarer dans les précédentes macros bidouillées jusqu'ici)... Si quelqu'un a la bonté de palier à mon ignardise, qu'il en soit remercié au centuple...

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Peut-être que tu devrais spécifier le nom de la feuille

    With Sheets("Nom de la feuille")
    r = .ActiveCell.Row
    .Range(.Cells(r, 4), .Cells(r, 48)).Select
    End With

    À noter les points
    Aussi éviter les Select. Il y a tout plein d'exemples ici selon ce que tu veux faire sans faire de Select.

  10. #10
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Par défaut
    Citation Envoyé par parmi Voir le message
    Peut-être que tu devrais spécifier le nom de la feuille

    With Sheets("Nom de la feuille")
    r = .ActiveCell.Row
    .Range(.Cells(r, 4), .Cells(r, 48)).Select
    End With

    À noter les points
    Aussi éviter les Select. Il y a tout plein d'exemples ici selon ce que tu veux faire sans faire de Select.
    Merci ! Mais il coince toujours sur r =.ActiveCell.Row --> erreur de compilation, "variable non définie"...
    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
    Private Sub NewEventInput_Click()
     
    With Sheets("BaseTARG")
    r = .ActiveCell.Row
    .Range(.Cells(r, 4), .Cells(r, 48)).Select
     
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.14996795556505
            .PatternTintAndShade = 0
        End With
     
    Call gestion_FormBaseTARG.transferer_valeurs_FormBaseTARG
     
    Call gestion_FormBaseTARG.remplir_FormBaseTARG
     
    Sheets("BaseLeaderBoard").Activate
    Rows(6).Insert
     
    Sheets("BaseLeaderBoard").Activate
     
    Range("D6").Select
     
    ActiveCell = LaBoxDateSaisie.Value
    ActiveCell.Offset(0, 1) = ComboBoxSource.Value
    ActiveCell.Offset(0, 5) = boxdénom.Value
    ActiveCell.Offset(0, 15) = boxca.Value
    ActiveCell.Offset(0, 16) = BoxCodeTARG.Value
    ActiveCell.Offset(0, 17) = boxdénom.Value
    etc.

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

Discussions similaires

  1. Saut de ligne sur une plage de cellules
    Par Excel'air dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/07/2018, 09h10
  2. Réponses: 1
    Dernier message: 11/09/2014, 14h48
  3. [XL-2000] Supprimer ligne si cellule d'une colonne = 0, sur une plage de cellules
    Par audesara dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/05/2011, 16h16
  4. [XL-2007] Dimensions d'une plage de cellule ? (avec Range.)
    Par Kwick dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/03/2010, 08h57
  5. Réponses: 2
    Dernier message: 27/09/2006, 19h41

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