Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[Résolu] Nommer une plage variable de nombre

kulbank

XLDnaute Nouveau
Bonjour,
Je suis nouveau sur ce forum et débutant en excel et VBA. Ce que j'aimerais faire c'est nommer (Mat_X) une plage de trois colonnes de large mais d'un nombre indéfini de lignes. J'ai essayé avec Ctrl + Maj mais avec la macro ça ne fonctionne pas.
Donc pour résumer ces trois lignes, j'aimerais une macro qui sélectionne la plage de cellules (de AA à AC et variable en lignes)avec un nom fixe (Mat_X). Ca sera pour du calcul matriciel (régression de plan) ensuite. Je vous ai joint le fichier.
Je ne pense pas que ça soit impossible mais je n'ai pas trouvé sur le net ou dans l'aide Office. Merci d'avance pour vos conseils.

Kulbank
 

Pièces jointes

  • Exceldownload.xlsx
    27.1 KB · Affichages: 84
  • Exceldownload.xlsx
    27.1 KB · Affichages: 76
  • Exceldownload.xlsx
    27.1 KB · Affichages: 83
Dernière édition:

R@chid

XLDnaute Barbatruc
Supporter XLD
Re : Nommer une plage variable de nombre

Bonjour et Bienvenu sur XLD,

Si j'ai bien compris,
Aller sur l'Onglet Formules ==> Gestionnaire de Noms
et définir le champ Mat_X par cette formule :
Code:
=DECALER(Feuil1!$AA$1;;;NBVAL(Feuil1!$AA:$AA);3)

Pour sélectionner le champ,
taper F5 et entrer Mat_X dans ==> Référence

Voir PJ
Amicalement
 

Pièces jointes

  • Mat_X.xlsx
    27.2 KB · Affichages: 130

youky(BJ)

XLDnaute Barbatruc
Re : Nommer une plage variable de nombre

Bonjour à tous,
Voici une macro à mettre dans un module.
A exécuter "test"
Bruno
Code:
Sub test()
Dim ref As Range
Dim deb, bas, fx
On Error Resume Next
Set ref = Application.InputBox(prompt:="Selectionner les cellules sur la feuille", Type:=8)
If Err > 0 Then Exit Sub
deb = Split(ref.Address, "$")(2)
bas = Split(ref.Address, "$")(4)
fx = "=Feuil1!R" & deb & "C27:R" & bas & "C29"
On Error Resume Next
ActiveWorkbook.Names("Mat_X").RefersToR1C1 = fx
If Err > 0 Then ActiveWorkbook.Names.Add Name:="Mat_X", RefersToR1C1:=fx
End Sub
 

Pièces jointes

  • Exceldownload.xlsm
    32.5 KB · Affichages: 62

kulbank

XLDnaute Nouveau
Re : Nommer une plage variable de nombre

