Création d'un nouveau programme qui ne fonctionne pas
Bonjour à tous et merci pour votre aide que vous allez m'apporter.
Voila les premières lignes de mon nouveau programme qui ne fonctionne pas.
Pouvez vous me corriger ou me dire ce qui ne va pas. Merci
Sub MoisCumulés()
Dim val1 As Double, val2 As Double, val3 As Double, val4 As Double, TIM As Double
Dim feuille As Integer, ligtitreR As Integer, ligtitreC As Integer, Ci As Integer, Ri As Integer
Dim lignetotalRx As Integer, lignetotalC As Integer, ligsstotR As Integer
Dim wsMois As Worksheets
Dim wsCumul As Worksheets
Dim zoneRx As Range
feuille = 1 'feuille représente le numéro du mois de 1 à 12
Set wsMois = Sheets("R" & feuille) ' ( imcompatibilité de type )
Set wsCumul = Sheets("Cumul") 'Feuille de reception des différents mois ( imcompatibilité de type )
wsMois.Select
Set Sheets("R" & feuille).zoneRx = wsMois.Range(Cells(1, 1), Cells(1, 12)) '|selection de la ligne des titres des colonnes du tableau pour la mettre dans la feuille Cumul j'aurais pu mettre wsMois à la place de sheets("R" & feuille) mais cela ne fonctionne pas
lignetotalRx = Cells(Rows.Count, 1).End(xlUp).Row
wsCumul.Select
wsCumul.Cells.ClearFormats
wsCumul.Cells.ClearContents
zoneRx.Copy Destination:=wsCumul.Cells(1, 1)
For feuille = 1 To 12
Set wsMois = Sheets("R" & feuille)
Next feuilleHello,
supprimez ces z'esses en trop
Dim wsMois As Worksheet
Dim wsCumul As WorksheetBonjour
Un fichier est TOUJOURS le bienvenu
Dim wsMois As Worksheet, wsCumul As Worksheet 'sans S
Set wsMois = Sheets("R" & CStr(feuille)) N'ayant pas de fichier je n'ai pas testé le reste
A+ François
Nain porte koi, fanfan38, merci de me répondre
effectivement mon nouveau code fonctionne mais pas comme je le voudrai; pour éviter de jouer au ping-pong entre les deux feuilles, Rx et Cumul
J'aimerai écrire directement, pour ne pas faire des "select" de la feuille Rx :
zoneRx=wsMois.Range(Cells(1,1), cells(1,12))
lignetotalRx= wsMois.Cells(Row.Count, 1).End(xlUp).row
mais cela ne fonctionne pas. Y-a-t-il une erreur ou bien ce n'est pas possible?
Sub MoisCumulés()
Dim val1 As Double, val2 As Double, val3 As Double, val4 As Double, TIM As Double
Dim feuille As Integer, ligtitreR As Integer, ligtitreC As Integer, Ci As Integer, Ri As Integer
Dim lignetotalRx As Integer, lignetotalC As Integer, ligsstotR As Integer
Dim wsMois As Worksheet
Dim wsCumul As Worksheet
Dim zoneRx As Range
feuille = 1 'feuille représente le numéro du mois de 1 à 12
Set wsMois = Sheets("R" & feuille)
Set wsCumul = Sheets("Cumul") 'Feuille de reception des différents mois
wsMois.Select
Set zoneRx = Range(Cells(1, 1), Cells(1, 12)) '|selection de la ligne des titres des colonnes du tableau pour la mettre dans la feuille Cumul
lignetotalRx = Cells(Rows.Count, 1).End(xlUp).Row
wsCumul.Select
wsCumul.Cells.ClearFormats
wsCumul.Cells.ClearContents
zoneRx.Copy Destination:=wsCumul.Cells(1, 1)
For feuille = 1 To 12
Set wsMois = Sheets("R" & feuille)
Next feuille
End SubRe,
Comme dit précédemment un fichier est TOUJOURS le bienvenu
Et utiliser des tableau croisé dynamique simplifie grandement les choses
A+ François
Bonjour
Power Query est souvent intéressant également, mais difficile sans fichier/copie d'écran...
Sinon Integer = 32 767 max. Attention avec lignetotalRx = Cells(Rows.Count, 1).End(xlUp).Row
Je préfère mettre mes variables en Long.
Stéphane
fanfan38, merci pour cette réponse.
Pour l'instant je n'en suis que là. La suite de ce que je vais écrire comme code dépends de vos réponses à propos des sélections entre les feuilles Rx et Cumul.
Je n'ai pas envisager de tableau croisé dynamique. Bien que j'en ai déjà utilisés dans le passé j'ai oublié leurs fonctionnement mais si vous pensez que c'est plus simple pourquoi pas. Si c'est possible une simple explication devrait suffire.
Merci
rraccourcix, merci de vous pencher sur mon problème.
Pour les tableaux croisés dynamique je peux m'y remettre mais pour Power Query je ne sais absolument rien.
Vous préférez mette les variables en long; Pouvez m'expliquer pourquoi?
Merci
Montre nous ce que tu as et je te montrerai ma solution
A+ François
de mon coté, ma réflexion était qu'il y a plus de 1 000 000 de lignes dans Excel et donc que lignetotalRx peut dépasser la valeur max d'une variable définie en Integer.
d'où l'intérêt de la définir en "Long" afin de ne pas avoir d'erreur
Stéphane
Bonsoir le fil,
Hé oui pas encore couché...
Vous préférez mette les variables en long; Pouvez m'expliquer pourquoi?
Les nouveaux PC et Excel travaille mieux en Long ils sont prévu pour cela, deuxièmement comme expliqué plus haut cela vous éviteras des dépassements de capacité.
Si votre but et de copier les données des feuilles "R##" Voici un bout de code qu'l faudra finaliser je pense qui fait le travail. J'ai commenté les partie critiques.
Sub MoisCumules()
'// Puisque vous travaillez sur le même classeur
'// Donnez un nom de code à vos feuilles et utilisez les. Cela simplifiera le code final.
'// Donc pour la feuille "Cumul" nom de code : "sh_Cumul"
'// Prenez l'habitude de regrouper les propriétés sous un 'With'
'// On efface la feuille de destination
With sh_Cumul
.Cells.ClearContents
.Cells.ClearFormats
End With
'// On copie les données d'entêtes
Dim headerNames As Variant
headerNames = ThisWorkbook.Worksheets("R1").Range("A1:L1").Value
'// Si tableau structuré on prends les entête du dis tableau
'headerNames = ThisWorkbook.Worksheets("R1").Range("Tableau1").ListObject.HeaderRowRange.Value
'//On colle les entêtes
sh_Cumul.Range("A1").Resize(1, UBound(headerNames, 2)).Value = headerNames
Dim position As Range
Set position = sh_Cumul.Range("A2")
'//On boucle sur toutes les feuilles
Dim itemSheet As Worksheet
For Each itemSheet In ThisWorkbook.Worksheets
With itemSheet
'// On vérifie si c'est une feuille de mois
If .Name Like "R#*" Then
Dim entieresValeurs As Variant
'// On charge un tableau avec les valeurs
entieresValeurs = .Range("A2:L" & .Cells(.Rows.Count, 1).End(xlUp).Row).Value
'// On redimmensionne le tableau d'arrivée et on colle les données
position.Resize(UBound(entieresValeurs, 1), UBound(entieresValeurs, 2)).Value = entieresValeurs
'// On définit la nouvelle position de départ
Set position = sh_Cumul.Range("A" & sh_Cumul.Cells(sh_Cumul.Rows.Count, 1).End(xlUp).Row + 1)
End If
End With
Next itemSheet
End SubBonne programmation... Jean-Paul
Jean-Paul, raccourcix, fanfan38, merci pour vos réponse et votre code. Je travaille avec Excel 2019 et mes tableaux de longueurs variables ne font pas plus de 100 lignes.
Les textes par titre sont les mêmes, ils sont en ordres différents d'un mois à l'autre, certains textes peuvent manquer d'un mois à l'autre. Il en va de même avec les autres Titre(x) qui ont chacun leurs textes différents. Les Titre(x) peuvent aussi manquer d'un mois sur l'autre.
Tous les tableaux (R1, R2,.........R12) sont de la forme suivante.
| Feuiille R1 | Feuille Rx | Cumul | |||||||||||
| Definition | Nature | Debit | Credit | Déinition | Nature | Debit | credit | Déinition | Nature | Debit | Credit | ||
| Titre | Titre1 | Titre | Titre1 | Titre | Titre1 | ||||||||
| texte1 | 4 | 9 | texte3 | 1 | 2 | texte1 | 8 | 13 | |||||
| texte2 | 10 | 5 | texte1 | 4 | 4 | texte2 | 12 | 10 | |||||
| texte4 | 8 | 9 | texte2 | 2 | 5 | texte3 | 7 | 6 | |||||
| texte3 | 6 | 4 | texte4 | 8 | 7 | texte4 | 16 | 16 | |||||
| Somme | 28 | 27 | 15 | 18 | 43 | 45 |
Jean-Paul, J'ai essayé votre code mais j'obtiens le code erreur "L'indice n'appartient pas à la sélection". . Je ne comprends pas pourquoi cette erreur et j'aimerai bien la trouver.
Dim headerNames As Variant
headerNames = ThisWorkbook.Worksheets("R1").Range("A1:L1").Value 'Exel me renvoi une erreur "L'indice n'appartiens pas à la sélection"Bonjour le fil,
Jean-Paul, J'ai essayé votre code mais j'obtiens le code erreur "L'indice n'appartient pas à la sélection". . Je ne comprends pas pourquoi cette erreur et j'aimerai bien la trouver.
En général ce type d'erreur survient quand le nom de la feuille n'est pas bon. Il faut savoir que les codes donnés le sont à titre d'exemple et doivent être ajuster pour coller au mieux à votre classeur.
Donc regardez du coté du nom de la feuille si elle se nomme "Feuille R1" c'est normal que cela plante. Voilà pourquoi un fichier est fortement recommandé, cela évite tous ces déboires...
Jean-Paul, merci de me répondre.
toutes les feuilles s'appelle "R1", "R2",...,"Rx",....,"R12" de façon à pouvoir écrire : shMois = sheets("R" & feuille).
J'ai essayé à la place de "R1" d'appeler la feuille "Mois", cela ne change rien.
Vous avez écrit "Voilà pourquoi un fichier est fortement recommandé...". Si je vous comprend bien il faudrait que j'ai 12 fichiers Xlsm représentant chaque mois...!?
Bonjour
Vous avez écrit "Voilà pourquoi un fichier est fortement recommandé...". Si je vous comprend bien il faudrait que j'ai 12 fichiers Xlsm représentant chaque mois...!?
Et NON, vous avez mal compris, je pense
Comme il est indiqué au chapitre 4 de la charte de ce forum
[A LIRE AVANT DE POSTER] Charte du forum et informations utiles
4. Joignez (si possible) un fichier pour augmenter vos chances d'obtenir de l'aide en cliquant sur le bouton Fichier de l'éditeur. Si votre fichier est trop lourd ou contient des données personnelles, créez une version allégée de votre fichier avec juste assez d'informations pour permettre de comprendre votre problème. Dans tous les cas, ne postez JAMAIS de fichiers avec des informations personnelles ou confidentielles (cet utilitaire peut vous aider à les retirer).
JExceL2fr, merci pour votre aide. j'ai compris, Je viens d'essayer l'outil d’anonymisation mais cela ne convient pas. je vais anonymiser un tableau moi-même et je le posterai.
Bonjour le fil,
paterbleutch, il y a des incohérences entre vos captures d'images vos codes et vos propos.
- Dans le code vous copiez les colonnes de 1 à 12
- Dans votre tableau je ne vois que 4colonnes (cela ne correspond pas)
Faites un petit fichier vite fait avec un feuille ou deux qui représentes les vrais colonnes (les données de chaque colonnes sont moins importantes)
Voici le fichier de test faites deux tests :
- Test en cliquant sur le bouton
- Test en en mettant le curseur dans la procédure "MoisCumules()" et en lançant la macro avec "F8" pour se mettre en pas à pas ensuite bien regarder ce qui se passe à chaque étape.