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 :

Définir une variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Par défaut Définir une variable
    Bonjour à tous ,

    j'ai un souci pour définir mon variable ,mon objectif c'est de définir une variable pour quil arrive à définir sur quel onglet la macro doit se positionner

    mes onglets sont nommé de cette facon CA1.CA2.CA3.CA4....CA10)

    donc je viens sur un onglet de suivi et je lui demande selon sur quel colonne (cellule ) il est positionné de pouvoir définir Y qui est la variable de numero des onglets CA sachant que les colonnes sur la feuille de suivi vont de 41 à 59 et et j'ai une colonne vide aprés chaque colonne donc j'avance à chaque fois par 2 colonnes (les numero de colonnes sont :41-43-45-47-49-51-53-55-57-59) et Y de 1 à 10; voilà une partie de ma macro:


    Sub ACT()

    Sheets("suivi").Unprotect


    For Each o In Sheets("suivi").Range("AO12:BK12")
    If o.Value = "CA Généré" Then
    o.Select
    x = o.Column
    Y=...


    Sheets("CA" & y).Range("B17:G46").EntireRow.Hidden = False
    Sheets("suivi").Range("D11").Copy
    .
    .
    .

    End If

    Next o

    end sub


    merci d'avance .

  2. #2
    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 AMY974 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    o.Select
    x = o.Column
    Y=...
     
    Sheets("CA" & y).Range("B17:G46").EntireRow.Hidden = False
    Tout d'abord, ton o.Select est inutile.

    Ensuite, c'est la variable Y qui est utilisée dans l'indexation du Sheets mais (pour une raison étrange), tu as coupée ton code juste au moment où elle est renseignée.
    Sans savoir ce que tu mets dedans, il possible de savoir pourquoi elle ne fonctionne pas.

    Il y a aussi autre chose que je trouve étrange : le premier "Y" est en majuscule alors que celui qui est dans l'index du Sheets est en minuscule.
    Normalement, l'éditeur VBE ne laisse pas passer ça, ce qui semble indiqué que le code que tu présentes a été modifié par rapport à celui que tu as dans le VBE.

    Dernier détail : déclare tes variables avec leur type.

  3. #3
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Par défaut
    en fait je coupe mon code , mon probléme c'est de définir "y " j'arrive pas à trouver une corrélation entre x et y ou autre chose pour définir y donc j'ai fait le code pour l'instant comme ci dessous :

    mon code fonctionne pour le moment mais je trouve ce que j'ai fait est lent et trés débutant voilà .


    If o.Value = "CA Généré" Then
    o.Select
    x = o.Column

    If x = 41 Then
    y = 1
    End If
    If x = 43 Then
    y = 2
    End If
    If x = 45 Then
    y = 3
    End If
    If x = 47 Then
    y = 4
    End If
    If x = 49 Then
    y = 5
    End If
    If x = 51 Then
    y = 6
    End If
    If x = 53 Then
    y = 7
    End If
    If x = 55 Then
    y = 8
    End If
    If x = 57 Then
    y = 9
    End If
    If x = 59 Then
    y = 10
    End If
    If x = 61 Then
    y = 11
    End If
    If x = 63 Then
    y = 12
    End If

    Sheets("CA" & y).Range("B17:G46").EntireRow.Hidden = False

    merci

  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
    Déjà, tu pourrais commencer par remplacer tes If Then par un Select Case.
    https://docs.microsoft.com/fr-fr/off...case-statement
    N'oublie pas de prévoir le cas "Case Else" si tu veux faire du travail propre.

  5. #5
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Citation Envoyé par AMY974 Voir le message
    mon probléme c'est de définir "y " j'arrive pas à trouver une corrélation entre x et y ou autre chose pour définir y
    Voici donc, deux solutions te permettant de définir y :

    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
    Dim MesColonnes, X As Integer, Y As Integer, i As Integer
     
       MesColonnes = Array(41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63)
       X = 49
     
       'première solution : la boucle
       For i = 0 To 11
          If MesColonnes(i) = X Then Y = i + 1
       Next
       MsgBox Y
     
       'seconde solution : Match
       On Error Resume Next
       Y = Application.WorksheetFunction.Match(X, MesColonnes, 0)
       If Err.Number > 0 Then MsgBox "Colonne erronée"
       On Error GoTo 0
       MsgBox Y
    EDIT :
    Une troisième en clin d'oeil au billet de Pierre Fauconnier sur les boucles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Do
          If MesColonnes(i) = X Then Y = i + 1
          i = i + 1
       Loop While Y = 0 And i <= UBound(MesColonnes)
    EDIT 2 :
    Ou, tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Y = Int((X - 40) / 2) + 1

  6. #6
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Par défaut
    Merci à tous ;

    j'ai opté pour la solution la plus simple et c'est efficace celle de Franck P. (Edit 2).

    Bonne journée à tous.

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

Discussions similaires

  1. [WIN2003]définir une variable d'environnement dans un batch
    Par creezeer dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 28/08/2007, 11h25
  2. [PHP-JS] Définir une variable dans le htaccess
    Par Ikaly dans le forum Langage
    Réponses: 2
    Dernier message: 09/03/2007, 18h09
  3. Réponses: 2
    Dernier message: 29/06/2006, 13h58
  4. Réponses: 3
    Dernier message: 09/04/2006, 09h10
  5. [FTP] Définir une variable en tant que constante
    Par Anduriel dans le forum Langage
    Réponses: 2
    Dernier message: 15/01/2006, 11h39

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