Soustraire cellules une à une, enfin presque :)

Résolu
Zerome33 Messages postés 11 Statut Membre -  
Zerome33 Messages postés 11 Statut Membre -
Bien le bonjour !
Mon niveau Excel est très basique et malgré mes recherches, je ne trouve rien qui m'aide à avancer. Il est possible que malgré mes efforts, certaines terminologies ne soient pas les bonnes, je suis nul sur cet outil.

J'ai plusieurs classeurs qui ont plusieurs feuilles. Tous les classeurs ont une même structure strictement identique. Les feuilles (dans l'ordre) sont aussi strictement identiques entre les classeurs. Dans ces feuilles, des nombres positifs sur plusieurs lignes et colonnes.
J'aimerais faire un énième classeur (même structure que les premiers) dans lequel je pourrai faire apparaître la "différence" (numérique) entre chaque cellule d'un même emplacement dans 2 classeurs différents. Une "super soustraction multi cellules et inter classeurs" où je pourrais choisir les classeurs à "comparer" et afficher le delta entre les valeurs de toutes les cellules en "plus" ou "moins".

Voilà, j'espère que le pavé sera compréhensible ou du moins, qu'il ne rebutera personne :)

Merci d'avance

4 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonsoir, cela t'avancera peut-être de faire ainsi:
    enregistre en A1 de ton nouveau classeur la formule suivante, adaptée à tes classeurs et feuilles:
    ='C:\Users\toi\Documents\chemin\[fichier1.xls]f1'!A1-C:\Users\toi\Documents\chemin\[fichier2.xls]f1'!A1 
    duplique la formule vers le bas et vers la droite
    0
    1. Zerome33 Messages postés 11 Statut Membre
       
      MERCI
      0
  2. Zerome33 Messages postés 11 Statut Membre
     
    Là, je suis scotché !
    Trop fort !! C'est exactement ce que je voulais. J'en reviens pas. Je pensais pas être clair (c'est peut être pas le cas) mais tu m'as compris ! Génial !
    Plus qu'à remplacer à souhait les fichiers pointés par une liste déroulante. Je devrais y arriver et ça me fera un outil hyper pratique.
    MERCI
    0
  3. Zerome33 Messages postés 11 Statut Membre
     
    Re,
    Ça fonctionne nickel mais je rencontre des difficultés à jongler avec les fichiers pointés.
    J'ai pas mal de classeurs et un seul pour afficher les résultats.
    J'aimerais pouvoir sélectionner indépendamment les fichiers 1 et 2 (suivant la formule au dessus) à partir d'une liste et que la formule "s'adapte" en lisant les fichiers choisis.
    Est ce possible ?
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      moi j'utiliserais ce code (partiellement testé), à mettre et à exécuter dans le fichier recap:
      Option Explicit
      Sub selfic()
      Dim strFileToOpen1 As String, strFileToOpen2 As String
      Dim sh As Worksheet
      Dim cel As Range
      Dim nfeuil As String, caddr As String, form As String
      Dim p1 As String, n1 As String, p2 As String, n2 As String
      Dim pos1 As Integer, pos2 As Integer
      
      strFileToOpen1 = Application.GetOpenFilename _
      (Title:="Premier classeur", _
      FileFilter:="Excel Files *.xls* (*.xls*),")
      strFileToOpen2 = Application.GetOpenFilename _
      (Title:="Second classeur", _
      FileFilter:="Excel Files *.xls* (*.xls*),")
      pos1 = InStrRev(strFileToOpen1, "\")
      p1 = Left(strFileToOpen1, pos1 - 1)
      n1 = Right(strFileToOpen1, Len(strFileToOpen1) - pos1)
      pos2 = InStrRev(strFileToOpen1, "\")
      p2 = Left(strFileToOpen2, pos2 - 1)
      n2 = Right(strFileToOpen2, Len(strFileToOpen2) - pos2)
      For Each sh In ThisWorkbook.Worksheets
          nfeuil = sh.Name
          For Each cel In sh.Cells
          caddr = cel.Address
          form = "='" & p1 & "\[" & n1 & "]" & nfeuil & "'!" & caddr & "-'" & p2 & "\[" & n2 & "]" & nfeuil & "'!" & caddr
          cel.Formula = form
          Next cel
      Next sh
      End Sub
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        petites améliorations:
        Option Explicit
        Sub selfic()
        Dim strFileToOpen1 As String, strFileToOpen2 As String
        Dim sh As Worksheet
        Dim cel As Range
        Dim nfeuil As String, caddr As String, form As String
        Dim p1 As String, n1 As String, p2 As String, n2 As String
        Dim pos1 As Integer, pos2 As Integer
        Dim str1 As String, str2 As String
        
        strFileToOpen1 = Application.GetOpenFilename _
        (Title:="Premier classeur", _
        FileFilter:="Excel Files *.xls* (*.xls*),")
        strFileToOpen2 = Application.GetOpenFilename _
        (Title:="Second classeur", _
        FileFilter:="Excel Files *.xls* (*.xls*),")
        pos1 = InStrRev(strFileToOpen1, "\")
        p1 = Left(strFileToOpen1, pos1 - 1)
        n1 = Right(strFileToOpen1, Len(strFileToOpen1) - pos1)
        pos2 = InStrRev(strFileToOpen1, "\")
        p2 = Left(strFileToOpen2, pos2 - 1)
        n2 = Right(strFileToOpen2, Len(strFileToOpen2) - pos2)
        For Each sh In ThisWorkbook.Worksheets
            nfeuil = sh.Name
            str1 = "='" & p1 & "\[" & n1 & "]" & nfeuil & "'!"
            str2 = "-'" & p2 & "\[" & n2 & "]" & nfeuil & "'!"
            For Each cel In sh.Cells
                caddr = cel.Address
                form = str1 & caddr & str2 & caddr
                cel.Formula = form
            Next cel
        Next sh
        End Sub
        0
  4. Zerome33 Messages postés 11 Statut Membre
     
    Merci pour ton aide.

    Mon ordi peine avec ça, il lui faut environ 15min pour pondre une ligne... c'est pas possible !
    Est ce qu'il travaille sur toutes les cellules des feuilles ?
    Si oui, comment spécifier une zone pour réduire le travail ? Un autre moyen d'alléger le truc ?

    En fait, la formule (avec les chemins de fichiers) va très bien puisque je sélectionne les valeurs source à l'ouverture. Seulement j'aimerais afficher les sources choisies dans chacune des feuilles du Récap pour rappel.. C'est possible ?
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      en effet, ce que j'ai proposé travaille très bêtement sur toutes les cellules du classeur récapitulatif. ceci devrait être plus rapide, et sauve les noms des sources en A1 et B1 de chaque feuille.
      Option Explicit
      Sub selfic()
      Dim strFileToOpen1 As String, strFileToOpen2 As String
      Dim sh As Worksheet
      Dim cel As Range
      Dim nfeuil As String, caddr As String, form As String
      Dim p1 As String, n1 As String, p2 As String, n2 As String
      Dim pos1 As Integer, pos2 As Integer
      Dim str1 As String, str2 As String
      Dim savedcalcmode As XlCalculation
      
      strFileToOpen1 = Application.GetOpenFilename _
      (Title:="Premier classeur", _
      FileFilter:="Excel Files *.xls* (*.xls*),")
      strFileToOpen2 = Application.GetOpenFilename _
      (Title:="Second classeur", _
      FileFilter:="Excel Files *.xls* (*.xls*),")
      pos1 = InStrRev(strFileToOpen1, "\")
      p1 = Left(strFileToOpen1, pos1 - 1)
      n1 = Right(strFileToOpen1, Len(strFileToOpen1) - pos1)
      pos2 = InStrRev(strFileToOpen1, "\")
      p2 = Left(strFileToOpen2, pos2 - 1)
      n2 = Right(strFileToOpen2, Len(strFileToOpen2) - pos2)
      For Each sh In ThisWorkbook.Worksheets
          savedcalcmode = Application.Calculation
          Application.Calculation = xlCalculationManual
          Application.ScreenUpdating = False
          nfeuil = sh.Name
          str1 = "='" & p1 & "\[" & n1 & "]" & nfeuil & "'!"
          str2 = "-'" & p2 & "\[" & n2 & "]" & nfeuil & "'!"
          For Each cel In sh.UsedRange
              caddr = cel.Address
              form = str1 & caddr & str2 & caddr
              cel.Formula = form
          Next cel
          sh.[A1] = strFileToOpen1
          sh.[B1] = strFileToOpen2
          Application.Calculation = savedcalcmode
          Application.ScreenUpdating = True
      Next sh
      End Sub
      0
    2. Zerome33 Messages postés 11 Statut Membre
       
      Yes ! C'est beaucoup mieux, rien à voir...
      Dernière requête pour peaufiner : possible de remplacer "For Each cel" par "For B2:U33" ?
      Un truc genre "From cel B2...................To cel U33 ?
      Ca me laisserait la possibilité de déplacer les bornes du tableau au besoin + optimiser le temps de calcul...
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Zerome33 Messages postés 11 Statut Membre
       
      alors plutôt:
      For Each cel In sh.[B2:U33]
      , remplacer
      UsedRange
      par
      [B2:U33]
      .
      tu es trop modeste, tu as repéré la ligne à changer!
      0
    4. Zerome33 Messages postés 11 Statut Membre
       
      Mieux vaut rester modeste, surtout quand on est mauvais ;-)
      MERCI pour ton aide précieuse, je n'y serai jamais arrivé seul dans mon coin.
      Je suis hyper content de cet outil ! MERCI l'ami !
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Zerome33 Messages postés 11 Statut Membre
       
      avec plaisir!
      et c'est plus motivant d'assister un modeste lucide et qui s'explique bien!
      quand tu veux, utilise la roue dentée à droite du titre pour marquer le sujet comme résolu, et n'hésite pas à faire appel au forum la prochaine fois, il y a pas mal d'aide autour de Excel.
      0