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 :

chercher une condition d'un "if" dans une cellules excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Etudiant ingé
    Inscrit en
    Septembre 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Etudiant ingé

    Informations forums :
    Inscription : Septembre 2019
    Messages : 37
    Par défaut chercher une condition d'un "if" dans une cellules excel
    Bien le bonjour,

    J'ai créé une petit macro tout mimi qui me permet de faire un copier coller tout en respectant une condition.

    Dans ce cas là la macro copie-collera tout les cellules qui n'auront pas la valeurs 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
     
     
    Dim x As Integer
     
    Sub copi_col()
     
    x = 7
     
    initia
     
    While x < 961
     
        If wspilot.Cells(x, 39) = 1 Then
            x = x + 1
                Else
                wspilot.Cells(x, 13) = wspilot.Cells(x, 39)
                x = x + 1
        End If
    Wend
     
     
     
    End Sub
    (petite précision le programme "initia" permet de déclarer tout un tas de variable utilisé dans de nombreux autre code sur le même fichier excel. Elles ne sont donc pas tous utile.)
    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
    Public xL, nbL, xC, nbC As Integer
    Public pilot, prix As String
    Public wspilot, wsprix, wscode As Worksheet
     
    Public Sub initia()
     
     
    Set wscode = Worksheets("données code")         ' ici on déclara (avec la ligne 1) les différents nom de pages. parce que "Worksheets("historique des prix")" c'est long à taper donc voilà.
     
    pilot = wscode.Range("C15")                     ' par contre le nom du pilots risque de changer.
    Set wspilot = Worksheets(pilot)                 ' on va donc sauvegarder son nom dans la feuille de données pour pouvoir la modifier facilement.
     
    prix = wscode.Range("C16")                      ' idem
    Set wsprix = Worksheets(prix)
     
        nbL = wscode.Range("H4").Value              ' et ici on chope les valeurs qu'on aura besoin pour la suite
        xL = wscode.Range("K4").Value               '
        nbC = wscode.Range("J4").Value              '
        xC = wscode.Range("K5").Value               '
     
     
    End Sub
    l'idée et de rendre le code plus polyvalent et de chercher la condition d’exécution ou de non exécution dans une cellules excel. par exemple en changeant cette dit cellules lui dire que cette fois il copie-collera que tout les cellules ou il trouvera un X.

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Comme ceci peut-être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub copi_col()
        Application.ScreenUpdating = False
        initia
        For x = 7 To 961
            If wspilot.Cells(x, 39) <> 1 Then wspilot.Cells(x, 13) = wspilot.Cells(x, 39)
        Next x
    End Sub
    Cdlt

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant ingé
    Inscrit en
    Septembre 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Etudiant ingé

    Informations forums :
    Inscription : Septembre 2019
    Messages : 37
    Par défaut
    Salut Artur083,

    merci pour la réponse

    Je ne connais pas les propriété de "Application.ScreenUpdating" Et google n'est pas des plus claire avec moi... tu peux m'expliquer un peux comme il fonction?

    d'ailleurs je vois que tu utilise "for x=7 to 951". cette manip est plus optimisé que le "while"?

    cordialement

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Concernant "Application.ScreenUpdating", pas besoin d'aller sur Google, simplement se positionner sur "ScreenUpdating" et faire F1 pour obtenir l'aide VBA excel, Tout est dit avec exemple à l'appui.
    Concernant le "Do While" et le "For x= ", pour savoir quel est le plus rapide, le mieux est encore de mesurer le temps que dure chaque exécution.
    Pour cela, déclencher un timer au début de la boucle et un autre à la fin de la procédure et faire la soustraction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub copi_col()
        Application.ScreenUpdating = False
        initia
        Deb = Timer
        For x = 7 To 961
            If wspilot.Cells(x, 39) <> 1 Then wspilot.Cells(x, 13) = wspilot.Cells(x, 39)
        Next x
        MsgBox = Timer - Deb & "Sec"
    End Sub
    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
    Dim x As Integer 
    Sub copi_col()
        x = 7
        initia
        Deb = Timer
        While x < 961
            If wspilot.Cells(x, 39) = 1 Then
                x = x + 1
                    Else
                    wspilot.Cells(x, 13) = wspilot.Cells(x, 39)
                    x = x + 1
            End If
        Wend
        MsgBox = Timer - Deb & "Sec"
    End Sub
    Faites les essais avec les 2 procédures

    Mais déjà, on peut constater que dans la boucle avec Do While l'incrémentation nécessite 2 opérations (x=x+1) alors que ces 2 lignes sont absentes avec "For".
    Revenez nous faire part du résultat de vos essais.

    Cdlt

  5. #5
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour #Arturo83 , pour le cas ou FireApple serait sur Mac (sur Mac, la touche F1 diminue la luminosité de l'écran):
    Application.ScreenUpdating = False empêche le rafraichissement de l'écran. Celui-ci rend désagréable un possible mouvement de l'écran et peut aussi ralentir considérablement la vitesse d'exécution de la procédure en cours. A la fin de celle-ci on place: Application.ScreenUpdating = True
    Cordialement

  6. #6
    Membre averti
    Homme Profil pro
    Etudiant ingé
    Inscrit en
    Septembre 2019
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Etudiant ingé

    Informations forums :
    Inscription : Septembre 2019
    Messages : 37
    Par défaut
    merci transitoire pour cette réponse claire et précise ^^"

    j'ai maintenant une nouvelle formule à ajouter à mon dico!

    j'ai faits deux trois tests avec le Timer pour voir les différences entre le FOR et le WHILE (du coup je n'ai pas mis l' Application.ScreenUpdating). je varie entre 3.6s et 3.01s. Le code est lancé comme ça. il ne remplace aucune donnée dans les cases. ce qui est étrange c'est que mon code primaire (avec les deux incrémentations) prend moins de temps qu'avec ta formule X). bon les tests ont été faits une seule fois, je les referai chez moi avec un vrai pc et avec une dizaine d’exécutions que j'enregistrerais dans un tableau. vous le transmettrais par la suite (moi aussi je trouve ça super-intéressant de voir ce qui marche le mieux)

    Mais du coup tout ce si ne répond absolument pas à ma question ^^

    mon objectif de base était de changer les conditiosn du if en cherchant l'information dans une cellule excel.

    c'est a dire: faire une fonction copier coller polyvalent qui copiera ou ne copiera pas certaines valeurs suivant ce que je lui aurais demandé depuis le fichier excel. l'idée et que l'utilisateur ne soit pas obligé d’ouvrir le code pour modifier les conditions du if.

  7. #7
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Re Bonjour,
    c'est a dire: faire une fonction copier coller polyvalent qui copiera ou ne copiera pas certaines valeurs suivant ce que je lui aurais demandé depuis le fichier excel. l'idée et que l'utilisateur ne soit pas obligé d’ouvrir le code pour modifier les conditions du if.
    Dans une autre vie, j'avais créé dans mon classeur, une feuille que j'avais appellé "tableau de bord", dans lequel j'avais mis une liste de cellule que j'avais nommées dans lesquelles, je pouvais trouver aisément des valeurs avec lesquelles travaillait mon programme, exemple: TvaReduite; TvaPleine; etc etc.
    Ainsi, lorsque les Rapetout des finances modifiaient les TVA, je n'avais pas l'utilité d'ouvrir les macros pour faire les modifications.
    Si je puis me permettre, nommez les cellules exemple par Insertion/nom/définir: TvaNormale. Ainsi, vos procédures pourront appeller la valeur quelle contient de n'importe ou avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MaVar = Sheets("TableauBord").Range("TvaNormale").Value  ' Vous n'aurez plus qu'a utiliser MaVar dans un code
    Ainsi les utilisateurs pourront remplacer aisément une valeur par une autre et le programme pourra continuer. Attention toutefois aux déclarations de variables Si MaVar est en String, elle ne pourra pas accepter de chiffre.
    Cordialement

Discussions similaires

  1. [WD-2016] Combobox qui va chercher une source excel
    Par formabox dans le forum VBA Word
    Réponses: 1
    Dernier message: 12/02/2019, 16h33
  2. [XL-2016] Chercher une cellule, à partir d'une variable d'un autre classeur
    Par Rydrake dans le forum Excel
    Réponses: 5
    Dernier message: 05/07/2017, 11h08
  3. [XL-2007] Aller chercher une feuille excel sur Internet
    Par Ooalkman dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/10/2014, 13h48
  4. [Toutes versions] Chercher une cellule qui tient compte de 2 paramètres
    Par pat66 dans le forum Excel
    Réponses: 5
    Dernier message: 13/01/2013, 12h45
  5. Remplir une cellule Excel avec une condition sous vb
    Par enibris dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/01/2008, 13h47

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