Récupération données à partir de 2 feuilles

cathodique

XLDnaute Barbatruc
Bonsoir Le Forum,
Afin de saisir mes relevés de mesures, je prépare une feuille excel par macro en récupérant les cordonnées de mes points d’une feuille nommée « coordonnées », puis je transfère ces données sur une autre feuille nommées « BD ».

Mais je voudrai compléter mon code, afin qu’en préparant ma feuille de saisie nommée « relevé », je puisse récupérer de la feuille BD certaines valeurs déjà saisies dans de précédents relevés pour des points communs.
Code:
Sub Preparer_New()    'code pour constituer feuille de saisie
Dim ligne As Long, j As Long, k As Long, Lastlig As Long
Dim i As Long
Dim o As Object, bd As Object
Dim Tb, Res()
Dim Dercol As Integer
Dim Val1 As String, Val2 As String

Application.EnableEvents = False
Application.ScreenUpdating = False

Set bd = Sheets("Cordonnées") 'définit l'onglet bd
dl = bd.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit derlg col1 onglet bd
Set o = Sheets("Relevé")

'Dans la variable tableau Tb
With bd
    Lastlig = .Cells(.Rows.Count, 1).End(xlUp).Row
    Tb = .Range("A2:J" & Lastlig)
End With
 
With o
Dercol = o.Range("A5").End(xlToRight).Column
     Val1 = .Range("B2")        'ouvrage
     Val2 = .Range("B3")        'LIMITE
    For i = 1 To Lastlig - 1
        '
        If Tb(i, 3) = Val1 And Tb(i, 4) = Val2 Then
            j = j + 1
            ReDim Preserve Res(1 To 12, 1 To j)
            Res(1, j) = j
            Res(2, j) = Round(Tb(i, 5), 2)   'PK
            Res(3, j) = Tb(i, 6)    'type
            Res(6, j) = Tb(i, 7)   'OUVRAGE VOISIN
            Res(7, j) = Tb(i, 8)    'PK VOISIN
            Res(12, j) = Tb(i, 9)   'OBSERVATION
            
        End If
        
    Next i
    Lastlig = .Cells(.Rows.Count, 1).End(xlUp).Row
    If Lastlig > 8 Then .Range("A8:L" & Lastlig).Clear
    If j > 0 Then .Range("A8").Resize(j, 12) = Application.Transpose(Res)
    .Range("A8").Resize(j, Dercol).Borders.Weight = xlThin
End With
    
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
Dans l’entête de la feuille « relevé » figure le nom de l’ouvrage en B2 et sa limite en B3. Les relevés sont effectués par « ligne » et par « tronçon » (appelés « limite »).

En essayant d'être clair, je donne un exemple :
Sur la feuille relevé, les données concernant l’ouvrage (nom en B2=T1) sont saisis en colD et colE, ceux de l’ouvrage voisin (nom en colF=G1) sont en colH et colI. Ils sont archivés en feuille BD respectivement en col I, J, K, M et N.

J’ai déjà saisi et archivé des relevés pour l’ouvrage ‘’G1’’ (01/08/1993), les noms des points communs à 2 ouvrages comportent tous les lettres P et C. Donc pour ces points il y aura Double ou quadruple valeurs (une valeur ou 2 pour chaque ouvrage).(voir feuille BD, lignes en jaune)

En passant à un autre ouvrage par exemple ‘’T1’’, je retrouve en colonne F ‘’G1’’ en correspondance avec le type ‘’PC’’ (colonne C).

Je sais qu’il faut passer par des filtres. Mais je bloque pour effectuer des filtres successifs et surtout pour les arguments des cellules qui contiennent les lettres P et C. et pour récupérer l’adresse exacte où l’on va mettre les données récupérées.

Je ne sais pas trop si j’ai bien exposé mon problème en vous remerciant beaucoup pour votre aide.

Cordialement,
 

Pièces jointes

  • Commun.xls
    271.5 KB · Affichages: 47
  • Commun.xls
    271.5 KB · Affichages: 51
  • Commun.xls
    271.5 KB · Affichages: 49
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : Récupération données à partir de 2 feuilles

Bonjour,

Je me permets de relancer la discussion. Il me semble que j'ai très mal exposé mon problème. je vais tenter une seconde fois de l'exposer. Mes données sont relevés le long d'une ligne, chaque ligne porte un nom et est subdivisée en partie (initiale début/initiale fin), il arrive qu'elles se croisent (désignation contenant lettres P et C).

Donc sur le relevé (feuille sur laquelle sont saisies les valeurs), en entête se trouvent les désignations de la ligne concernée. Les données pour la ligne concernée sont saisies en colonnes D et E. Mais si les lignes se croisent, il faut faire figurer les données de la ligne voisine dans les colonnes H et I (le nom de ligne croisée est mis en colonne F), ces points de croisement (type) sont repérable en colonne C (cellules contenant les lettres P et C).

Sur la feuille Relevé, suivant les sélections effectuer dans l’entête et en cliquant sur le bouton Nouveau PV, je constitue ma feuille de saisie à partir de la feuille "coordonnées", mais je voudrai aussi récupérer les données des croisements déjà présentent dans la feuille BD.

Je constitue la feuille relevé en utilisant ce code:
Code:
Sub Preparer_New()
Dim ligne As Long, j As Long, k As Long, Lastlig As Long
Dim i As Long
Dim o As Object, bd As Object
Dim Tb, Res()
Dim Dercol As Integer
Dim Val1 As String, Val2 As String
Application.EnableEvents = False
Application.ScreenUpdating = False

Set bd = Sheets("Cordonnées") 'définit l'onglet bd
dl = bd.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit derlg col1 onglet bd
Set o = Sheets("Relevé")
'Dans la variable tableau Tb
With bd
    Lastlig = .Cells(.Rows.Count, 1).End(xlUp).Row
    Tb = .Range("A2:J" & Lastlig)
End With
 
With o
Dercol = o.Range("A5").End(xlToRight).Column
     Val1 = .Range("B2")        'ouvrage
     Val2 = .Range("B3")        'LIMITE
    For i = 1 To Lastlig - 1
        '
        If Tb(i, 3) = Val1 And Tb(i, 4) = Val2 Then
            j = j + 1
            ReDim Preserve Res(1 To 12, 1 To j)
            Res(1, j) = j
            Res(2, j) = Round(Tb(i, 5), 2)   'PK
            Res(3, j) = Tb(i, 6)    'type
            Res(6, j) = Tb(i, 7)   'OUVRAGE VOISIN
            Res(7, j) = Tb(i, 8)    'PK VOISIN
            Res(12, j) = Tb(i, 9)   'OBSERVATION
            
        End If
        
    Next i
    Lastlig = .Cells(.Rows.Count, 1).End(xlUp).Row
    If Lastlig > 8 Then .Range("A8:L" & Lastlig).Clear
    If j > 0 Then .Range("A8").Resize(j, 12) = Application.Transpose(Res)
    .Range("A8").Resize(j, Dercol).Borders.Weight = xlThin
End With
    
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub

Jusque là c'est bon. Mon souci est comment récupérer les valeurs des croisements qui figurent déjà dans la BD. Manuellement, je filtre par rapport aux colonnes dont l'entête est "voisin", mon problème est comment coder tout ça. Je vous remercie pour votre aide.

Cordialement,
 

Pièces jointes

  • Commun1.xls
    271.5 KB · Affichages: 33
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof