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 :

Problème avec formulaR1C1 [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 442
    Par défaut Problème avec formulaR1C1
    Bonjour à tous

    dans les cellules cells (a,12) de la colonne L d'un tableau, je vais extraire depuis la colonne C une chaine de caractère comprise entre les signes "-" pour toutes les lignes de mon tableau avec la macro suivante et cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub occurence()
    Dim a As Integer, i As Integer
    a = 4
    For i = 4 To 79
         Cells(a, 12).Select
         ActiveCell.FormulaR1C1 = "=MID(RC[-9],(SEARCH(""-"",RC[-9],1))+1,SEARCH(""-"",RC[-9],(SEARCH(""-"",RC[-9],1))+1)-((SEARCH(""-"",RC[-9],1))+1))"
         a = a + 1
    Next i
    End Sub
    mon tableau comporte plusieurs colonnes.
    je peux recopier la macro pour chaque colonne cells(a,13).select ..... et la formule reste identique mais pas top

    j'aimerai pouvoir incrémenter une variable pour les colonnes et ainsi balayer tout mon tableau.

    Mais je me heurte à la syntaxe dans RC

    quelqu'un aurait-il une idée

    merci à vous

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    J'ai de la difficulté à comprendre pourquoi les gens utilisent les formules R1C1 quand on peut utiliser Formula.
    Les formules sont difficiles à lire par rapport à ce qu'on écrit dans les cellules de façon manuelle.

    Quelle est cette formule que tu écris en colonne L et quelle serait celle que tu écrirais dans les autres ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 442
    Par défaut
    Bonjour

    'ai de la difficulté à comprendre pourquoi les gens utilisent les formules R1C1 quand on peut utiliser Formula.
    C'est parce qu'on a utilisé l'enregistreur de macros, si mes connaissances en vba étaient plus fournies ... je ne poserai peut-être pas cette question

    Quelle est cette formule que tu écris en colonne L et quelle serait celle que tu écrirais dans les autres ?
    Cells(a, 12).Select définit la colonne L

    La formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.FormulaR1C1 = "=MID(RC[-9],(SEARCH(""-"",RC[-9],1))+1,SEARCH(""-"",RC[-9],(SEARCH(""-"",RC[-9],1))+1)-((SEARCH(""-"",RC[-9],1))+1))"
    grâce a cette formule je fais mais ma recherche dans la colonne C
    dans la colonne M j'irai chercher les valeurs de la colonne D donc toujours le même décalage RC-9, donc même formule

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonjour,

    pas vraiment clair il semble que tu contredise dans tes message : les formules dans les colonnes L et M ne sont-elles pas identiques ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 442
    Par défaut
    bonjour

    oui elles sont identiques
    d'où ma question: au lieu d'écrire plusieurs lignes de code pour des formules identiques comment remplacer le RC[-9] par une variables sur les colonnes

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Je comprends toujours pas ... si elle sont identique pourquoi veut tu une variable pour les modifier en fonction de la colonne destinataire ??

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    regarde si tout ceci te permet de perfectionner l'utilisation des formules sous VBA
    4 méthodes, 4 résultats identiques

    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
    Sub occurence()
    Dim a As Integer, i As Integer
    Dim Chaine As String
     
    ' colonnes L et M
    For i = 12 To 13
        ' lignes 4 à 79
        For a = 4 To 79
     
            With Cells(a, i)
     
                ' adresse de la cellule située 9 colonnes avant
                Chaine = Replace(.Offset(0, -9).Address, "$", "")
     
                ' formula R1C1
                .FormulaR1C1 = "=MID(RC[-9],(SEARCH(""-"",RC[-9],1))+1,SEARCH(""-"",RC[-9],(SEARCH(""-"",RC[-9],1))+1)-((SEARCH(""-"",RC[-9],1))+1))"
     
                ' formula Local
                .FormulaLocal = "=STXT(" & Chaine & ";(CHERCHE(""-"";" & Chaine & ";1))+1;CHERCHE(""-"";" & Chaine & ";(CHERCHE(""-"";" & Chaine & ";1))+1)-((CHERCHE(""-"";" & Chaine & ";1))+1))"
     
                ' formula
                .Formula = "=MID(" & Chaine & ",(SEARCH(""-""," & Chaine & ",1))+1,SEARCH(""-""," & Chaine & ",(SEARCH(""-""," & Chaine & ",1))+1)-((SEARCH(""-""," & Chaine & ",1))+1))"
     
                ' calcul sous VBA et écriture du résultat
                ' sans écrire la formule dans excel
                If UBound(Split(.Offset(0, -9), "-")) > 0 Then .Value = Split(.Offset(0, -9), "-")(1)
     
            End With
        Next a
    Next i
     
    End Sub
    seule la 4ème méthode gère le cas où tu n'as pas de texte encadré par deux "-"
    pour les 3 autres ... je n'ai fais que transposer ta formule qui à la base ne gère pas le cas, et renvoi #VALEUR quand la formule tombe en erreur


    quand tu seras à l'aise avec ce que je t'ai proposé, on verra pour te proposer l'optimisation ultime : ne pas utiliser deux boucles pour remplir tes cellules .... il est possible de tout réaliser sans boucle et en 5 lignes de code

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

Discussions similaires

  1. [XL-2003] Problème avec formulaR1C1 et formula
    Par coklin dans le forum Excel
    Réponses: 5
    Dernier message: 27/08/2009, 17h33
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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