VB: Probleme de "Value"

fred -  
 fred -
Bonjour a tous!

Je vous sollicite car je voudrai connaitre une autre maniere pour écrire var =Cells(13,15).Value

En effet dans Cells(13,15) je rentre des domaines de cellules (ex:
I24:25;I33:34;I42:43;I66:71) et vb me renvoie erreur définie par l'objet. J'ai l'impression que "value " n'est pas adapté pour ce que je veux faire: utiliser seulement ce qui est écrit dans la cellule(13,15)

Gspr que vous saurez m'aider d'avance merci!!

14 réponses

  1. fred
     
    lorsque je rentre dans ma cellule O13 les valeurs TABLEAU!I24:I25;TABLEAU!I36:I72 mon programme ne marche pas mais si je ne rentre qu'un domaine de cellules comme TABLEAU!I24:I30 alors ça marche .

    Je pense que "value " ne reconnait pas lorsqu'il y a plusieurs dommaines.
    J'utilise var1, var2 ,etc.. pour travailler en Somme et Sommeprod sur l'ensemble des domaines définis
    0
    1. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
       
      Hello fred,

      Je ne saisis pas bien ce que tu veux faire.
      TABLEAU!I24:I25;TABLEAU!I36:I72 représente une plage de cellules, ou plus exactement une union de plages.
      Il s'agit d'un ensemble de cellules dont chacune possède une valeur, mais ça ne représente pas une valeur, et la propriété Value n'a pas de sens dans ce cas-là.

      Qu'est-ce que tu veux faire exactement ?
      Ajx.
      0
      1. fred > Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention  
         
        Salut armojax.

        En fait je veux rentrer des unions de plages de cellules de maniere simple dans la cellule I13.
        Ce que je faisais c'était que je cliquais sur I13, je mettais = et je selectionnais mes plages de cellules et ensuite j'enlevais le = de maniere à ce que ma selection apparaisse comme un texte ou une valeur dans I13.

        J'ai créé une proc Vb qui fixe val1=Cells(13,9).Value; val2=Cells(13,10).Value ,etc... au total 6 variables que j'utilise par exemple dans Cells(4,9).Formula="=SUMPRODUCT(("&val1&")*("&val2&")/SUM("&val1&") ou d'autres opérations basiques de ce type.

        Le probleme c que si je selectionne des unions de cellules sous exel avec ma souris elles sont liées par des ; donc je dois remplacer ensuite dans ma cellule I13 tous les ; par des , car Vb ne prend pas les ;

        Tu vois c pas tres pratique si tu connais une astuce pour m'eviter ces manips un peu lourdes...
        0
  2. WhiteFang Messages postés 2063 Statut Membre 204
     
    ;-)

    Tu peux essayer ça...
    ----------------------------
    Dim Plages(1), NbrPlages, ContenuCellule, Formule, Cpt, Cpt1
    NbrPlages = 1: Cpt1 = 1
    ContenuCellule = Cells(1, 1).FormulaLocal
    ContenuCellule = Mid(ContenuCellule, InStr(1, ContenuCellule, "(") + 1)
    ContenuCellule = Mid(ContenuCellule, 1, Len(ContenuCellule) - 1)
    For Cpt = 1 To Len(ContenuCellule)
    Select Case Mid(ContenuCellule, Cpt, 1)
    Case Is = ";"
    Plages(NbrPlages) = Mid(ContenuCellule, Cpt1, Cpt - Cpt1)
    NbrPlages = NbrPlages + 1
    ReDim Preserve Plages(NbrPlages)
    End Select
    Next
    For Cpt = 1 To UBound(Plages)
    'A "travailler" pour reconstruire ta variable
    Next
    ------------------------------------
    Ceci de crée un petit tableau dynamique qui va contenir, dans chaque élément, chaque plage de cellules défini dans ta formule...
    A toi de reconstruire à partir de ça le contenu de ta cellule 4,9...
    Tu peux aussi le faire en statique, tu as maintenant de quoi extraite de que tu veux de ta cellule de base...

    ;-)
    0
    1. WhiteFang Messages postés 2063 Statut Membre 204
       
      ;-( J'ai écrit trop vite....

      Voilà le bon :

      Dim Plages(), NbrPlages, ContenuCellule, Formule, Cpt, Cpt1
      NbrPlages = 1: Cpt1 = 1
      ContenuCellule = Cells(1, 1).FormulaLocal
      ContenuCellule = Mid(ContenuCellule, InStr(1, ContenuCellule, "(") + 1)
      ContenuCellule = Mid(ContenuCellule, 1, Len(ContenuCellule) - 1)
      For Cpt = 1 To Len(ContenuCellule)
      Select Case Mid(ContenuCellule, Cpt, 1)
      Case Is = ";"
      ReDim Preserve Plages(NbrPlages)
      Plages(NbrPlages) = Mid(ContenuCellule, Cpt1, Cpt - Cpt1)
      Cpt1 = Cpt + 1
      NbrPlages = NbrPlages + 1
      End Select
      Next
      For Cpt = 1 To UBound(Plages)
      'A "travailler" pour reconstruire ta variable
      Next

      ;-)
      0
    2. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
       
      Hello fred,

      Me revoilà,

      Autre solution avec le code ci-dessous :
      Sub SelectionPlages()
        
        Dim Val1 As Range
        Dim Val2 As Range
        
        ' Récupération de la plage Val1
        Set Val1 = Application.InputBox(prompt:="Sélectionnez " _
        & "la plage Val1, puis faites OK", _
        Title:="SELECTION DE PLAGE", Type:=8)
        
        ' Récupération de la plage Val2
        Set Val2 = Application.InputBox(prompt:="Sélectionnez " _
        & "la plage Val2, puis faites OK", _
        Title:="SELECTION DE PLAGE", Type:=8)
        
        Sheets("Feuil1").Cells(5, 5).Value = Application.WorksheetFunction.SumProduct(Val1, Val2)
      
      End Sub
      Cette macro :
      - te permet de sélectionner à la souris ta première matrice...
      - puis la deuxième
      - et te mets le résultat de SumProduct dans la cellule de ton choix.
      Ajx.
      0
  3. fred
     
    salut ajx excuse gt pas devant mon pc...
    Je vais essayer tes procedures, en tout cas merci pour ton aide précieuse je te tiens au courant!!!!
    *
    a plus ;-)
    0
  4. fred
     
    Merci aussi a toi White fang je v essayer vos proc ça m'a l'air prometteur...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fred
     
    bon les gars g essayé vos proc ça marche nickel je garde celle d'ajx (un peu plus pratique)
    d'ailleurs ajx je voulais savoir comment programmer dans ta proc que mes cellules selectionnées dans val2 sont les mêmes que celles de val1 a la différence pres qu'elles sont de la colonne suivante, sinon la ligne est la même.
    (je selectionne val1 dans colonne I et val2 dans colonne J )
    0
  7. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    Utilise :

    Plage.Offset(L, C)

    qui définit une plage identique, décalée de L lignes et C colonnes.
    Sub SelectionPlages()
      
      Dim Val1 As Range
      Dim Val2 As Range
      
      ' Récupération de la plage Val1
      Set Val1 = Application.InputBox(prompt:="Sélectionnez " _
      & "la plage Val1, puis faites OK", _
      Title:="SELECTION DE PLAGE", Type:=8)
      
      Set Val2 = Val1.Offset(0, 1)
      
      Sheets("Feuil1").Cells(5, 5).Value = Application.WorksheetFunction.SumProduct(Val1, Val2)
    
    End Sub
    Armojax.
    0
    1. fred
       
      ok ajx bien reçu..

      et une toute derniere chose:
      est ce que je peux me reservir de mes variables val1 et val2 dans un autre programme, et dans ce cas la comment faire???
      0
      1. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529 > fred
         
        Qu'est-ce que tu veux dire exactement ?

        - Soit tu veux que les variables Val1, Val2 soient définies une fois pour toutes dans toutes les macros.
        Dans ce cas, au lieu de les définir par "Dim" à l'intérieur de la macro, tu mets :
        Public Val1 As Range, en début de module, devant tes macros. Tu n'as plus à les définir dans les autres macros.

        - Soit tu veux passer à une autre macro le contenu des variables Val1 et Val2. Dans ce cas, ta macro principale en appelle une autre en lui passant les paramètres.

        Armojax.
        0
      2. WhiteFang Messages postés 2063 Statut Membre 204 > Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention  
         
        ;-)

        (Entre-nous deux), tu pourrais étoffer ton profil ? Que je puisse papoter et savoir qui tu est ?

        Des fois, ch'te sens pô ? Un peu énervé, la fin de journée ?

        ;-)
        0
      3. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529 > WhiteFang Messages postés 2063 Statut Membre
         
        Tu m'sens pô ?
        Ça serait-y pas un manque de flair ? :o)

        P'têt répondu un peu vite, entre deux courants d'air ?
        Ajx.
        0
      4. WhiteFang Messages postés 2063 Statut Membre 204 > Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention  
         
        ;-)))))))))))))))))))))))))))))))))

        T'inquiètes ;-))))))))))))))))) Pour le flair, ça roule ;-)

        C'était juste comme ça........

        ;-)
        0
  8. fred
     
    salut c remoi...

    Je vous embete encore une fois mais je voudrai savoir où je dois inserer Public Val1 As Range pour que Val1 soit défini une fois pour toute et que je puisse l'utiliser dans plusieurs macros.

    Ajx me dit en début de module mais est ce que çà veut dire que je le met en tout début de module ??
    Dans ce cas mes macros utilisant cette variable doivent commencer par Public Sub ??
    Et est ce que je dois refaire Dim Val1 a l'intérieur des macros??
    0
  9. WhiteFang Messages postés 2063 Statut Membre 204
     
    ;-)

    Alors !!

    Quand une variable est déclarée A L'INTERIEUR d'une SUB, elle est dite LOCALE, car elle n'a d'existence que pendant l'exécution de cette sub...

    Quand une variable est déclarée A L'EXTERIEUR d'une SUB, cette variable, si tu ne met que DIM, n'a d'existence que pour l'objet dans lequel tu a déclaré cette variable (en général, des UserForm), elle n'est donc toujours pas GLOBALE...

    Si tu veux déclarer un variable accessible pour TOUT ton projet VBA, tu spécifies PUBLIC et cela, HORS Sub... Et en général, dans un module fait pour cela (la déclaration des variables)

    Exemple : Public MaVariable as...

    ;-)
    0
  10. fred
     
    ok merci prof !

    Mais je v aller encore plus loin...
    Est ce que tu connais une proc utilisant la proc d'armojax et qui prend en compte que si mon projet n'a qu'un étage je définis une seule fois val1 et val2 et je les utilise dans E5 comme Sumproduct , mais que si mon projets a n étages je dois définir n couples (Val1,val2) que j'utilise comme Sumproduct dans E5, I5, ... avec a chaque fois le couple suicant utilisé dans la cellule (col (x+1), ligne 5) avec (x+1)=x+4 (on saute 4 colonnes a chaque fois)
    0
  11. fred
     
    ou alors beaucoup plus simple et pratique comment je fais pour faire apparaitre dans ma cellule 5,5 le résultat de sumprod mais aussi la formule dans la barre d'écriture lorsque je clique dessus au lieu d'avoir juste le résultat sans la formule qui me fait apparaitre ma selection
    0
  12. fred
     
    ou alors beaucoup plus simple et pratique comment je fais pour faire apparaitre dans ma cellule 5,5 le résultat de sumprod mais aussi la formule dans la barre d'écriture lorsque je clique dessus au lieu d'avoir juste le résultat sans la formule qui me fait apparaitre ma selection
    0
  13. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Salut,

    Essaie comme ça :
    Sheets("Feuil1").Cells(5, 5).Formula = "=SUMPRODUCT(" & Val1 & "," & Val2 & ")"


    A+
    0
  14. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    Hello Fred,

    Désolé, mais parti ce matin, je viens seulement de rentrer...
    Je te propose la variante suivante :
    Sub SelectionPlages()
      
      Dim Val1 As Range
      Dim Val2 As Range
      
      ' Désignation de la plage Val1
      Set Val1 = Application.InputBox(prompt:="Sélectionnez " _
      & "la plage Val1, puis faites OK", _
      Title:="CHOIX DE LA MATRICE", Type:=8)
      
      ' La plage Val2 est déduite de Val1
      Set Val2 = Val1.Offset(0, 1)
      
      ' Désignation de la cellule résultat
      Set OùÇa = Application.InputBox(prompt:="Sélectionnez " _
      & "la cellule où mettre le résultat, puis faites OK", _
      Title:="EMPLACEMENT DU RESULTAT", Type:=8)
      
      OùÇa.Value = Application.WorksheetFunction.SumProduct(Val1, Val2)
    
    End Sub
    Ce que ça fait :
    - Sélection d'une plage de cellules Val1
    - On en déduit automatiquement Val2, par glissement d'une colonne vers la droite
    - Désignation de la cellule où on veut le résultat.

    Est-ce que ça répond à ta question ?
    Essaie-le et dis-moi...
    0
    1. fred
       
      Salut armojax

      Désolé de ne pas t'avoir répondu avant
      En fait la proc que tu m'a donné ne fonctionne pas vraiment pour ce que je veux faire.
      Il faudrait que dans la cellule que l'on selectionne avec Oùça, on obtienne le résultat mais aussi la formule en language exel afin que si je change les valeurs des cellules sélectionnées pour Val1 et Val2 le résultat change aussi...

      Tu vois ce que je veux dire??
      0