Excel Macros aide

Résolu
CedricG62 Messages postés 40 Statut Membre -  
CedricG62 Messages postés 40 Statut Membre -
Bonsoir,

Alors voilà je débute dans les macros avec Excel et je n'arrive pas à faire tout ce que je veux voici mon début de code :

Sub Suivant()
' Suivant Macro
Columns("A:Q").Select
Selection.Copy
Range("R1").Select
ActiveSheet.Paste
Range("R2:AA100000").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("AD3:AG3").Select
Selection.ClearContents
Range("AD6:AG6").Select
Selection.ClearContents
Range("AD9:AG10").Select
Selection.ClearContents
Range("AD13:AG13").Select
Selection.ClearContents
Range("AE16:AF16").Select
Selection.ClearContents
Columns("A:Q").Select
Selection.EntireColumn.Hidden = True
Range("R2").Select
End Sub

Ce code me permet de cacher les colonnes de A à Q et de les dupliquer sur les colonnes suivantes ; mais ce que je veux c'est que si je réexécute la macro, ce soit les colonnes R à AH, ensuite AI à AY et ainsi de suite... (la macro décale de 18 colonnes à chaque utilisation)

J'ai fais une seconde macro pour "réinitialiser" la feuille :

Sub Reinitialiser()
' Reinitialiser Macro
Columns("A:R").Select
Selection.EntireColumn.Hidden = False
Columns("R:XFD").Select
Selection.Delete Shift:=xlToLeft
Range("A2:J1048576").Select
Selection.ClearContents
Range("M3:P3").Select
Selection.ClearContents
Range("M6:P6").Select
Selection.ClearContents
Range("M9:P10").Select
Selection.ClearContents
Range("M13:P13").Select
Selection.ClearContents
Range("M16:P16").Select
Selection.ClearContents
Range("A2").Select
End Sub

Je voulais également que ces deux macros soient exécutable via 2 bouton (qui se dupliquent quand on active la première macro) mais je me perds au moment où il faut intégrer les macros dans les boutons...

Voilà voilà merci de votre aide et si vous avez des remarques n'hésitez pas je suis là pour apprendre :)

