Autres Valeur maximum

francescofrancesco

XLDnaute Junior
Bonsoir.
rngName=Range("A2:A50")
rngVal=Range("A2:A50")
xxxx=Range("C2:C10")
Comment modifier ce code pour rechercher la valeur Max d'une plage dynamique
xMax = Evaluate("MAX(IF(" & rngName & "=" & xxxx & "," & rngVal & "))")
Excel 2003
 
Dernière édition:

francescofrancesco

XLDnaute Junior
Bonsoir,
le fichier ci-joint est simplifié.
L'insertion se fait en insérant à chaque fois le numéro dans la cellule F2 et la date de la FACTURE MANQUANTE dans la cellule G2 de la feuille PROGRESSIVE.
La comparaison est faite entre la colonne F de la feuille PREMIÈRE NOTE et la colonne A de la feuille PROGRESSIVE.
Je dois tout automatiser.
Merci.
 

Pièces jointes

  • CONFRONTA.xls
    123 KB · Affichages: 12

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous, bonjour @francescofrancesco
Je ne comprends pas bien ce que tu veux faire ...
Dans la feuille "progressivo_fattura" tu saisis en F2 un N° de facture et en G2 la date de cette facture
Et ensuite ?
peux décrire ce que tu veux faire pas à pas en langage courant ?
exemple :​
je recherche F2 dans la colonne A de la feuille "progressivo_fattura",
si elle existe je fais ceci ...
si elle n'existe pas je fais cela ...
J'ai une valeur "X" je veux trouver la valeur maximale dans la colonne Unetelle des lignes pour lesquelles la colonne ? correspond à cette valeur X.
Car pour l'instant je suis dans le flou ...
A bientôt
 

francescofrancesco

XLDnaute Junior
Bonjour.
Vous pouvez tester avec le fichier joint.
Vous devez comparer la colonne F de la feuille Journal avec la colonne A de la feuille Progressif.
Si vous remarquez dans la feuille Première note que la première facture manquante est le numéro. 4 colonne F.
Entrez 4 dans la cellule M2 et la date dans N2 et vous verrez que le numéro de facture sera inséré dans la feuille Journal. 4 qui n'était pas là auparavant, alors il faut faire l'opération pour le n° 5 et ainsi de suite pour toutes les factures manquantes.
Ainsi si de la comparaison des deux colonnes les Factures manquantes sont par exemple 15, l'opération doit être répétée 15 fois.
La question est : comment puis-je changer le code pour insérer toutes les factures manquantes d'un coup ?

Icona di Verificata con community
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,
Vous devez comparer la colonne F de la feuille Journal avec la colonne A de la feuille Progressif.
Si vous remarquez dans la feuille Première note que la première facture manquante est le numéro. 4

D'après ce que vous dites :
  • il y a une feuille "Journal"
  • il y a une feuille "Progressif"
  • il y a une feuille "Première note"
Dans le classeur, il n'y a que deux feuilles qui ne porte aucun des 3 noms cités ci-dessus !
  • feuille "progressivo_fattura"
  • feuille "primanota"
Nous avons donc 5 noms : qui est qui ?
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Re-Bonjour,
Dans la feuille "progressivo_fattura" le n° de commande se trouve dans dans colonne A "prog".
On insère toutes les factures de la feuille "progressivo_fattura" qui ne se trouvent pas en colonne F "numéro fattura" de la feuille "primanota" dans cette feuille au bon endroit, puis on renumérote la colonne A "prog" de la feuille "primanota"
Est-ce bien cela ?
Je m'y remets demain ...
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonsoir à tous & à toutes, bonsoir @francescofrancesco
Bon j'ai trouvé un moment pour bosser sur ta question voici la macro que je te propose :
VB:
Option Explicit
Sub Inserer_Facture()
     Dim F As Worksheet, Fx As Worksheet, Tablo1, Tablo2, TabloTemp
     Dim nbl As Integer, i As Integer, j As Byte, k As Integer, idx As Integer
    
     Set F = ThisWorkbook.Worksheets("primanota")
     Set Fx = ThisWorkbook.Worksheets("progressivo_FATTURA")
    
'tableau des données de la feuille "progressivo_FATTURA"
     With Fx: Tablo1 = .Range(.Cells(3, 1), .Cells(.Columns(1).Cells(.Rows.Count).End(xlUp).Row, 5)).Value: End With
'tableau des données de la feuille "primanota"
     With F: Tablo2 = .Range(.Cells(2, 1), .Cells(.Columns(1).Cells(.Rows.Count).End(xlUp).Row, 6)).Value: End With
    
     nbl = UBound(Tablo2, 1)