Woua rapide la réponse! Merci pour la bienvenue.
[EDIT j'avais pas vu la deuxième réponse. Je teste de suite! Merci bcp!]
J'ai essayé cette technique. Elle fonctionne très bien mais lorsque je l'enregistre pour la macro, cela ne fonctionne pas après. Ce que j'aimerais c'est faire le plan de régression de deux plages de données. La plage avec les trois colonnes s'appellerait "MatriceX" et celle à une seule colonne en AE "MatriceY". Les deux matrices ont le même nombre de lignes mais elle peuvent varier.
La formule du plan de régression est :

=PRODUITMAT(INVERSEMAT(PRODUITMAT(TRANSPOSE(MatriceX);MatriceX));PRODUITMAT(TRANSPOSE(MatriceX);MatriceY))

La réponse c'est une matrice colonne de trois cellules. Il faudrait que ca soit A1,A2,A3. Est-ce que c'est possible de faire une macro qui fonctionnerait pour toutes les feuilles du classeur? Je les ai nommées "Toit n°1", "Toit n°2"...
Merci pour la réponse

Kulbank
 

kulbank

XLDnaute Nouveau
Re : Nommer une plage variable de nombre

Bonjour Youky,
Votre démarche fonctionne très bien mais est ce que c'est possible de ne pas procéder pas sélection manuelle? Parce que le fichier original fait plusieurs milliers de lignes parfois.
Désolé du double post mais c'était pour répondre à Youky.
 

youky(BJ)

XLDnaute Barbatruc
Re : Nommer une plage variable de nombre

Re,
Sans selection mais avec inputbox en 2 demandes
Bruno
Code:
Sub test()
Dim deb, bas, fx
deb = InputBox("Indiquez le N° ligne de départ")
bas = InputBox("Maintenantla ligne de fin")
fx = "=Feuil1!R" & deb & "C27:R" & bas & "C29"
On Error Resume Next
ActiveWorkbook.Names("Mat_X").RefersToR1C1 = fx
If Err > 0 Then ActiveWorkbook.Names.Add Name:="Mat_X", RefersToR1C1:=fx
End Sub
 

kulbank

XLDnaute Nouveau
Re : Nommer une plage variable de nombre

Re,
Alors j'ai essayé de modifier la macro avec la sélection que tu m'as donné.
Le problème c'est que ça à l'air de marcher mais Excel me renvoie un message d'erreur "Excel a manqué de ressources lors de la tentative de calcul d'une ou plusieurs formules.". C'est bizarre parce que je l'avais déja fait sans les macros et ça fonctionnait. Je te donne mon code.
Code:
Sub Coeffi()
 Dim ref As Range
 Dim deb, bas, fx
 On Error Resume Next
 Set ref = Application.InputBox(prompt:="Selectionner la première matrice (Colonne AA à AB).", Type:=8)
 If Err > 0 Then Exit Sub
 deb = Split(ref.Address, "$")(2)
 bas = Split(ref.Address, "$")(4)
 fx = "=Toit!R" & deb & "C27:R" & bas & "C29"
 On Error Resume Next
 ActiveWorkbook.Names("MatriceX").RefersToR1C1 = fx
 If Err > 0 Then ActiveWorkbook.Names.Add Name:="MatriceX", RefersToR1C1:=fx
 
  Dim asdf As Range
 Dim com, fin, fy
 On Error Resume Next
 Set asdf = Application.InputBox(prompt:="Selectionner la deuxième matrice (Colonne AE).", Type:=8)
 If Err > 0 Then Exit Sub
 com = Split(ref.Address, "$")(2)
 fin = Split(ref.Address, "$")(4)
 fy = "=Toit!R" & deb & "C27:R" & bas & "C29"
 On Error Resume Next
 ActiveWorkbook.Names("MatatriceY").RefersToR1C1 = fx
 If Err > 0 Then ActiveWorkbook.Names.Add Name:="MatriceY", RefersToR1C1:=fy
 
    Range("A1:A3").Select
    Selection.FormulaArray = _
        "=MMULT(MINVERSE(MMULT(TRANSPOSE(MatriceX),MatriceX)),MMULT(TRANSPOSE(MatriceX),MatriceY))"
 End Sub
 

kulbank

XLDnaute Nouveau
Re : Nommer une plage variable de nombre

Re,
J'ai fait autrement. J'ai trouvé une astuce avec l'enregistreur, la fonction NBVAL et des modifications dans le code. Maintenant c'est nickel.

Code:
Sub Nom()
    Range("AD1").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=COUNTA(C[1])"

Dim qwert
qwert = (Range("AD1").Value)
    Range("AA1:AC" & qwert).Select
    ActiveWorkbook.Names.Add Name:="MatriceX", RefersToR1C1:= _
        "=Toit!R1C27:R" & qwert & "C29"
        
    Range("AE1:AE" & qwert).Select
    ActiveWorkbook.Names.Add Name:="MatriceY", RefersToR1C1:= _
        "=Toit!R1C31:R" & qwert & "C31"
End Sub

Je vous explique ce que je devais faire. Il s'agit tout d'abord d'un fichier de points en 3D provenant d'un balayage laser d'un pan de toit. Ces points ont été sélectionnés avec AutoCAD. J'ai déterminé la meilleure approximation de ce pan de toit à l'aide d'une régression de plan. Le calcul matriciel n'est pas compliqué avec Excel mais c'est la transformation et la sélection des données qui sont complexes. Cet outil va permettre de modéliser en 3D des maisons sans aller sur le terrain.
Si vous avez des idées concernant l'amélioration du programme, l'optimisation des macros ou si vous êtes simplement intéressé par ce que j'ai fait durant ce projet, faîtes moi signe!

Kulbank
 

Pièces jointes

  • Calcul d'un toit en pente.xlsm
    27.6 KB · Affichages: 65
  • Capture.jpg
    59.1 KB · Affichages: 120
  • Capture.jpg
    59.1 KB · Affichages: 130
  • Capture.jpg
    59.1 KB · Affichages: 127
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…