VB: Probleme de "Value"
fred
-
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!!
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!!
A voir également:
- VB: Probleme de "Value"
- Vb - Télécharger - Langages
- Vb cable - Télécharger - Audio & Musique
- Vb editor - Télécharger - Langages
- Vb runtime - Télécharger - Divers Utilitaires
- Vb express - Télécharger - Langages
14 réponses
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
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
;-)
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...
;-)
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...
;-)
;-( 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
;-)
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
;-)
Hello fred,
Me revoilà,
Autre solution avec le code ci-dessous :
- 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.
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 SubCette 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.
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 ;-)
Je vais essayer tes procedures, en tout cas merci pour ton aide précieuse je te tiens au courant!!!!
*
a plus ;-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 )
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 )
Utilise :
Plage.Offset(L, C)
qui définit une plage identique, décalée de L lignes et C colonnes.
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 SubArmojax.
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.
- 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.
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??
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??
;-)
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...
;-)
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...
;-)
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)
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)
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
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
Salut,
Essaie comme ça :
A+
Essaie comme ça :
Sheets("Feuil1").Cells(5, 5).Formula = "=SUMPRODUCT(" & Val1 & "," & Val2 & ")"
A+
Hello Fred,
Désolé, mais parti ce matin, je viens seulement de rentrer...
Je te propose la variante suivante :
- 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...
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 SubCe 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...
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??
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??
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.
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...