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 :

Insertion de cellule et décalage des controls


Sujet :

Macros et VBA Excel

  1. #1
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut Insertion de cellule et décalage des controls
    Bonjour,
    Je pinailles depuis quelques temps sur un problème assez typique : ce que j'ai testé en enregistreur ne se comporte pas de la même façon que quand j'exécute la dite macro.
    J'ai une liste avec en première colonne une checkbox, quand je fais une insertion de cellule manuelle, la CB bouge, quand je fais la même action en VBA, le control ne bouge pas. J'ai pas vraiment envie de me casser la tête à faire bouger la CB à part, parce qu'elle ne sera pas évidente à récupérer (trouver toutes les CB à cette ligne et en dessous ... pas simple à moins de pouvoir retrouver une CB à partir de ça cellule cible ?) Alors, est-ce que j'ai loupé un truc, un paramètre, pour faire bouger le control en même temps que le reste ?

    en gros (j'ai pas le code sous les yeux, l'ordi internet n'est pas le même que mon ordi de travail, ils ne sont même pas dans la même pièce), j'ai :
    blablabla.insert xldown xlFormatFromLeftOrAbove

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 970
    Points : 28 989
    Points
    28 989
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suis étonné de ce que tu décris mais n'ayant pas ton code sous les yeux, je ne peux pas affirmer non plus que ce n'est pas possible.
    En tous les cas manuellement ou en VBA avec le code ci-dessous, un contrôle ActiveX ou formulaire placé par exemple au-dessus de la cellule B2 se déplacera.
    Sauf si on modifie la propriété de positionnement de l'objet.
    1) Clic droit sur le contrôle et sélectionner Format de contrôle... dans le menu contextuel.
    2) Sélection de l'onglet [Propriétés] dans la boîte de dialogue Format de contrôle et sélectionner l'option Ne pas déplacer ou dimensionner avec les cellules
    Le contrôle ne bougera plus.

  3. #3
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Bonjour, merci de venir t'intéresser à mon cas

    C'est une insertion de ligne, mais j'imagine que ça ne change pas grand chose ^^
    Je vais voir si quand je crée mon objet checkbox par code, la valeur de l'option dont tu m'as parlé est sur "ne pas déplacer", si c'est le cas, ça règle tout. Mais j'ai pas bon espoir, j'ai déjà essayé d'insérer manuellement une ligne sur une ligne comportant une CB mise par macro, et ça marchait.

    C'est un objet de type checkbox, au début je le faisais avec OleObjects mais maintenant j'ai simplifié en créant un objet comme ceci :
    Dim cb as checkbox
    cb = worksheet.add(...)

    J'ai pas cherché (encore une fois parce que j'ai un accès limité au net) mais je pense que c'est de l'activeX.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 970
    Points : 28 989
    Points
    28 989
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'avais pas compris que la création du contrôle était faite par le code VBA.
    Dans ce cas, la propriété Placement de l'objet Shape doit avoir comme la valeur de la constante xlFreeFloating
    Exemple pour l'ensemble des contrôles (Formulaire et ActiveX) de la feuille active.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim sh As Shape
     For Each sh In ActiveSheet.Shapes
      sh.Placement = xlFreeFloating
     Next

  5. #5
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    J'ai tenté le coup mais ça ne marche pas.
    Voici le code de création du control :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim cb As CheckBox
            Set cb = .CheckBoxes.Add(Left:=.Cells(Ligne, 1).Left, Top:=.Cells(Ligne, 1).Top, Height:=10, Width:=10)
            cb.Name = "CB_" & ID
            ID = ID + 1
            cb.Text = ""
            cb.LinkedCell = .Cells(Ligne, 1).Address
            cb.Value = False
            cb.Placement = xlFreeFloating
    Et l'insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets(1).Cells(i, 2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove



    ...
    J'ai testé en enlevant la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets(1).Cells(i, 2).Insert
    Et ça marche ...
    Je pense qu'il fallait bien changer le placement et insert ensuite, mais avec les valeurs par défaut. :/
    Merci bien ^^'

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 970
    Points : 28 989
    Points
    28 989
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avec des contrôles placés sur plusieurs lignes des colonnes A, B et C et cette ligne de code pas de problèmes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil2.Range("A4:C5").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Je n'ai pas encore testé avec Cells mais je pense que ce sera pareil

    [EDIT]
    Je confirme que cela fonctionne aussi avec Cells, les contrôles ne bougent pas et je n'ai pas d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With Feuil2
     .Range(.Cells(4, 1), .Cells(4, 3)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
     End With

  7. #7
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Merci pour ton aide, en effet sauf erreur, ça marche très bien sur ce que j'ai testé ^^
    Je mets le sujet en résolu

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

Discussions similaires

  1. Gestion de décalage des cellules
    Par x109488 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/12/2012, 00h04
  2. Boucle pour controler valeurs de cellules et faire des actions ensuite
    Par Le Rom dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2010, 13h43
  3. Erreur 800a9cf1 lors de l'insertion des controles dans un userform
    Par lahroussi dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/01/2010, 10h40
  4. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 17h29

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