[VBA] Faire un offset sur une variable

Bonjour à tous,

J'ai à l'intérieur d'un code un passage qui compare les valeurs de 2 listes (voir fichier joint)

Si l'une des valeurs est manquante, elle est reportée dans une autre colonne

Je souhaite que si la valeur est manquante, que l'on puisse reporter aussi le nom associé à cette valeur (qui est écrit sur une autre colonne)

J'ai tenté de me servir de la fonction offset, sans succès

J'ai essayé différente fonction (avec et sans Range, Address, Cells...) sans succès non plus

Pour expliquer le code rapidement:

On recherche la valeur de la colonne B dans la C, si elle est absente on la recopie dans la D et dans la E devrait apparaître le nom associé contenu dans la colonne A...

Merci d'avance !

Benoit

bonjour

avec Power Pivot et un TCD (qui est filtré <0 )

pas de VBA, aucune formule !

Bonjour JMD,

Merci pour ton retour mais il faut que ça passe par une macro (les colonnes A, B et C changeront tous le temps et sont rapatriés par une macro, je n'ai mis qu'un extrait de tout le fichier)

Cdlt

Voici

Sub controle_sortie_piece()

'*** Définition des variable pour le contrôle ***
Dim PNJDE, NomJDE, PNdevis, r As Range
Dim mycel As Range
Set PNJDE = Range("B2:B" & Range("B300").End(xlUp).Row)
Set NomJDE = Range("A2:A" & Range("A300").End(xlUp).Row)
Set PNdevis = Range("C2:C" & Range("C300").End(xlUp).Row)

'*** Recherche des PN manquants ***
For Each mycel In PNJDE
Set trouve = Range("C2:C" & Range("C300").End(xlUp).Row).Find(what:=mycel, LookIn:=xlValues, LookAt:=xlWhole)
    If trouve Is Nothing Then
        Range("D2000").End(xlUp).Offset(1, 0).Value = mycel
        Range("E2000").End(xlUp).Offset(1, 0).Value = mycel.Offset(0, -1)
    Else
    End If
Next mycel

End Sub

C'est un peu c** mais il faut mettre Set quand tu définis des plages !

Bonjour JMD,

Merci pour ton retour mais il faut que ça passe par une macro (les colonnes A, B et C changeront tous le temps et sont rapatriés par une macro, je n'ai mis qu'un extrait de tout le fichier)

Cdlt

et si on faisait de l'Excel, en prenant la question TOTALE ?

question 1 :

"rapatrier" c'est un job pour Power Query (ton menu Données Obtenir)

pas besoin de VBA

donc on reprend du début : d'où viennent les données ?

question 2 :

quant aux données qui changent tout le temps, c'est normal

tout Excel est fait pour des données qui changent tout le temps

mon fichier peut être modifié si besoin, mais je pense qu'il est proche de la solution

Bonjour,

L'équivalent à Steelson (que je salue) avec Power Query.

Ne dervrait pas nuire à l'utilisation de VBA !?

Cdlt.

re Jean-Eric

Microsoft a créé VBA pour faire à peu près tout

mais constatant que l'acquisition et le traitement des données était la fonction principale d'Excel et de VBA, il a créé des modules spécialisés : P Query, P Pivot et Power BI (dont version gratuite)

il est allé plus loin dans les possibilités de ces modules, bien pus loin, beauuuuuucoup plus loin

il faut absolument que tu les regardes (nombreuses vidéos tutos sur Youtube par exemple)

ces modules sont gratuits (même P Pivot est livré avec Excel depuis peu)

toi qui connais bien la logique de programmation, tu n'auras aucune difficulté

à toi ensuite de trouver l'équilibre dans l'utilisation de tel ou tel outil, y compris VBA

tu as pu voir que depuis 25 ans que je développe sous tableurs en tant que pro, je n'ai jamais utilisé de langage macro.

amitiés

Bonjour, Salut à tous !

Méthode macro différente (travail sur tableaux) :

Sub controle_sortie_piece()
    Dim mq(), jde, pn, i%, m%
    With ActiveSheet
        i = .Range("B" & .Rows.Count).End(xlUp).Row
        jde = .Range("A2:B" & i).Value
        .Range("D2:E" & i).ClearContents
        ReDim mq(i)
        i = .Range("C" & .Rows.Count).End(xlUp).Row
        pn = .Range("C2:C" & i).Value
    End With
    On Error Resume Next
    For i = 1 To UBound(jde)
        If WorksheetFunction.Match(jde(i, 2), pn, 0) > 0 Then
            If Err.Number <> 0 Then
                mq(m) = WorksheetFunction.Index(jde, i, Array(2, 1))
                m = m + 1: Err.Clear
            End If
        End If
    Next i
    If m > 0 Then
        ReDim Preserve mq(m - 1)
        ActiveSheet.Range("D2").Resize(m, 2).Value = WorksheetFunction.Transpose( _
         WorksheetFunction.Transpose(mq))
    End If
End Sub

Cordialement.

Bonjour les pros,

je pense qu'on a perdu BenoitS ... des news ?

Salut Steelson,

Merci beaucoup, effectivement un "Set" en plus suffit

Ci je comprend bien, la variable "cell" n'était pas bonne?

Merci MFerrand, je garde ton code sous le coude

Merci à vous, et au forum !

Bonne journée

Ci je comprend bien, la variable "cell" n'était pas bonne?

Si, c'est ok.

Cela fait partie des premiers tests que j'avais faits pour déterminer l'origine de l'erreur qui est bien un set manquant.

Ah ok merci !

Rechercher des sujets similaires à "vba offset variable"