Tableau 3000x3000 mettre des $ en fonction des lignes/colonn

Bonjour à tous,

Petit problème que je n'arrive pas à résoudre :

J'ai un tableau de 3000 lignes et 3000 colonnes.

Chaque valeur dans ce tableau est égale à la formule suivante :

1000 x numéro de ligne + numéro de colonne.

Pour faire une colonne complète c'est facile, je met en dollar dans ma formule la partie où y a le numéro de colonne :

1000 x numéro de ligne + $numéro de colonne$

et je glisse sur toute la longueur de ma colonne et hop, une colonne de faite.

Sauf que pour remplir entièrement mon tableau, il faudrait que sur chacune de mes lignes de ma première colonne que je viens de faire, j'enlève le dollars au numéro de colonne, puis que je rajoute dollars au numéro de ligne, pour faire glisser sur toute la ligne et la remplir entièrement.

Faudrait que je fasse ça ainsi 3000 fois...

N'y a t-il pas un moyen, macro par exemple, pour remplir automatiquement mon tableau par 1000 x numéro de ligne + numéro colonne ?

Merci d'avance

bonjour

as-tu essayé en A1

=1000 x numéro de ligne + numéro de colonne

sans aucun $

ensuite tu tires vers le bas puis vers la droite

Oui ça ne marche pas.

Voici comment se présente mon tableau

dssd

Si je décale en bas, dès la deuxième ligne forcément au lieu de rajouter le numéro de colonne ça me rajoute la valeur précédente, j'obtiens 3001 au lieu de 2001. Et ainsi de suite, ça rajoute à chaque fois la valeur à la ligne précédente au lieu du numéro de colonne.

Pareil si je décale à droite, au lieu de faire 1000*numéro de ligne, ça me fait 1000*la valeur à la colonne précédente, donc à la deuxième colonne au lieu d'avoir 1002 j'ai 1001002...

Bonjour,

en A1: =1000*LIGNE()+COLONNE() ce n'est pas correct ?

P.

Bonjour Thibthib. bonjour le forum,

Ça n'écit pas des formules mais le résultat. Est-ce que ça pourrait convenir ?

22 secondes pour tout remplir chez moi...

Sub Macro1()
Dim O As Worksheet
Dim TV(1 To 3000, 1 To 3000) As Variant

deb = Timer
Application.ScreenUpdating = False
Set O = Sheets("Feuil1")
For I = 1 To 3000
    For J = 1 To 3000
        TV(I, J) = (1000 * I) + J
    Next J
Next I
O.Range("A1").Resize(3000, 3000).Value = TV
fin = Timer - deb
MsgBox "Exécuté en " & fin & " secondes !"
Application.ScreenUpdating = True
End Sub

Battu

avec ton code bien sur

screenshot094

Merci Thauthème, ça marche, 18 secondes !

Bon par contre mon Excel vient de passer de 10Mo à 70 Mo

Bonjour,

Voir fichier en retour.

ALT F8 et exécuter la procédure.

Cdlt.

4demo.xlsb (17.19 Ko)
Public Sub Création_tableau()
Dim ws As Worksheet
Dim arr(1 To 3000, 1 To 3000)
Dim I As Long, J As Long

    Set ws = ActiveSheet
    Application.ScreenUpdating = False
    For I = 1 To UBound(arr, 1)
        For J = 1 To UBound(arr, 2)
            arr(I, J) = 1000 * I + J
        Next J
    Next I
    ws.Cells(1).Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
    Erase arr()
    Set ws = Nothing

End Sub

re

en mettant les $ au bons endroits

comme ceci

7classeur1.xlsx (9.82 Ko)

Bonjour,

Enregistre ton fichier en xlsb !

Mon fichier DEMO.xlsb totalise 31,4 Mo. ( 0 à 31,4 à comparer à 10 à 70).

Cdlt.

Merci jmd, ça marche aussi avec ta méthode, je savais pas que le positionnement du dollar influençait comme ça la formule, et c'est plus simple qu'avec macro.

J'ai enregistré en xlsb je suis à 50Mo.

J'ai un autre problème maintenant, toujours lié à ces gros tableaux.

En fait je suis en train de réaliser un logiciel éléments finis en 3D sur Excel. J'ai ainsi créé tous mes nœuds, mes éléments, les matrices de raideurs de chacun de mes éléments, et maintenant je dois la matrice de raideur globale qui est une matrice de 3000x3000.

Voici un exemple de comment se construit ma matrice de raideur globale. Exemple avec une "structure" composée de 2 barres (2 éléments), donc 3 nœuds (3 points). 2 éléments ayant chacun leur propre raideur exprimée sous forme matricielle ( [k1] ) et ( [k2] ), on assemble ensuite ces 2 matrices dans une matrice de raideur globale :

yy

On voit que les matrices de raideur des 2 éléments ont une matrice de la forme suivante :

yyy

Pour ensuite les assembler dans ma matrice globale je dois donner des noms à chacune des ces cellules, j'ai choisi arbitrairement le les nommer "1000 x numéro de ligne + numéro de colonne".

On a ainsi 2 matrices de cette forme :

yyyy

Pour créer la matrice de raideur globale, pareil de la même façon je nomme ses cellules par la même formule 1000 x numéro de ligne + numéro de colonne, on obtient ça :

yyyyy