7 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Ce code me permet de cacher les colonnes de A à Q et de les dupliquer sur les colonnes suivantes
    Oui, mais votre code efface les colonnes R:AA en dehors de la premiere "ligne"!!

    Columns("A:Q").Select
        Selection.Copy
        Range("R1").Select
        ActiveSheet.Paste
        Range("R2:AA100000").Select
        Application.CutCopyMode = False
        Selection.ClearContents
    0
    1. CedricG62 Messages postés 40 Statut Membre
       
      Bonjour,

      Oui en effet car je copie un tableau et je viens le vider des données et on vient y en rentrer de nouvelles
      0
  2. CedricG62 Messages postés 40 Statut Membre
     
    J'avais pensé à mettre en place une sorte de compteur mais je ne sais pas comment le mettre en pratique :
    Dès qu'on utilise la macro "suivant", ajouter 1 au compteur
    Le décalage des colonnes = A:Q + compteur x 18
    Et le compteur revient à 0 quand on utilise la macro "réinitialiser"
    0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    J'avais pensé à mettre en place
    Oui, dans une cellule

    Le décalage des colonnes = A:Q + compteur x 18
    Oui, mais le calcul des colonnes en lettre est un peu plus complexe que vous pensez

    exemple pour votre premiere selection A:Q + compteur x 18

    Sub test()
        cel_Tour = 0         'compteur de tour a remplacer par valeur d'une cellule qui sera incrementee
        ColDep = 17 * cel_Tour + 1
        LettreD = Split(Cells(1, ColDep).Address, "$")(1)
        ColFin = ColDep * cel_Tour + 17
        LettreF = Split(Cells(1, ColFin).Address, "$")(1)
        Columns(LettreD & ":" & LettreF).Select
    End Sub


    Le meme principe pour les autres colonnes: R, AA, AH

    J'ai fait avec Columns mais avec Range et lettre colonne c'est la meme chose
    "Plus simple" avec ceci
    Range(Cells(1, x), Cells(1, x2)).EntireColumn.Select
    0
  4. CedricG62 Messages postés 40 Statut Membre
     
    J'ai compris globalement votre formule mais je ne vois pas comment l'intégrer... :(

    Sub Suivant()
    ' Suivant Macro
    Columns("A:Q").Select
    Selection.Copy
    cel_Tour = 0
    ColDep = 17 * cel_Tour + 1
    Range(Cells(1, x), Cells(1, x2)).EntireColumn.Select
    ActiveSheet.Paste
    Range("R2:AA100000").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("AD3:AG3").Select
    Selection.ClearContents
    Range("AD6:AG6").Select
    Selection.ClearContents
    Range("AD9:AG10").Select
    Selection.ClearContents
    Range("AD13:AG13").Select
    Selection.ClearContents
    Range("AE16:AF16").Select
    Selection.ClearContents
    Columns("A:Q").Select
    Selection.EntireColumn.Hidden = True
    Range(Cells(1, ColDep)).Select
    MsgBox cel_Tour
    End Sub

    Le message à la fin ne m'affiche pas 1 et ne se refait pas quand je refais la commande :/
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Le message à la fin ne m'affiche pas 1
      Relisez ce que j'ai ecrit pour cel_Tour

      Range(Cells(1, x), Cells(1, x2)).EntireColumn.Select

      x et x2 sont a calculer en partant des numeros de colonne de depart
      Pour A:Q, les formules sont dans l'exemple que j'ai ecrit : ColDep et ColFin
      Faire de meme pour R, AA et AH
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. CedricG62 Messages postés 40 Statut Membre
     
    Bonjour, encore moi ahah

    Je n'avais pas eu le temps de retravaillé dessus depuis Lundi. Je vais finalement tout modifier et passer en ligne et non plus en colonne (pour une question pratique derrière avec les calculs) :

    Range("M4:P8").Select
    Selection.Copy
    Dim DLig As Long
    x = Range("A3").End(xlDown).Row + 4 'là je viens chercher la dernière ligne vide +1 (mes cellules A1 et A2
    ActiveSheet.Paste sont vides d'où le +4)
    Rows("4:x").Select
    Range("Ax").Activate
    Selection.EntireRow.Hidden = True
    Range("Ox+1").Select
    Application.CutCopyMode = False
    Range("Ox+1,Mx+2:Nx+3,Ox+4:Px+4,Mx+5:Nx+5").Select
    Range("Mx+5").Activate
    Selection.ClearContents

    Donc théoriquement ça fonctionnerait pour 1 répétition mais pas pour 2 car il viendrait reprendre le même x car je veux sauter 1 ligne à chaque fois, une idée pour régler ça ?
    Si au lieu de partir de A3 pour faire ma recherche je pars de A1000000 par exemple et que je fasse :
    x = Range("A1000000").End(xlUp).Row - 2
    ça fonctionnerait non et je n'aurais plus le problème de saut de ligne ?
    0
  7. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    théoriquement ça fonctionnerait pour 1 répétition
    Impossible, les lignes de ce genre, avec les variables dans les "" provoquent des erreurs
    ex:
    Rows("4:x").Select

    Comprends pas trop, vous parlez de lignes et vous masquez des colonnes!

    Pouvez mettre un fichier exemple avec ce qu'il y a au depart sur une feuille et sur une autre feuille ce que vous voulez

    Pour transmettre un fichier,
    Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
    il faut passer par un site de pièce jointe tel que cjoint.com

    Allez sur ce site : https://www.cjoint.com/
    Clic sur parcourir,
    Cherche ton fichier,
    clic sur ouvrir,
    Clic sur "Créer le lien cjoint",
    Copier le lien,
    Revenir ici le coller dans une réponse...
    0
  8. CedricG62 Messages postés 40 Statut Membre
     
    Voici mon fichier "public"

    https://www.cjoint.com/c/LEmiHxbdbWk

    (les macros sont pour la feuille SW)
    Chaque ligne grisé est la suite de l'utilisation de la macro "suivant" : on vient recréer le petit tableau à droite pour copier coller des données et on saute une ligne pour différencier des copier coller précédents

    F1 c'est le ce que je travail pour obtenir quelque chose de similaire à Ex_F1 (j'y ai encore quelques erreurs à régler)
    CC c'est un exemple de copier coller que l'on peut rentrer dans SW pour faire des tests
    Formules j'y ai mis les listes et quelques autres choses
    0