'tableau provisoire pour Redim (col,lignes)
     ReDim TabloTemp(1 To 6, 1 To nbl)
     For i = 1 To nbl: For j = 1 To 6
          TabloTemp(j, i) = Tablo2(i, j)
     Next j: Next i
    
     For i = 1 To UBound(Tablo1, 1)
          With WorksheetFunction: idx = .Match(Tablo1(i, 1), .Index(TabloTemp, 6, 0), 1): End With
          If TabloTemp(6, idx) <> Tablo1(i, 1) Then
               nbl = nbl + 1
               ReDim Preserve TabloTemp(1 To 6, 1 To nbl)
               For k = nbl To idx + 2 Step -1: For j = 1 To 6
                    TabloTemp(j, k) = TabloTemp(j, k - 1)
               Next j: Next k
               TabloTemp(2, idx + 1) = Tablo1(i, 3)
               TabloTemp(3, idx + 1) = "FT_" & Tablo1(i, 1)
               TabloTemp(4, idx + 1) = Tablo1(i, 2)
               TabloTemp(5, idx + 1) = Tablo1(i, 5)
               TabloTemp(6, idx + 1) = Tablo1(i, 1)
          End If
     Next i
    
     For i = 1 To nbl
          TabloTemp(1, i) = i
     Next
    
     F.Cells(2, 1).Resize(nbl, 6).Value = WorksheetFunction.Transpose(TabloTemp)
End Sub

Essaie le fichier joint.
A bientôt
 

Pièces jointes

  • CONFRONTA AtTheOne.xls
    120.5 KB · Affichages: 3

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonsoir à toutes & à tous, bonsoir @francescofrancesco
Fichier Ok juste un petit changement sur la colonne Date.
Juste une question, y a-t-il une possibilité d'adapter mon code, merci.
Peux-tu m'indiquer la modif faite concernant la colonne Date ?

Adapter ton code à quoi ? Si c'est pour faire la même chose que ma macro, je te conseille de passer par des tableaux VBA et de plaquer le tableau de résultat dans la feuille plutôt que de manipuler les cellules l'une après l'autre, c'est une question de rapidité d’exécution..

A bientôt
 

francescofrancesco

XLDnaute Junior
VB:
Application.ScreenUpdating = False
                            For ix = f.Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
                                Application.ScreenUpdating = False
                                Application.DisplayAlerts = False
                                   If Trim(f.Cells(ix, 2)) = "" Then
                                           Rows(ix).Delete
                                   End If
                                  
                                    If Trim(f.Cells(ix, 2)) <> "" Then
                                    f.Cells(ix, 2) = CDate(f.Cells(ix, 2))
                                              f.Cells(ix, 2).NumberFormat = "mm/dd/yyyy"
                                              f.Cells(ix, 2) = Format(f.Cells(ix, 2), "mm/dd/yyyy")
                                   End If
                            Next
                            
                            Application.ScreenUpdating = False
                            For ixx = fx.Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
                                Application.ScreenUpdating = False
                                Application.DisplayAlerts = False
                                
                                    If Trim(fx.Cells(ixx, 3)) <> "" Then
                                              fx.Cells(ixx, 2) = CDate(fx.Cells(ixx, 2))
                                              fx.Cells(ixx, 3).NumberFormat = "mm/dd/yyyy"
                                              fx.Cells(ixx, 3) = Format(Cells(ixx, 3), "mm/dd/yyyy")
                                   End If
                            Next
                            
                            Application.ScreenUpdating = True
                        
                            'tableau des données de la feuille "progressivo_FATTURA"
                             With fx: Tablo1 = .Range(.Cells(3, 1), .Cells(.Columns(1).Cells(.Rows.Count).End(xlUp).Row, 5)).Value: End With
                            'tableau des données de la feuille "primanota"
                             With f: Tablo2 = .Range(.Cells(2, 1), .Cells(.Columns(1).Cells(.Rows.Count).End(xlUp).Row, 6)).Value: End With
                            
                                 nbl = UBound(Tablo2, 1)
                            'tableau provisoire pour Redim (col,lignes)
                                 ReDim TabloTemp(1 To 6, 1 To nbl)
                                 For i = 1 To nbl: For j = 1 To 6
                                      TabloTemp(j, i) = Tablo2(i, j)
                                 Next j: Next i
                                
                                 For i = 1 To UBound(Tablo1, 1)
                                      With WorksheetFunction: idx = .Match(Tablo1(i, 1), .Index(TabloTemp, 6, 0), 1): End With
                                      If TabloTemp(6, idx) <> Tablo1(i, 1) Then
                                           nbl = nbl + 1
                                           ReDim Preserve TabloTemp(1 To 6, 1 To nbl)
                                           For k = nbl To idx + 2 Step -1: For j = 1 To 6
                                                TabloTemp(j, k) = TabloTemp(j, k - 1)
                                           Next j: Next k
                                           TabloTemp(2, idx + 1) = Tablo1(i, 3)
                                           TabloTemp(3, idx + 1) = "FT_" & Tablo1(i, 1)
                                           TabloTemp(4, idx + 1) = Tablo1(i, 2)
                                           TabloTemp(6, idx + 1) = Tablo1(i, 1)
                                        '  TabloTemp(11, idx + 1) = Tablo1(i, 1)
                                           'TabloTemp(10, idx + 1) = CLng(Tablo1(i, 4))
                                           'TabloTemp(16, idx + 1) = CLng(Tablo1(i, 4))
                                      End If
                                 Next i
                                
                                 For i = 1 To nbl
                                      TabloTemp(1, i) = i
                                 Next
                                 f.Cells(2, 1).Resize(nbl, 11).Value = WorksheetFunction.Transpose(TabloTemp)
                          
                            Application.ScreenUpdating = False
                            For a = f.Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
                                Application.ScreenUpdating = False
                                Application.DisplayAlerts = False
                                 If Trim(f.Cells(a, 2)) <> "" Then
                                      f.Cells(a, 2).Value = Format(f.Cells(a, 2).Value, "dd/mm/yyyy")
                                      f.Cells(a, 2).Value = DateSerial(Year(f.Cells(a, 2).Value), Month(f.Cells(a, 2).Value), Day(f.Cells(a, 2).Value))
                                End If
                            Next
                            Application.ScreenUpdating = True
 