Si vous suivez bien c'est pour ça que je vous avez demandé de l'aide à la base, car moi ma matrice de raideur globale est de taille 3000x3000 et j'arrivais pas à nommer simplement chaque cellule.

Ensuite je dois utiliser ma fonction SOMME.SI.

Pour la première case par exemple on a :

SOMME.SI(la sélection de mes 2 tableaux où il y a les numéros de cellules des 2 éléments ; numéro de cellule de la matrice globale ; sélection de mes 2 tableaux où il y a les valeurs des raideurs des 2 éléments)

En français ça donne, si dans mes matrices numéro de cellule il y a des valeurs égales au numéro de cellule de la matrice globale, alors ça somme les valeurs des raideurs correspondant à ce numéro de cellule.

Pour la première case, le numéro de cellule est 1001, ce numéro de cellule n’apparaît qu'une fois dans mes 2 matrices, donc ça prend la valeur A.

Dans la deuxième ligne deuxième colonne, donc numéro de cellule 2002, ce numéro de cellule apparaît 2 fois, donc ça prend la valeur D+E.

Bref, j'en viens au problème...moi j'ai plus de 1000 éléments, une matrice de 3000x3000, j'ai réussi à créer cette grosse matrice de raideur, Excel a mis environ 20 minutes à la créer, et le problème, lorsque je change des caractéristiques de ma structure (dimensions, diamètres, etc), toutes mes matrices de raideurs de chacun de mes éléments changent, donc la matrice de raideur globale également, donc ça remet 20 minutes à se calculer...

Je peux donc plus rien modifier sans avoir de longs calculs...

Je me suis mis en calcul manuel pour que les calculs s'effectuent uniquement lorsque j'appuie sur F9, mais 20 minutes ça reste beaucoup trop long...

MA QUESTION : y a t-il un autre moyen de calculer cette matrice de raideur globale, d'autres fonctions, ou alors par macro, ou des astuces permettant d'optimiser les calculs sur Excel pour le rendre plus rapide ?

Excel est souvent utilisé pour des gros problèmes de mécaniques avec encore de plus grosses matrices que ça, ou pour du traitement de données etc, et ça prend sûrement pas autant de temps, si ?!

Donc comment optimiser ce temps de calcul ?

Merci aux courageux qui auront tout lu

Anybody ?

rebonjour

essaye avec des SOMMEPROD ou SOMME.SI.ENS au lieu de SOMME.SI

sans garantie

Merci de ta réponse,

Mais je vois pas comment me servir de la fonction SOMMEPROD alors que j'ai aucun calcul avec produit, quant à la fonction SOMME.SI.ENS, elle ne m'est pas utile étant donné que j'ai qu'un critère, donc la fonction SOMME.SI suffit amplement...

Bonjour.

SOMMEPROD ne sert pas que pour des multiplications, là où tu as par exemple

=SOMME.SI(L5:L15;"=a";M5:M15)

tu peux remplacer par

=SOMMEPROD((L5:L15="a")*(M5:M15))

Ce qui fera la "multiplication" de si L5:L15 = a et de M5:M15 (donc valeur de la colonne M * 0 si faux, *1 si vrai, donc somme si L =a).

Tu peux aussi mettre d'autres signes (=SOMMEPROD((L5:L15="a")-(M5:M15)) te renverra un résultat par exemple, la somme de 0-M ou 1-M selon si L = a ou pas, bon d'accord dans ce cas là c'est un calcul bizarre )

Bonne journée.

salut à tous

oui, SOMMEPROD est une fonction méconnue

(et assez pénible à écrire à cause des () et des * )

Re bonjour,

J'arrive pas à me servir correctement de la fonction SOMMEPROD...

J'ai 3 matrices :

Une grosse matrice de 3000x3000 comme ça

h

Une colonne avec plein de matrices 12x12 comme ça (y a plus de 1000 matrices comme ça). On v'a appelé ça M1.

hh

Et une colonne avec plein d'autres matrices 12x12 comme ça (y en a le même nombre que celles d'avant, environ 1000). On va appeler ça M2.

hhh

Ce que je veux :

Pour chaque cellule de ma grosse matrice, si 1000*numéro de ligne + numéro de colonne est égale à une des valeurs dans M2 (valeur qui peut apparaître à plusieurs endroit dans M2), alors ça renvoie la somme des valeurs correspondante dans M1.

Avec mon somme.si ça marchait parfaitement, pour la première cellule, 1000*1+1=1001, y avait qu'une cellule dans M2 qui valait 1001, donc ça m'affiche la valeur correspondante dans M1 :

hhhh

Avec le SOMME.PROD je n'arrive pas à faire pareil. Est-ce que la formule est correcte ?

hhhhh

CH2:CS19117 correspondant à M2, BH2:BS19117 correspondant à M1.

A chaque fois ça me renvoie la valeur #erreur...

Merci d'avance...

C'est bon du coup j'ai réussi, y avait une partie en texte dans M1 qui faisait buguer la fonction.

Mais du coup visiblement la fonction SOMME.PROD est encore plus longue que SOMME.SI, les calculs mettent 10 ans et j'ai même pas fait la matrice en entier...

Une autre solution du coup..?

N'est-il pas possible de faire un SOMME.SI en macro, avec un Application.ScreenUpdating = False, car apparemment c'est l'affichage qui prend le plus de temps...?

Rechercher des sujets similaires à "tableau 3000x3000 mettre fonction lignes colonn"