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 :

Remplacer plein de ligne IF par un code plus simple


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut Remplacer plein de ligne IF par un code plus simple
    Bonjour à tous,
    J'aimerais apprendre à simplifier mon code pour alléger mon programme et le rendre plus rapide.
    Voilà le sujet sur lequel je me penche aujourd'hui :
    Je dispose d'informations dans les cellules d'une ligne genre
    A3=NOM
    B3=Prénom
    C3=Date de naissance
    etc...
    J'appelle une userform composée de Textboxs dans lesquelles je veux que les données des cellules sus-nommées s'affichent à l'ouverture.
    J'ai donc défini que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Activate()
    TextBox1 = Sheets("Feuil1").Range("A3")
    TextBox2 = Sheets("Feuil1").Range("B3")
    TextBox3 = Sheets("Feuil1").Range("C3")
    End Sub
    Le soucis est que si il n'y a pas d'information dans la cellule C3 par exemple, à l'ouverture de ma userform, un 0 (zéro) s'affiche dans la TextBox3.
    J'ai donc du modifier le code en :
    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
    Private Sub UserForm_Activate()
    If Sheets("Feuil1").Range("A3") <> "0" Then
    TextBox1 = Sheets("Feuil1").Range("A3")
    Else
    TextBox1 = ""
    End If
    If Sheets("Feuil1").Range("B3") <> "0" Then
    TextBox2 = Sheets("Feuil1").Range("B3")
    Else
    TextBox2 = ""
    End If
    If Sheets("Feuil1").Range("C3") <> "0" Then
    TextBox3 = Sheets("Feuil1").Range("C3")
    Else
    TextBox3 = ""
    End If
    Vous imaginez donc la lourdeur du code, surtout lorsqu'on a 200 cellules et TextBoxs.

    J'aimerais donc savoir vers quelle fonction ou autre m'orienter, l'apprendre et la comprendre.
    Je ne cherche pas à ce qu'on me fasse un code mais à comprendre pour savoir faire moi-même.
    J'ai pensé à une m'orienter vers une conjonction de boucle et de Dim mais je ne maitrise pas celà et j'aimerais comprendre comment celà fonction car j'avoue que j'ai épluché mon bouquin VBA préféré mais les explications ne sont pas toujours facile à comprendre pour un novice comme moi.
    Merci par avance à ceux qui auront la patience de m'aiguiller, voir de m'expliquer.
    Laurent

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Avec le premier code, je n'ai pas réussi à avoir 0 dans les Textbox si les cellules sont vides.
    Si A3 est vide, TextBox1 est vide...etc

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut Si j'avais mieux expliqué...
    Bonjour Mercatog et merci pour ta réponse.
    En effet j'ai omis de dire que dans le cheminement de l'appel de mes macro, j'incrémente la cellule A3 avec un nom que je vais chercher dans une autre feuille et que les cellules B3, C3, etc... vont chercher les données dans les cellules de la même ligne sur la même feuille par un fonction RECHERCHE dans chacune des cellules.
    Ceci explique pourquoi j'ai un 0 si il n'y a pas de données réelles dans la cellule source car en fait il y a la formule RECHERCHE

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Pour moi le plus simple alors serait de faire précéder la formule RECHERCHEV par un SI ou un IF qui place une chaîne vide en lieu et place de 0
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Par défaut Merci beaucoup Philippe
    Bonsoir Philippe et merci.
    Le pire est que j'y avais pensé mais je ne voyais pas clairement comment faire. Puis aprés ta réflexion j'ai eu l'éclair -))

    Pendant qu'on y est, n'aurais-tu pas un direction à m'indiquer sur la méthode à apprendre pour remplacer toutes mes lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TextBox1 = Sheets("Feuil1").Range("A3")
    TextBox2 = Sheets("Feuil1").Range("B3")
    TextBox3 = Sheets("Feuil1").Range("C3")
    par une fonction qui remplacerait toutes ces lignes?

    Je ne sais pas vers quoi m'orienter

    Un truc style : on défini la Textbox de départ et la cellule de départ dont elle doit prendre la valeur puis on dit que, sachant que toutes les TextBox se suivent (TextBox1, TextBox2, TextBox3, etc...) la TextBox suivante prendre la valeur de la cellule suivante, etc...

    J'ai jetté un oeil sur les boucles mais je ne parvient pas à adapter à ce genre de situation les exemples donnés dans mon bouquin.

    Sinon, encore merci de t'être interessé à mon cas
    Laurent

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Un code vite écrit donc pas extraordinaire
    Dans l'exemple un code va alimenter les TextBox 1 à 3 des cellules de la ligne 2 des colonnes 1 à 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Dim sht As Worksheet
    Private Sub UserForm_Initialize()
     Set sht = ThisWorkbook.Worksheets("Feuil2")
     Dim c As Integer
     For c = 1 To 3
      Me.Controls("TextBox" & c) = sht.Cells(2, c)
     Next c
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/01/2014, 16h34
  2. [AC-2007] Création d'une requête longue par le code (plus de 255 caractères)
    Par yonnel dans le forum VBA Access
    Réponses: 7
    Dernier message: 08/11/2010, 21h43
  3. Code plus simple?
    Par cchampion2fr dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/09/2008, 16h49
  4. Remplacer le fichier persistence.xml par du code
    Par Baptiste Wicht dans le forum JPA
    Réponses: 5
    Dernier message: 12/05/2008, 13h59
  5. Boutique en ligne : Solution de paiment la plus simple ?
    Par Lareine dans le forum E-Commerce
    Réponses: 5
    Dernier message: 07/05/2006, 17h59

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