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