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 :

VBA boucle : automatisation de valeur de cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 8
    Par défaut VBA boucle : automatisation de valeur de cellules
    Bonjour à tous, j’ai un souci pour automatiser un code.

    J’ai un classeur Excel qui possède deux feuilles (onglets) : « JANVIER » et « Récap FY ».

    Sur la feuille « JANVIER », je souhaite que la cellule F22 soit égale à la cellule A3 de la feuille « Récap FY ». Puis J22 de la feuille « JANVIER » égale à A4 de la feuille « Récap FY ». Ainsi de suite.

    Donc à chaque fois, les cellules de la ligne F, de la feuille « JANVIER » se décalent de 4 colonnes vers la droite. Cette action commence en F22 et se termine en TJ22.

    Les cellules de la ligne 22 de la feuille « JANVIER », prennent la valeur des cellules de la colonne A de la feuille « Récap FY », à partir de A3 jusqu’à A145.
    Donc à chaque fois, les cellules de la colonne A, de la feuille « Récap FY » se décalent d’1 seule ligne vers le bas

    Voici le code que j’ai réalisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub proprietes()
     
    Range("f22").Value = Sheets("Récap FY").Range("a3")
    Range("j22").Value = Sheets("Récap FY").Range("a4")
    Range("n22").Value = Sheets("Récap FY").Range("a5")
    Range("r22").Value = Sheets("Récap FY").Range("a6")
     
       End Sub
    Mon code fonctionne mais le but du VBA étant d’automatiser les actions, il est ridicule de rédiger un code si laborieux. J’ai notamment rédigé d’autres codes avec des boucles mais aucunes ne fonctionnent. Si quelqu’un peut m’aider, ce sera avec grand plaisir.

    Je vous remercie d’avance et vous souhaite une bonne journée.

    Jonathan

  2. #2
    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,
    tu cherches un truc du genre ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub proprietes()
    coln = 2    ' =b comme je vais ajouter 4 ce qui fera 6 = f
    lign = 3    ' pas utile juste pour la compréhension
     
    For lign = 3 To 6
        coln = coln + 4
         Cells(22, coln).Value = Sheets("Récap FY").Cells(lign, 1).Value
    Next
     End Sub
    tu dis

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 8
    Par défaut
    Re,

    Merci infiniment pour vos réponses,


    Menhir, le copier / coller transposé ne me convient pas car mes valeurs évoulent (c'est ma faute, j'ai oublié de le préciser).

    Igloobel, c'est exactement le code qui me fallait.

    Par contre j'ai besoin d'une petite précision.

    Mes cellules F de la feuille "JANVIER" prennent les valeurs des cellules de la colonne A de la feuille "Récap FY" à partir de la ligne 3 jusqu'à la ligne 134. Cependant si je souhaite que les cellules F ne prennent pas la valeur de la ligne 28 de la colonne A de la feuille "Récap FY"., comment faire ?

  4. #4
    Expert éminent 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
    Par défaut
    Citation Envoyé par JONATHANDJ Voir le message
    Menhir, le copier / coller transposé ne me convient pas car mes valeurs évoulent (c'est ma faute, j'ai oublié de le préciser).
    C'est pour ça que je t'ai indiqué également une autre possibilité en utilisant des fonctions.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Novembre 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2015
    Messages : 21
    Par défaut
    Bonjour,

    Voici une possibilité pour ne pas prendre en compte la ligne 28

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub proprietes()
    coln = 2    ' =b comme je vais ajouter 4 ce qui fera 6 = f
    lign = 3    ' pas utile juste pour la compréhension
     
    For lign = 3 To 134
        if lign <>28 then   'on ne recopie pas la case A28
            coln = coln + 4
            Cells(22, coln).Value = Sheets("Récap FY").Cells(lign, 1).Value
        end If
    Next
    End Sub
    Par contre avec une macro tu devras la relancer pour faire la copie (à moins d'activer ta macro dès que ta feuille change), alors qu'avec la formule de Menhir la copie se fait tout le temps.

    Après vérification il me semble que les colonnes et les lignes sont inversées dans la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     =DECALER(Récap FY!$A$3;(colonne(F22)-colonne($F22))/4;0)

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 8
    Par défaut
    Super Fraaz,

    C'est bien ça la formule, ça fonctionne.

    Menhir je t'avoue que la macro me convient et je n'ai pas encore essayé ta fonction.

    Merci de vos réponses, ça me dépanne vraiment.

    En fait j'ai juste suivi une formation VBA en ligne mais assez courte, de ce fait j'ai encore beaucoup de chose à apprendre.

    J'ai un autre souci:

    Dans ma feuille "JANVIER", à la ligne 22, il y a des cellules qui sont vides entre la colonne F à TE. J'aimerais créer une formule VBA qui les groupe automatiquement. Comment faire ?

    Voici la formule que j'ai crée :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub variables()
     
     If Not IsNumeric(Range("F22:TE22")) Then
     
     Range("F22:TE22").EntireColumn.group
     
     
    End If
     
    End Sub


    Cependant elle ne fonctionne pas car elle groupe toute la sélection que je lui ai indiqué, alors que je veux qu'elle groupe uniquement les cellules de la ligne 22 entre la colonne F et TE qui sont vides.

  7. #7
    Expert éminent 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
    Par défaut
    Pas besoin de macro.

    Outre le fait qu'on peut faire ça en 5 clics avec un copier/coller spécial avec transposé.
    Tu peux aussi faire ça avec des formules.

    Tu écris en F22 de ton onglet JANVIER la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(Récap FY!$A$3;0;(colonne(F22)-colonne($F22))/4)
    Tu copies cette cellule en J22, N22, R22, etc.

Discussions similaires

  1. [VBA] Boucle "For" avec valeurs spécifiques
    Par NiKoTiNe dans le forum VBA Access
    Réponses: 13
    Dernier message: 28/03/2025, 09h10
  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, 12h43
  3. [vba-e] Date et valeur de cellule
    Par max_c dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/09/2006, 18h02
  4. [VBA-E]automatiser "clic droit, format cellule, texte"
    Par jmlcea dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/04/2006, 16h21
  5. [VBA]Affectation d'une valeur à une cellule par une fonction
    Par lallougri dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/02/2006, 14h24

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