Lier des colonnes au code VBA
Résolu
stitchbouck
Messages postés
135
Date d'inscription
Statut
Membre
Dernière intervention
-
stitchbouck Messages postés 135 Date d'inscription Statut Membre Dernière intervention -
stitchbouck Messages postés 135 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Lier des colonnes au code VBA
- Code ascii - Guide
- Comment faire des colonnes sur word - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
2 réponses
Bonjour,
Le plus simple est de définir la colonne par une variable (Range de préférence) et lui attribuer la colonne à l'aide de la méthode Find en cherchant l'intitulé de colonne.
Le plus simple est de définir la colonne par une variable (Range de préférence) et lui attribuer la colonne à l'aide de la méthode Find en cherchant l'intitulé de colonne.
Et voilà !!
Merci Patrice :)
quelques exemples du code après modifs, ça fonctionne du tonnerre !
J'ai remarqué en revanche une anomalie mais qui ne provient pas de cette modif-ci. J'ouvrirai un autre topic si je ne trouve pas de solution, mais ça ne fait que ralentir le code, ça n'est pas bloquant.
en tout cas, ci dessous des exemples qui marchent, merci à toi :)
Il manque peut être des déclarations de feuilles, c'est juste pour montrer à quoi ça ressemble à la fin.
Encore merci !
Merci Patrice :)
quelques exemples du code après modifs, ça fonctionne du tonnerre !
J'ai remarqué en revanche une anomalie mais qui ne provient pas de cette modif-ci. J'ouvrirai un autre topic si je ne trouve pas de solution, mais ça ne fait que ralentir le code, ça n'est pas bloquant.
en tout cas, ci dessous des exemples qui marchent, merci à toi :)
Sub Transfert_données_tableau_complet() ' envoie les données simples (sans calcul) et les données de consommation (avec calcul). Application.ScreenUpdating = False ' Permet de masquer les actions à l'écran ' message d'avertissement début macro. Dim N As Byte, B As Byte, B = 12 N = 6 'Premières lignes à créer Dim SOdR As Worksheet Set SOdR = Sheets("Ordre de relevé") Dim SC As Worksheet Set SC = Sheets("Cuve") Dim cellule As Range Dim Colonne As Range While SOdR.Cells(N, 3) <> "" ' Importation des données ' Cuve Set cellule = SOdR.Rows(5).Find(What:="AS8C1", LookAt:=xlPart) Set Colonne = cellule.EntireColumn SC.Cells(B, 2).Value = SOdR.Cells(N, Colonne.Address).Value Set cellule = SOdR.Rows(5).Find(What:="SO8C1", LookAt:=xlPart) Set Colonne = cellule.EntireColumn SC.Cells(B, 5).Value = SOdR.Cells(N, Colonne.Address).Value ' Passage à la ligne suivante N = N + 1 B = B + 1 Wend 'fin de boucle pour transfert des données simples ' Conso antioxydant, données avec calcul Dim A As Byte A = 6 While SOdR.Cells(A, 1) <> "" Set cellule = SOdR.Rows(5).Find(What:="PCOT501", LookAt:=xlPart) Set Colonne = cellule.EntireColumn If SOdR.Cells(A, Colonne.Address).Value - SOdR.Cells(A + 1, Colonne.Address).Value < 0 Then SCA.Cells(A, 2).Value = 950 - SOdR.Cells(A + 1, Colonne.Address).Value + SOdR.Cells(A, Colonne.Address).Value Else: SCA.Cells(A, 2).Value = SOdR.Cells(A, Colonne.Address).Value - SOdR.Cells(A + 1, Colonne.Address).Value End If If SOdR.Cells(A + 1, Colonne.Address).Value = "" Then SCA.Cells(A, 2).ClearContents End If Wend End Sub
Il manque peut être des déclarations de feuilles, c'est juste pour montrer à quoi ça ressemble à la fin.
Encore merci !
Bon, si je comprends bien, avec le "find" je peux aller chercher la cellule contenant l'en tête, faire remonter le numéro de colonne et utiliser cette remontée dans ma formule de transfert de donnée...
J'ai ouvert un nouveau classeur test, la ligne 1 comprend les en têtes complètes (au moins le texte recherché), les 4 autres lignes des données en lettre et nombre, et 2 feuilles seulement : la feuil1 transfert vers la feuil2.
ça ne donne rien de probant, "variable objet non définie". je continue de réfléchir sur cette piste, mais je veux bien un guide :) je ne suis pas assez compétent, là... clairement pas...
Edit :Text est un mot réservé au VBA, il ne faut pas l'employer pour désigner une variable.
Alors, ça fonctionne, dans le sens où la msgbox annonce bien la colonne, mais je n'arrive pas à l'inclure dans mon calcul.
En soi, la msgbox ne m’intéresse pas, c'est inclure l'info "numéro de colonne" qui m’intéresse, quelque chose comme :
Sheets("feuil1").Cells(Colonne.Address, 2).Value = Sheets("feuil2").Cells(1, 3)
Évidemment ce code ne fonctionne pas ... Le "Split" non plus ne permet pas de résoudre ce calcul.
J'ai donc un code qui fonctionne même en changeant la colonne de place :) :
ça va me simplifier la vie !!
Merci Patrice !