francescofrancesco

XLDnaute Junior
Bonjour, j'ai raté votre question.
Sur le fichier original j'ai changé la date dans la colonne B.
Je l'ai changé comme ça.
Code:
[CODE=vb]Application.ScreenUpdating = False

                            For ix = f.Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1

                                Application.ScreenUpdating = False

                                Application.DisplayAlerts = False

                                   If Trim(f.Cells(ix, 2)) = "" Then

                                           Rows(ix).Delete

                                   End If

                                

                                    If Trim(f.Cells(ix, 2)) <> "" Then

                                    f.Cells(ix, 2) = CDate(f.Cells(ix, 2))

                                              f.Cells(ix, 2).NumberFormat = "mm/dd/yyyy"

                                              f.Cells(ix, 2) = Format(f.Cells(ix, 2), "mm/dd/yyyy")

                                   End If

                            Next

                          

                            Application.ScreenUpdating = False

                            For ixx = fx.Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1

                                Application.ScreenUpdating = False

                                Application.DisplayAlerts = False

                              

                                    If Trim(fx.Cells(ixx, 3)) <> "" Then

                                              fx.Cells(ixx, 2) = CDate(fx.Cells(ixx, 2))

                                              fx.Cells(ixx, 3).NumberFormat = "mm/dd/yyyy"

                                              fx.Cells(ixx, 3) = Format(Cells(ixx, 3), "mm/dd/yyyy")

                                   End If

                            Next

                          

                            Application.ScreenUpdating = True

                      

                            'tableau des données de la feuille "progressivo_FATTURA"

                             With fx: Tablo1 = .Range(.Cells(3, 1), .Cells(.Columns(1).Cells(.Rows.Count).End(xlUp).Row, 5)).Value: End With

                            'tableau des données de la feuille "primanota"

                             With f: Tablo2 = .Range(.Cells(2, 1), .Cells(.Columns(1).Cells(.Rows.Count).End(xlUp).Row, 6)).Value: End With

                          

                                 nbl = UBound(Tablo2, 1)

                            'tableau provisoire pour Redim (col,lignes)

                                 ReDim TabloTemp(1 To 6, 1 To nbl)

                                 For i = 1 To nbl: For j = 1 To 6

                                      TabloTemp(j, i) = Tablo2(i, j)

                                 Next j: Next i

                              

                                 For i = 1 To UBound(Tablo1, 1)

                                      With WorksheetFunction: idx = .Match(Tablo1(i, 1), .Index(TabloTemp, 6, 0), 1): End With

                                      If TabloTemp(6, idx) <> Tablo1(i, 1) Then

                                           nbl = nbl + 1

                                           ReDim Preserve TabloTemp(1 To 6, 1 To nbl)

                                           For k = nbl To idx + 2 Step -1: For j = 1 To 6

                                                TabloTemp(j, k) = TabloTemp(j, k - 1)

                                           Next j: Next k

                                           TabloTemp(2, idx + 1) = Tablo1(i, 3)

                                           TabloTemp(3, idx + 1) = "FT_" & Tablo1(i, 1)

                                           TabloTemp(4, idx + 1) = Tablo1(i, 2)

                                           TabloTemp(6, idx + 1) = Tablo1(i, 1)

                                        '  TabloTemp(11, idx + 1) = Tablo1(i, 1)

                                           'TabloTemp(10, idx + 1) = CLng(Tablo1(i, 4))

                                           'TabloTemp(16, idx + 1) = CLng(Tablo1(i, 4))

                                      End If

                                 Next i

                              

                                 For i = 1 To nbl

                                      TabloTemp(1, i) = i

                                 Next

                                 f.Cells(2, 1).Resize(nbl, 11).Value = WorksheetFunction.Transpose(TabloTemp)

                        

                            Application.ScreenUpdating = False

                            For a = f.Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1

                                Application.ScreenUpdating = False

                                Application.DisplayAlerts = False

                                 If Trim(f.Cells(a, 2)) <> "" Then

                                      f.Cells(a, 2).Value = Format(f.Cells(a, 2).Value, "dd/mm/yyyy")

                                      f.Cells(a, 2).Value = DateSerial(Year(f.Cells(a, 2).Value), Month(f.Cells(a, 2).Value), Day(f.Cells(a, 2).Value))

                                End If
 

Discussions similaires

Réponses
6
Affichages
140

Statistiques des forums

Discussions
312 236
Messages
2 086 477
Membres
103 232
dernier inscrit
logan035