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 feuille

Hello,

supprimez ces z'esses en trop

     Dim wsMois As Worksheet
     Dim wsCumul As Worksheet

Bonjour

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 Sub

Re,

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 Sub

Bonne 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 R1Feuille RxCumul
DefinitionNatureDebit CreditDéinitionNatureDebitcreditDéinitionNatureDebitCredit
TitreTitre1TitreTitre1TitreTitre1
texte149texte312texte1813
texte2105
texte144texte21210
texte489
texte225texte376
texte364
texte487texte41616
Somme282715184345

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.
Rechercher des sujets similaires à "creation nouveau programme qui fonctionne pas"