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 :

Application de range.row dans un range d'une formule [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut Application de range.row dans un range d'une formule
    Bonjour a vous,

    JE suis en train de trouver une alternative a une boucle afin d'optimiser un code. Pour des données "fixe" j'utilisent maintenant les filtres avancées mais ou que je bug c'est lorsque je fait référence a une adresse dans une formule.


    Dans ma boucle j'avais cette section si qui m'intéresse dans mon cas présent


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     For Each produit_a_creer In feuille_mandatAValider.Range(LettreVoulue & 2, LettreVoulue & LastLignUsedInColumn(LettreVoulue))
     
        x = x + 1
     
            feuille_creation.Cells(x + 1, feuille_creation.Range("item_etab_moulinette").Column) = _
            rmultUnique(feuille_creation.Cells(x + 1, feuille_creation.Range("ID").Column), _
            feuille_revise.Range("B2:t" & LastLignUsedInSheet_Column("tmp_MoulinetteRévisée", "a") + 1), 5)
     
     
     
        Next produit_a_creer
    Dont rmultUnique est une fonction similaire a la recherchev permettant d'avoir tout les données possible et ce sans la répétition de la même réponse si celle-ci apparaît plus qu'une fois.


    J'arrive au code suivant si j'applique la fonction à la cellule situer à la position 2 de la colonne "item_etab_moulinette" et d'autre permettant de trouver la lettre de la colonne et la derniere ligne utilisé d'une feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        feuille_creation.Range(TrouveLettreColonne(Range("item_etab_moulinette")) & 2) = _
        rmultUnique(feuille_creation.Range(TrouveLettreColonne([ID]) & 2), _
        feuille_revise.Range("B2:t" & LastLignUsedInSheet_Column("tmp_MoulinetteRévisée", "a") + 1), 5)
    Jusqu'à présent je n'ai aucun problème. Mais je veux appliquer le code à une grande plage sois de la deuxieme ligne de la colonne "item_etab_moulinette" jusqu'à la dernière



    Ce qui me donne ceci toujours avec mes fonctions


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        feuille_creation.Range((TrouveLettreColonne([item_etab_moulinette]) & 2), TrouveLettreColonne([item_etab_moulinette]) _
        & LastLignUsedInSheet_Column("Demande de création", "B")) = rmultUnique(feuille_creation.Range(TrouveLettreColonne([ID]) & 2), _
        feuille_revise.Range("B2:t" & LastLignUsedInSheet_Column("tmp_MoulinetteRévisée", "a") + 1), 5)

    LE seul hic que j'ai présentement c'est que je veux remplacer la valeur fixe 2 (en rouge et en gras dans le code) par la référence de sont emplacement de ligne i.e. la ligne 3 le 2 est remplacer par 3, la ligne 4 le 2 est un 4, etc ...


    J'ai été donc lire l'aide sur la propriété range.row ...

    Est-ce que je peux affecter une variable correspondant a la row sans faire de boucle ???

    ou dois-je absolument faire comme mon exemple du début a fin de "populer" la variable ????

    un gros merci pour votre temps et aide

  2. #2
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut Function pour trouver la ligne voulue
    Bonjour,

    Voilà un exemple avec une fonction simple (pour la fonction, la partie Optional par défaut est à 0 =>xlWhole, mettre 1 pour xlPart --------> voir exemple Sub)

    A
    B
    C
    D
    E
    F
    G
    H
    I
    J
    sdsd k dsdsd
    L
    M
    N
    O
    P
    Q
    R
    S
    T
    U
    V
    12/09/18
    X
    Y
    Z
    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
    Sub TestLigne()
    Dim R As Range, Lig As Long
        Set R = Sheets("Feuil1").Range("A1:A27")
     
        Lig = Trouve_Lig("K", R)
        MsgBox IIf(Lig > 0, "La ligne est " & Lig, "Aucune ligne trouvée")
     
        Lig = Trouve_Lig("K", R, 1)
        MsgBox IIf(Lig > 0, "La ligne est " & Lig, "Aucune ligne trouvée")
     
        Lig = Trouve_Lig(CDate("12/9/2018"), R)
        MsgBox IIf(Lig > 0, "La ligne est " & Lig, "Aucune ligne trouvée")
     
        Lig = Trouve_Lig("T", R)
        MsgBox IIf(Lig > 0, "La ligne est " & Lig, "Aucune ligne trouvée")
     
        Lig = Trouve_Lig(Sheets("Feuil1").Range("A23"), R)
        MsgBox IIf(Lig > 0, "La ligne est " & Lig, "Aucune ligne trouvée")
     
        Set R = Nothing
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function Trouve_Lig(ValChercher, ByRef Plage As Range, Optional xlWP As Integer = 0) As Long
    Dim Ligne As Range
        TabxlWholePart = Array(xlWhole, xlPart)
     
                Set Ligne = Plage.Find(what:=ValChercher, Lookat:=TabxlWholePart(xlWP))
                If Not Ligne Is Nothing Then
                    Trouve_Lig = Ligne.Row
                Else
                    Trouve_Lig = 0
                End If
    End Function
    Je te laisse l'adapter
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Un gros merci, cher ami


    j'y jette un oeil

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Devrais je plutôt copier la formule contenant la variable jusque à la fin tel que l'on ferais sans utilisé vba ???

    Je ne sais pas si cela m'éviterais le casse-tête de où pointer ???

    Edit 1 :

    J'ai fais une tentative avec l'enregistreur de macro mais le code ne foncitonne absolument pas si il est réexécuter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    '    Range("P2").Select
    '    ActiveCell.FormulaR1C1 = _
    '        "=rmultUnique(RC[3],tmp_MoulinetteRévisée!R2C2:R2367C20,5)"
    '    Selection.AutoFill Destination:=Range("P2:P300")
    '    Range("P2:P300").Select
    à suivre ...

  5. #5
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Donc apres quelque plusieurs manipulation je suis arriver avec ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Set item_etab_utilise = Sheets("Demande de création").Range(TrouveLettreColonne([item_etab_moulinette]) & 2, TrouveLettreColonne([item_etab_moulinette]) _
                            & (LastLignUsedInSheet_Column(("Demande de création"), (TrouveLettreColonne([ID])))))
     
    With Sheets("Demande de création")
     
         .Range(TrouveLettreColonne([item_etab_moulinette]) & 2).FormulaR1C1 = "=rmultUnique(RC[3],zone_recherche,5)"
         .Range(TrouveLettreColonne([item_etab_moulinette]) & 2).AutoFill _
         Destination:=item_etab_utilise
    end with
     
    item_etab_utilise = item_etab_utilise.value
    J'ai un gain de vitesse phénoménale versus la boucle.

    La seul chose que je "n'aime pas du code c'est que je fais référence à un positionnement fixe et non relatif. Au lieu de RC[3] je voudrais inscrire un nom de plage ou une différence.

    Est-ce que c'Est possible au cas où que l'on ajoute une colonne ???

    en vous remerciant

    P.S. Ryu Je vais faire ton même principe au niveau de la régénération i.e. ne pas tout détruire mais seulement ajouté !!!

    Ton explication et ton aide est très pratique pour plusieurs sauces !!!

    merci encore pour ton aide précieuse !!!!

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,

    Si tu pouvais faire des explications plus simple en évitant, dans un 1er temps de faire des codes avec des champs nommés mais avec les références type A1,
    De plus TrouveLettreColonne => à quoi cela te sert ?? T'es pas censé connaître les colonnes concernées, non ?

    Un exemple simple à l'exactitude des conditions réelles sont parfois mieux que des explications dont on ne comprend pas forcément tout (les gens ne connaissent pas comment est fait ton fichier)
    Il manque aussi du code …

    Mais le mieux à mon avis c'est que tu reviennes avec du code sans champs nommés - voir un exemple de ce que tu as au début et le résultat final
    trop de champs nommés tue les champs nommés !
    le but c'est que cela soit le plus lisible possible
    les questions à ce poser :
    - qu'est ce que je veux faire ?
    - quel est l'action appropriée ?
    - quel est la façon la plus logique et la plus simple de faire le code

    Revois les commentaires pour faire le code sur les filtres élaborés, voit comme cela est plus concis … …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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

Discussions similaires

  1. [XL-2013] Remplacer des données dans un tableau avec une formule
    Par capnice dans le forum Excel
    Réponses: 7
    Dernier message: 23/05/2015, 22h12
  2. [Débutant] Recherche de row dans un DataGridView via une textbox
    Par patrickvier dans le forum VB.NET
    Réponses: 27
    Dernier message: 11/03/2015, 14h08
  3. Réponses: 5
    Dernier message: 06/02/2014, 20h43
  4. [XL-2003] erreur étrange dans le calcul d'une formule
    Par r0d dans le forum Excel
    Réponses: 21
    Dernier message: 17/03/2010, 16h30
  5. problème dans l'écriture d'une formule
    Par jackall dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 19/06/2008, 14h50

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