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 :

Réutiliser variable mise dans une cellule pour soustraction [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut Réutiliser variable mise dans une cellule pour soustraction
    Bonjour,

    Après plusieurs essais je cherche toujours une solution du comment réutiliser mes variables si je les stock dans une cellule ?

    en effet je stock toutes les valeurs de lignes blanches dans ma variable cette variable est a chaque fois copiée dans une cellule et je voudrais réutiliser cette valeur pour soustraire la suivante avec la premiere.

    pour faire stepval = valA2 - valA1

    j'ai écris ceci mais je bloque sur comment introduire les valeur dans mes variables , peut être y a t il une subtilité ?

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
       Sub def()
     
    Dim line As Range
    Dim sheet As Worksheet
    Dim row As Long
    Dim stepVal As Long
    Dim val1, val2 As Long
     
    row = 0
     
    Set sheet = Sheet1
    Sheet2.Cells.Clear
    t = 1
    bot = 0
     
    For bot = 1 To Sheet1.UsedRange.Rows.Count Step 2
     
        Set line = sheet.Rows(bot)
        If WorksheetFunction.CountA(line) = 0 Then
            'MsgBox "line BOT" & bot & " is empty"
     
            Sheet2.Cells(t, 1).Value = bot
     
     
            t = t + 1
     
            val1 = Sheet2.Cells(t + 1, 1).Value
            val2 = Sheet2.Cells(t, 1).Value
     
               'val1 = Sheet(Sheet2).Range("A1 + 1").Select
              'val2 = Sheet(Sheet2).Range("A1").Select
     
     
              stepVal = val1 - val2
     
        End If
     
     
     
       Sheet2.Cells(t, 2).Value = stepVal
        Next bot
     
     
        End Sub

    Merci d'avance pour votre aide

  2. #2
    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
    Bonjour Alex, bonjour le forum,

    Je ne comprends pas grand chose à ton code !?...
    Tu parles de stocker toutes les variables dans des cellules mais ton code ne fait pas cela. Il récupère dans les variables val1 et val2 les valeurs respectivement des cellules Sheet2.Cells(t + 1, 1) et Sheet2.Cells(t, 1) et stocke dans la cellule Sheet2.Cells(t, 2) la variable stepVal. Cela a près avoir incrémenter t avec t = t + 1. Est-ce normal ?
    Pourrais-tu être plus clair dans les explications de ta macro.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut
    Bonjour Thautheme,

    Je vais essayer d eter plus clair , En input j utilise mon premier classeur qui contient plusieurs définition de flux générallement codées sur une 40 aines de lignes malheureusement en fonction , des attributs le nombre de ligne peut changer , c'est pourquoi je teste le fichier et extrait chaque numero de ligne qui est vide

    donc dans mon sheet 2 j ai quelque chose du genre dans ma colonnes A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    43
    87
    131
    175
    219
    263
    307
    351
    395
    ce que je veux faire c est compter le nombre de lignes que la définition contient en soustrayant la 2 eme valeur a la premiere donc ici la premiere definition contient 44 Lignes

    et je voudrais m en servir comme variable pour ma boucle de trsposition pour le remettre en format ligne transformable en CSV

    je ne sais pas si ja i été plus clair mais si il faut je peux partager un exemple d input

    merci deja pour ta réaction

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut
    En fait je ne comprends tout simplement pas pourquoi une fois mon sheet rempli je n'arrive pas à réutiliser la valeur de mes cellules,


    et val1 = Sheet2.Cells(A & i + 1).Value me semble la façon adéquate d aller rechercher l'info


    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
    Sub sous()
     
    Dim i As Long
    Dim fin As Long
    Dim val1 As Long
    Dim val2 As Long
    Dim col As Long
    Dim stepVal As Long
     
    fin = Range("A1")
     
     
    For i = 1 To fin
     
        val1 = Sheet2.Cells(A & i + 1).Value
        val2 = Sheet2.Cells(A & i).Value
     
        stepVal = val1 - val2
     
        MsgBox "StepVal" & stepVal & " "
     
        Sheet2.Cells(c & i).Value = stepVal
     
    Next i

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

    Tu confonds les syntaxes Range("A" & 1) et Cells(1, "A") et dans les deux cas la colonne A doit avoir des guillemets...
    Je n'ai toujours pas compris ton code mais voici le second corrigé, si ça peut t'aider :

    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
    Sub sous()
    Dim fin As Long
    Dim i As Long
    Dim val1 As Long
    Dim val2 As Long
    Dim stepVal As Long
     
    fin = Range("A1") 'si A1 contient un nombre entier sinon : fin = Sheet2.Cells(Application.Rows.Count,"A").end(xlUp).Row
    For i = 1 To fin
        val1 = Sheet2.Cells(i + 1, "A").Value
        val2 = Sheet2.Cells(i, "A").Value
        stepVal = val1 - val2
        MsgBox "StepVal" & stepVal & " "
        Sheet2.Cells(i, "C").Value = stepVal
    Next i
    End Sub

  6. #6
    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 à tous,

    Je me suis permis de corrigé ton code qui devrai fonctionner maintenant à condition d'ouvrir la bonne feuille avant

    j'ai saisi tes valeurs données à titre d'exemple de ton post (N°3) dans une feuille en colonne A

    Perso je n’aime pas les lettres représentant les colonnes avec l'objet cells. Normalement la syntaxe est : Cells(N°ligne, N°de colonne)
    cet objet est fait pour passer d'une colonne à une autre sans peine car avec les lettres c'est franchement pas simple
    Et dans l'aide en ligne c'est pareil

    Vraiment VBA est permissif

    Je te laisse mettre le paramétrage des feuilles en automatique



    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
    Sub sous()
     
        Dim i As Long
        Dim Der_Lign As Long
        Dim val1 As Long
        Dim val2 As Long
        Dim col As Long
        Dim stepVal As Long
     
        Der_Lign = [A2].End(xlDown).Row
     
        For i = 1 To Der_Lign
     
            val1 = Cells(i + 1, 1).Value
            val2 = Cells(i, 1).Value
     
            stepVal = val1 - val2
     
            MsgBox "StepVal : " & stepVal & " "
            Cells(i, 3).Value = stepVal
     
        Next i
     
    End Sub

  7. #7
    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
    Bonjour le fil, bonjour le forum,

    Citation Envoyé par Igloobel Voir le message
    Perso je n’aime pas les lettres représentant les colonnes avec l'objet cells. Normalement la syntaxe est : Cells(N°ligne, N°de colonne)
    cet objet est fait pour passer d'une colonne à une autre sans peine car avec les lettres c'est franchement pas simple
    Moi non plus !... Je "plussoie" ta remarque mais c'est bien pratique pour cibler une cellule sans avoir à passer par l'affichage L1C1 (sinon je compte encore sur mes doigts). En revanche, quand j'utilise la colonne dans une variable je garde bien évidement sa valeur en chiffre...

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut
    merci a vous tous

    j ai fini par changer ma methode voici une solution qui fonctionne

    Avec ma premiere macro je defini le début et la fin de chaque bloc dans mon sheet 1


    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
    Sub test()
     
     
       Dim line As Range
    Dim sheet As Worksheet
     Dim row As Long
     Dim ligne As Long
     Dim t, p, n  As Long
     Dim col As Long
     col = 4
     
    p = 1
     
    Set sheet = Sheet1
    Sheet2.Cells.Clear
     
    For i = 1 To Sheet1.Cells(Application.Rows.Count, col).End(xlUp).row
     
     
    If Sheet1.Cells(i, "D").Value <> "" Then
    Sheet2.Cells(p, "A").Value = i
    Do
    i = i + 1
    Loop While Sheet1.Cells(i, "D").Value <> ""
    Sheet2.Cells(p, "B").Value = i - 1
               p = p + 1
     End If
      Next i
    End Sub

    Avec la 2 eme je reecris les infos qui se trouvent dans les intervalles défini par la macro 1 dans le sheet3 sous forme de lignes

    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
     
     Sub defi()
    Dim col As Long
    Dim x As Long
    Dim test
     
    x = 1
    Sheet3.Cells.Clear
     
    Do
    debut = Sheet2.Cells(x, "A").Value
    fin = Sheet2.Cells(x, "B").Value
    col = 1
     
    For Y = debut To fin
     
     
    Sheet3.Cells(x, col).Value = Sheet1.Cells(Y, 4).Value
     
     
    col = col + 1
     
     
    Next Y
    x = x + 1
    Loop While Sheet2.Cells(x, "A").Value <> 0
     End Sub

    Bref un tout grand merci pour votre temps ca m en a fait gagner énormément


    PS: Désolé j'ai encore laissé les colones en lettre :/

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

Discussions similaires

  1. [AC-2010] Récupérer une donnée dans une cellule pour une variable
    Par zooffy dans le forum VBA Access
    Réponses: 5
    Dernier message: 27/06/2017, 16h58
  2. [XL-2007] Macro et URL variable contenue dans une cellule
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/09/2013, 17h36
  3. [Toutes versions] Que mettre dans une cellule pour que estvide soit vrai
    Par jack-ft dans le forum Excel
    Réponses: 6
    Dernier message: 04/09/2012, 05h53
  4. [XL-2003] Problème pour renommer un fichier à partir d'une variable contenu dans une cellule
    Par the-geut dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/05/2010, 11h43
  5. Réponses: 3
    Dernier message: 01/12/2008, 17h20

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