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

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    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 617
    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 617
    Points : 5 912
    Points
    5 912
    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 ?
    MPi²

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    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 sénior


    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
    Points : 20 038
    Points
    20 038
    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 habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    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 sénior


    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
    Points : 20 038
    Points
    20 038
    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 éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    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

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    si j'ai 10 colonnes je vais dans mon écrire 10 fois la même formule

    c'est pas un problème en soi, c'est pas forcement un code "joli"

    mais surtout j'essaye de progresser dans l’écriture de mes codes

  9. #9
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par Pierre67 Voir le message
    si j'ai 10 colonnes je vais dans mon écrire 10 fois la même formule

    c'est pas un problème en soi, c'est pas forcement un code "joli"

    mais surtout j'essaye de progresser dans l’écriture de mes codes
    Oui mais si c'est 10 fois la même formule pourquoi veut tu la modifier ? tu écris simplement la même chose dans toutes tes colonnes ...c'est le numéro de colonne ou tu veux écrire qui doit être modifié pas ta formule ...

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    cela m'aurai juste permis de mieux manipuler par code les s formules avec RC[-x]
    pour ma culture personnelle

  11. #11
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Tu n'as pas trouvé ton bonheur dans ce que je t'ai proposé ?

    Ou c'est parce que je ne t'ai pas montré la méthode avec .FormulaArray ?

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    Mercie Joe

    je vais regarder cela demain car maintenant corvée de courses
    bon we

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    si il y a quelqu’un qui nous a montré l'intérêt et la puissance de formula r1c1, c'est bien Joe.

    dans sont exemple post #7 il démontre que le seul cas où la formule reste identique c'est bien le cas de formular1c1 .FormulaR1C1 = "=MID(RC[-9],(SEARCH(""-"",RC[-9],1))+1,SEARCH(""-"",RC[-9],(SEARCH(""-"",RC[-9],1))+1)-((SEARCH(""-"",RC[-9],1))+1))"!

    en effet, FormulaR1C1 travail en position relative, R représente la position de la linge qui reçoit la formule décalé de +/- R et C la position de la colonne qui reçoit la formule décalé de +/- C!

    la double boucle a et i commence à la ligne 4 et à la colonne 12 cells(4,12) et finie a la ligne 79 et la colonnes 13 cells(79,13)FormulaR1C1 permet de renseigner la plage toute entière sans fair de boucle!
    range(cells(4,12),cells(79,13)).FormulaR1C1 = "=MID(RC[-9],(SEARCH(""-"",RC[-9],1))+1,SEARCH(""-"",RC[-9],(SEARCH(""-"",RC[-9],1))+1)-((SEARCH(""-"",RC[-9],1))+1))"

  14. #14
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    rdurupt a vendu la mèche avant que tu digères la première étape !!

    bye bye les boucles

  15. #15
    Invité
    Invité(e)
    Par défaut
    désolé Joe d'avoir bousillé ta stratégie pédagogique!

  16. #16
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Pas de mal, le fossé entre les deux était pas énorme

    et puis, j'aurai sûrement utilisé un Resize, toi c'est plus intuitif pour sa compréhension

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    merci a Joe et a rdurupt pour votre contribution

    avec une mention particulière à rrurupt pour son ingéniosité
    bon week end à vous


+ 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