Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Débutant en VBA, et pas forcément très doué sur Excel, j'espère que certains ici pourront m'aider.Je n'ai trouvé la réponse à ma question nulle part.
Sous un tableau Excel, à travers une macro VBA, je désire calculer la valeur d'une cellule en fonction de son intersection avec 2, voire plusieurs plages de données.
Explication et un exemple pour (beaucoup) plus de clarté. Dans le tableau ci dessous :
Code:
1 A B C
2 1 1 2
3 x x x
4 x x x
5 x x x
Je souhaiterais calculer les valeurs des x de telle façon à obtenir le résultat suivant
Code:
1 A B C
2 1 1 2
3 A-1-3 B-1-3 C-2-3
4 A-1-4 B-1-4 C-2-4
5 A-1-5 B-1-5 C-2-5
En résumé, dans chaque cellule, comment attribuer une fonction selon l'intersection des différente plages souhaitées.
Je dois réaliser ce traitement sur plusieurs tableaux, qui ont chacun des structuration internes très différentes. Je ne peut donc définir fonction selon des références de plages absolues.
Les plages souhaitées doivent être sélectionnées manuellement au préalable, ce que j'ai déjà codé.
Néanmoins, la suite me pose problème, tant dans la méthode à choisir que dans la réutilisation des plages préalablement sélectionnées.
En espérant avoir été assez clair.
merci à ceux qui m'aideront. 🙂
Le problème est que je ne peut pas faire référence directement aux colonnes A1 et A2 dans ma formule car, les positions de mes plages seront différentes selon le tableaux.
Pour l'instant ma macro me permet de sélectionner plusieurs plages à la souris.
Code:
Sub Macro1()
Dim Monexcel As Application
Dim Monclasseur As Workbook
Dim Mafeuille As Worksheet
Dim donnees1 As Range
Dim donnees2 As Range
Dim donnees3 As Range
Dim donnees4 As Range
Set Monexcel = New Excel.Application
Monexcel.ReferenceStyle = xlR1C1
Set Monclasseur = ActiveWorkbook
Set Mafeuille = Monclasseur.Worksheets(1)
Set donnees1 = Application.InputBox("selectionnez la plage1 (sans les entêtes de colonnes).", Type:=8)
Set donnees2 = Application.InputBox("selectionnez la plage 2 (sans les entêtes de colonnes).", Type:=8)
Set donnees3 = Application.InputBox("selectionnez la plage 3 (sans les entêtes de colonnes).", Type:=8)
Set Donnees4 = Application.InputBox("selectionnez la plage 4 (sans les entêtes de colonnes).", Type:=8)
For Each Donnees4 In Selection
Donnnes4.Value = Application.Intersect(donnees1, donnee2, donnees3)
Next
End Sub
Dans la dernière sélection je souhaiterais donner comme valeur pour chaque cellule à l'intersection des plages précédentes, la concaténation des valeurs qui s'y trouvent.
Je tente actuellement d'utiliser la méthode Intersect, mais je ne pense pas que celle-ci soit adaptée à un calcul.
Merci, mais malheureusement je ne pense pas. Je cherche bien à créer plusieurs plages différentes pour réutiliser ensuite le contenu de plusieurs cellules :/
Néanmoins la formule proposée (=INDEX($A$1:$D$1,MATCH(G1,OFFSET($A$1:$D$1,MATCH(F1,$A$1:$A$4,0)-1,),0))), ne marche pas. Même en modifiant les erreurs de syntaxe, je me retrouve avec "#Nom?"
"
Quelqu'un saurait t-il la décrypter un peu plus clairement pour que je puisse l'adapter à mon problème.
Thks
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD